Umstieg auf OH3 executeCommandLine rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12
Answers: 0

Umstieg auf OH3 executeCommandLine rule

Beitrag 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?

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12
Answers: 0

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag von djuscha »

O Super Vielen Dank !! jetzt geht!!

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12
Answers: 0

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag von udo1toni »

Gibt es denn die Datei pic2.jpg im Verzeichnis /etc/openhab/html/?


Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12
Answers: 0

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12
Answers: 0

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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 :(

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12
Answers: 0

Re: Umstieg auf OH3 executeCommandLine rule

Beitrag 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.

Antworten