Seite 1 von 2

Umstieg auf OH3 executeCommandLine rule

Verfasst: 30. Mär 2022 10:22
von djuscha
Bin endlich dazu gekommen auf OH umzusteigen. Hab alle mit Text angelegt .und fast alles geht nur paar Probs hab ich noch
das war bei mir in OH2.5

Code: Alles auswählen

rule "Post"
when
      //Festersensor im Briefkasten
    Item Kontakt4  changed  to OPEN
then
{
  var picture1 = "pic1.jpg"
      var picture3 = "pic3.jpg"
     
 executeCommandLine("wget http://admin:HikvisioN1423@192.168.178.170/ISAPI/Streaming/channels/201/picture -O /etc/openhab/html/" + picture1)
 executeCommandLine("wget http://admin:HikvisioN1423@192.168.178.160/ISAPI/Streaming/channels/201/picture -O /etc/openhab/html/" + picture3)

   Echo_Living_Room_TTS.sendCommand('Post ist da')
   Echo_Garage_TTS.sendCommand( 'Post ist da')  
    Thread::sleep(3000)
  
    val List<String> attachmentUrlList = newArrayList(
    "file:////etc/openhab/html/pic1.jpg",
    "file:////etc/openhab/html/pic3.jpg"
     )
    val mailActions = getActions("mail","mail:smtp:samplesmtp")
    mailActions.sendHtmlMail("innogysmart@gmail.com","\ud83d\udcec Postbote"," hat um "+now.toString (" HH:mm:ss ") + "post gebracht", attachmentUrlList)
   
    val telegramAction = getActions("telegram","telegram:telegramBot:bot1")
    telegramAction.sendTelegram("Post ist da \ud83d\udceb") 
    telegramAction.sendTelegramPhoto("http://192.168.178.195:8080/static/pic1.jpg", "Kamera Garage")
    telegramAction.sendTelegramPhoto("http://192.168.178.195:8080/static/pic3.jpg", "Kamera Einfahrt")
  
end
wenn ich die gleiche Rule nehme bekomme ich Fehlermeldung

Code: Alles auswählen

2022-03-30 10:17:57.043 [WARN ] [rg.openhab.core.io.net.exec.ExecUtil] - Error occurred when executing commandLine '[wget http://admin:HikvisioN1423@192.168.178.170/ISAPI/Streaming/channels/201/picture -O /etc/openhab/html/pic1.jpg]'

java.io.IOException: Cannot run program "wget http://admin:HikvisioN1423@192.168.178.170/ISAPI/Streaming/channels/201/picture -O /etc/openhab/html/pic1.jpg": error=2, No such file or directory

	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1128) ~[?:?]

	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1071) ~[?:?]

	at org.openhab.core.io.net.exec.ExecUtil.executeCommandLine(ExecUtil.java:59) ~[?:?]

	at org.openhab.core.model.script.actions.Exec.executeCommandLine(Exec.java:40) ~[?:?]

	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:1192) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1167) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1153) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1098) ~[?:?]

	at org.openhab.core.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1008) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:971) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:247) ~[?:?]

	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]

	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]

	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213) ~[?:?]

	at org.openhab.core.model.script.runtime.internal.engine.ScriptImpl.execute(ScriptImpl.java:80) ~[?:?]

	at org.openhab.core.model.script.runtime.internal.engine.DSLScriptEngine.eval(DSLScriptEngine.java:131) ~[?:?]

	at org.openhab.core.automation.module.script.internal.handler.ScriptActionHandler.lambda$0(ScriptActionHandler.java:62) ~[?:?]

	at java.util.Optional.ifPresent(Optional.java:183) [?:?]

	at org.openhab.core.automation.module.script.internal.handler.ScriptActionHandler.execute(ScriptActionHandler.java:59) [bundleFile:?]

	at org.openhab.core.automation.internal.RuleEngineImpl.executeActions(RuleEngineImpl.java:1180) [bundleFile:?]

	at org.openhab.core.automation.internal.RuleEngineImpl.runRule(RuleEngineImpl.java:988) [bundleFile:?]

	at org.openhab.core.automation.internal.TriggerHandlerCallbackImpl$TriggerData.run(TriggerHandlerCallbackImpl.java:89) [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:829) [?:?]

