OH3 Pushover Attachments

Hi,
The ongoing saga of upgrading from 2.5 to 3 continues.
I’ve managed to get Pushover working by creating multiple Things for each notification sound.
However, how do I send attachments?

OH2.5:
sendPushoverMessage(pushoverBuilder(“Door Bell Rung”).withTitle(“Door Bell Rung”).withPriority(0).withSound(“incoming”).withAttachment(attachmentUrl))

OH3:
val pushoverActions = getActions(“pushover”, “pushover:pushover-account:Incoming”)
pushoverActions.sendMessage(“Door Bell Rung”, “Door Bell Rung”)

The OH3 above works, but no idea how/if I can send attachments.

Any help much appreciated.

Thanks,
Richie

Check out the documentation.

You can use sendAttachmentMessage in place of sendMessage.

Bill

Hi,
I had thought that documentation was only for OH2.
So it should work that way?
I will have a play with it tomorrow.

Thanks,
Richie

figured out my problem.
“title” seems to be mandatory

Hi,

Not working for me :frowning:
I get this error in the openhab.log:
2021-01-14 10:47:00.733 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job failed and stopped
org.eclipse.emf.common.util.BasicEList$BasicIndexOutOfBoundsException: index=4, size=4
at org.eclipse.emf.common.util.BasicEList.get(BasicEList.java:346) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1205) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1136) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1082) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:862) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:232) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:216) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:459) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:240) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:216) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:202) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30) ~[?:?]
at com.sun.proxy.$Proxy369.apply(Unknown Source) ~[?:?]
at org.openhab.core.model.script.actions.ScriptExecution.lambda$0(ScriptExecution.java:82) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:166) ~[bundleFile:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:76) [bundleFile:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]

using this:
val String attachmentUrl = “F:/Apps/openHABContent/cctv00001.jpg”
val pushoverActions = getActions(“pushover”, “pushover:pushover-account:Incoming”)
pushoverActions.sendAttachmentMessage(“Door Bell Rung”, “Door Bell Rung”, attachmentUrl)

Not sure if this is an OH3 issue or something I’ve missed.

Thanks,
Richie

Try adding the content type.

pushoverActions.sendAttachmentMessage("Door Bell Rung", "Door Bell Rung", attachmentUrl, "image/jpeg")

I tested it with “image/jpeg” and just “” for the content parameter and it worked. Not accounting for the content parameter resulted in the same error you received.

Bill

@bjsjr - thanks, this also helped me as I was having the same problem after upgrading to 3.0. Was starring blindly at the docs:

sendAttachmentMessage(String message, @Nullable String title, String attachment, @Nullable String contentType) - This method is used to send a message with an attachment. It takes a (local) path to the attachment (parameter attachment mandatory ) and an optional contentType to define the content-type of the attachment (default: image/jpeg ).

Since “image/jpeg” is documented as default, but doesn’t work - did you create a bug report?

/Jacob

It’s already been reported that it looks like none of the default arguments for pushover work. I did add a comment to confirm the issue also exists in sendAttachmentMessage.

You can find the issue here.

Bill

2 Likes

Hi,
Adding “” or “image/jpeg” results in this error:
org.openhab.binding.pushover.internal.connection.PushoverCommunicationException: java.util.NoSuchElementException
at org.openhab.binding.pushover.internal.connection.PushoverAPIConnection.executeRequest(PushoverAPIConnection.java:167) ~[?:?]
at org.openhab.binding.pushover.internal.connection.PushoverAPIConnection.post(PushoverAPIConnection.java:134) ~[?:?]
at org.openhab.binding.pushover.internal.connection.PushoverAPIConnection.sendMessage(PushoverAPIConnection.java:78) ~[?:?]
at org.openhab.binding.pushover.internal.handler.PushoverAccountHandler.sendMessage(PushoverAccountHandler.java:137) ~[?:?]
at org.openhab.binding.pushover.internal.actions.PushoverActions.send(PushoverActions.java:208) ~[?:?]
at org.openhab.binding.pushover.internal.actions.PushoverActions.sendAttachmentMessage(PushoverActions.java:125) ~[?:?]
at org.openhab.binding.pushover.internal.actions.PushoverActions.sendAttachmentMessage(PushoverActions.java:130) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1176) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1137) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1082) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:862) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:232) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:216) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:459) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:240) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:216) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:202) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30) ~[?:?]
at com.sun.proxy.$Proxy286.apply(Unknown Source) ~[?:?]
at org.openhab.core.model.script.actions.ScriptExecution.lambda$0(ScriptExecution.java:82) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:166) ~[bundleFile:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:76) [bundleFile:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.util.NoSuchElementException
at org.eclipse.jetty.client.util.PathContentProvider$PathIterator.next(PathContentProvider.java:140) ~[?:?]
at org.eclipse.jetty.client.util.PathContentProvider$PathIterator.next(PathContentProvider.java:110) ~[?:?]
at org.eclipse.jetty.client.util.MultiPartContentProvider$MultiPartIterator.next(MultiPartContentProvider.java:346) ~[?:?]
at org.eclipse.jetty.client.util.MultiPartContentProvider$MultiPartIterator.next(MultiPartContentProvider.java:301) ~[?:?]
at org.eclipse.jetty.client.HttpContent.advance(HttpContent.java:155) ~[?:?]
at org.eclipse.jetty.client.HttpContent.advance(HttpContent.java:143) ~[?:?]
at org.eclipse.jetty.client.HttpSender$ContentCallback.process(HttpSender.java:829) ~[?:?]
at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) ~[?:?]
at org.eclipse.jetty.util.IteratingCallback.succeeded(IteratingCallback.java:366) ~[?:?]
at org.eclipse.jetty.client.HttpSender$ContentCallback.succeeded(HttpSender.java:885) ~[?:?]
at org.eclipse.jetty.util.Callback$Nested.succeeded(Callback.java:266) ~[?:?]
at org.eclipse.jetty.client.http.HttpSenderOverHTTP$ByteBufferRecyclerCallback.succeeded(HttpSenderOverHTTP.java:335) ~[?:?]
at org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:394) ~[?:?]
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint$IncompleteWriteCallback.succeeded(SslConnection.java:1312) ~[?:?]
at org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:394) ~[?:?]
at org.eclipse.jetty.io.ChannelEndPoint$3.run(ChannelEndPoint.java:132) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) ~[?:?]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367) ~[?:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782) ~[?:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918) ~[?:?]

So, not sure what else is wrong.

Thanks,
Richie

Sorry, I don’t know what else to suggest. Here’s the complete code I used:

val String attachmentUrl = "/home/openhab/yin_yang.gif"
val pushoverActions = getActions("pushover", "pushover:pushover-account:default")
pushoverActions.sendAttachmentMessage("Door Bell Rung", "Door Bell Rung", attachmentUrl,"")

The only thing I changed from your example was the attachment name, and the account info.I also had to fix all of the quote marks which I assume the forum software changed when you posted without using the code fences.

Bill