Caused by: java.io.IOException: error=2, No such file or directory

	at java.lang.ProcessImpl.forkAndExec(Native Method) ~[?:?]

	at java.lang.ProcessImpl.<init>(ProcessImpl.java:340) ~[?:?]

	at java.lang.ProcessImpl.start(ProcessImpl.java:271) ~[?:?]

	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1107) ~[?:?]
	2022-03-30 10:18:00.111 [WARN ] [mail.internal.action.SendMailActions] - Could not send mail: Invalid URL set:file:////etc/openhab/html/pic1.jpg

2022-03-30 10:18:00.197 [WARN ] [gram.internal.action.TelegramActions] - Download from http://192.168.178.195:8080/static/pic1.jpg failed with status: 404
	
	
und für die zweite Kamera das selbe
Ist jetzt schreibweise für executeCommandLine anders bei OH 3?

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 30. Mär 2022 11:30
von udo1toni
Das wird leider aus der Dokumentation nicht klar. Leerzeichen sind nicht zulässig. Stattdessen musst Du alle Leerzeichen durch ", " ersetzen. Sieht dann so aus:

Code: Alles auswählen

executeCommandLine("wget", "http://admin:HikvisioN1423@192.168.178.170/ISAPI/Streaming/channels/201/picture", "-O", "/etc/openhab/html/" + picture1)

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 30. Mär 2022 13:29
von djuscha
O Super Vielen Dank !! jetzt geht!!

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 30. Mär 2022 23:45
von djuscha
und wie ist es bei executeCommandLine("ffmpeg"
so hatte ich bei OH2

Code: Alles auswählen

executeCommandLine("ffmpeg -i rtsp://admin:62906290@192.168.178.138/profile5/media.smp -s 480x300 -f image2 -vframes 1 pic.jpg -y /etc/openhab/html/pic2.jpg")
so hab ich probiert

Code: Alles auswählen

executeCommandLine("ffmpeg", "-i", "rtsp://admin:62906290@192.168.178.138/profile5/media.smp", "-s", "480x300", "-f", "image2", "-vframes 1", "pic.jpg", "-y", "/etc/openhab/html/pic2.jpg")
bekomme Fehler

Code: Alles auswählen

2022-03-30 23:36:26.439 [WARN ] [gram.internal.action.TelegramActions] - Download from http://192.168.178.195:8080/static/pic2.jpg failed with status: 404

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 31. Mär 2022 14:26
von udo1toni
Gibt es denn die Datei pic2.jpg im Verzeichnis /etc/openhab/html/?


Gesendet von iPad mit Tapatalk

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 31. Mär 2022 21:09
von djuscha
Die Datei pic2.jpg  erstelle ich doch mit dem executeCommandLine ffmpeg aus dem rtsp Stream... das ist es was nicht klappt.

ffmpeg hab ich instaliert.

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 31. Mär 2022 23:04
von udo1toni
Sicher? Ich sehe im Code oben nur Befehle, um pic1.jpg und pic3.jpg zu erstellen. Deshalb die Nachfrage.

Du könntest versuchen, den eigentlichen wget Befehl in ein bash Script auszulagern. Du kannst dann das bash Script per executeCommandLine aufrufen. Vorteil: Du kannst in dem Script zusätzlich eine Ausgabe in eine Datei auslösen und so prüfen, ob das Script aufgerufen wurde. Außerdem brauchst Du keine Parameter, oder allenfalls einen (welche der drei Bilder soll abgerufen werden)

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 1. Apr 2022 01:01
von djuscha
das ist die ganze rule

Code: Alles auswählen

rule "Post"
when
   
    Item Kontakt4  changed  to OPEN  //Festersensor im Briefkasten
then
{
      var picture1 = "pic1.jpg"
      
      var picture3 = "pic3.jpg"
    executeCommandLine("wget", "http://admin:HikvisioN1423@192.168.178.170/ISAPI/Streaming/channels/201/picture", "-O", "/etc/openhab/html/" + picture1) 
    executeCommandLine("ffmpeg", "-i", "rtsp://admin:62906290@192.168.178.138/profile5/media.smp", "-s", "480x300", "-f", "image2", "-vframes 1", "pic.jpg", "-y", "/etc/openhab/html/pic2.jpg")
    executeCommandLine("wget", "http://admin:HikvisioN1423@192.168.178.160/ISAPI/Streaming/channels/201/picture", "-O", "/etc/openhab/html/" + picture3)
 	
   Echo_Living_Room_TTS.sendCommand('Post ist da')
   Echo_Garage_TTS.sendCommand( 'Post ist da')  
    Thread::sleep(3000)
  
    val List<String> attachmentUrlList = newArrayList(
    "file:////etc/openhab/html/pic1.jpg",
    "file:////etc/openhab/html/pic2.jpg",
    "file:////etc/openhab/html/pic3.jpg"
     )
    val mailActions = getActions("mail","mail:smtp:samplesmtp")
    mailActions.sendHtmlMail("innogysmart@gmail.com","\ud83d\udcec Postbote"," hat um "+now.toString (" HH:mm:ss ") + "post gebracht", attachmentUrlList)
   
    val telegramAction = getActions("telegram","telegram:telegramBot:bot1")
    telegramAction.sendTelegram("Post ist da \ud83d\udceb") 
    telegramAction.sendTelegramPhoto("http://192.168.178.195:8080/static/pic1.jpg", "Kamera Garage")
    telegramAction.sendTelegramPhoto("http://192.168.178.195:8080/static/pic2.jpg", "Kamera Eingang")
    telegramAction.sendTelegramPhoto("http://192.168.178.195:8080/static/pic3.jpg", "Kamera Einfahrt")
   
}
end
ist auch alles gelaufen im OH2.5
bei wget hab ich dein syntax übernomen und das geht bei 2kameras
die dritte liefert nur rtsp stream und den muss ich ja umwandeln mit ffmpeg , da hab ich jetzt anstatt Lehrzeichen überal ", " eingefügt aber das passt noch nicht :(

das mit dem bash Script weiss ich gar nicht wie das geht :(

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 1. Apr 2022 19:18
von udo1toni
Du hast ein Leerzeichen übersehen :) Nach -vframes kommt ein Leerzeichen vor der 1.

Bashscript:
Du kannst aber auch eine Datei getpics.sh anlegen, am besten im Ordner /usr/local/bin/.
Schritt 1: touch ~/getpics.sh
Schritt 2: chmod 755 ~/getpics.sh
Schritt 3: nano ~/getpics.sh

Inhalt einfügen:

Code: Alles auswählen

#! /bin/bash
wget http://admin:HikvisioN1423@192.168.178.170/ISAPI/Streaming/channels/201/picture -O /etc/openhab/html/pic1.jpg 
wget http://admin:HikvisioN1423@192.168.178.160/ISAPI/Streaming/channels/201/picture -O /etc/openhab/html/pic1.jpg 
ffmpeg -i rtsp://admin:62906290@192.168.178.138/profile5/media.smp -s 480x300 -f image2 -vframes 1 pic.jpg -y /etc/openhab/html/pic2.jpg
Schritt 4: sudo mv ~/getpics.sh /usr/local/bin/

Jetzt kannst Du dieses Script aus openHAB heraus aufrufen:

Code: Alles auswählen

executeCommandLine("/usr/local/bin/getpics.sh")
Zur Erklärung: touch fasst die angegebene Datei an. ~/ verweist auf den Home-Ordner des aktuellen Users. Es wird also eine Datei mit dem Namen getpics.sh im home-Ordener des angemeldeten Users angelegt.
chmod ändert die Modi der angegebenen Datei. 755 bedeutet: Der Besitzer (1. Ziffer) darf alles, Gruppenmitglieder (2. Ziffer) und alle anderen dürfen die Datei lesen und ausführen.
nano ruft den Editor auf.
mv bewegt die Datei von einem zum anderen Ort (auch verwendet um den Namen einer Datei zu ändern). Da das Verzeichnis /usr/local/bin/ geschützt ist, darf nur root in dieses Verzeichnis schreiben, deshalb ist für die Aktion sudo erforderlich.

Im Bash Script gibt die Zeile #! /bin/bash an, dass zum Ausführen die Shell /bin/bash verwendet wird, falls keine andere Shell angegeben wurde.

Re: Umstieg auf OH3 executeCommandLine rule

Verfasst: 1. Apr 2022 23:33
von djuscha
Vielen Dank Udo!
Leerzeichen vor 1 war mein Fehler
Jetzt bekomme ich alle drei Fotos wie ich wollte.Hab mal schnell nach der Spätschicht ausprobiert :)
das mit dem Script werde ich auf jedem Fall ausprobieren!!ist auf jedem Fall sehr Interessante Idee ,ich muss noch viel lernen
noch paar Sachen und neue OH3 läuft wie ich wollte.