Re: OH3 Anwesenheitserkennung
Verfasst: 26. Jun 2021 10:36
Erst mal Danke für den guten Tipp.
Code: Alles auswählen
rule "test execute"
when
Item Dummy_3 changed to ON
then
// Version 1 - funktioniert nicht - ich kann den Grund nicht finden
var pingresult = executeCommandLine(Duration.ofSeconds(10),"/bin/ping","-c5","-W1", "192.168.178.xy", ">", "/dev/null", "&&", "echo", "online", "||", "echo", "offline") // String in einer Variablen zwischenspeichern
logInfo("execute-Version 1","String - pingresult: {}", pingresult) // Log pingresult
// Version 2 - Der Shell-Befehl verpackt in einem Bash-Script, dann klappt's
pingresult = executeCommandLine(Duration.ofSeconds(10),"/bin/bash","/etc/openhab/scripts/ping_test.sh") // String in einer Variablen zwischenspeichern
logInfo("execute-Version 2","String - pingresult: {}", pingresult) // Log pingresult
/* Das Bash-Script - als Beispiel - Einfacher geht's aber mit dem Network-Binding ;) (Auch in OH3)
#!/bin/bash
INPUT=$(/bin/ping -c5 -W1 192.168.178.zz >/dev/null && echo 'online' || echo 'offline')
echo $INPUT
*/
end
Code: Alles auswählen
2021-06-27 12:39:05.262 [INFO ] [.core.model.script.execute-Version 1] - String - pingresult: ping: offline: Der Name oder der Dienst ist nicht bekannt
2021-06-27 12:39:09.448 [INFO ] [.core.model.script.execute-Version 2] - String - pingresult: online
Code: Alles auswählen
Thing network:pingdevice:printerWF2760 [ hostname="192.168.178.ab", retry=1, timeout=5000, refreshInterval=60000 ]
Thing network:pingdevice:pi3b_ohtest [ hostname="192.168.178.cd", retry=1, timeout=5000, refreshInterval=60000 ]
Thing network:pingdevice:iPhoneSE1_Peter [ hostname="192.168.178.ef", retry=1, timeout=5000, refreshInterval=60000 ]
Thing network:pingdevice:iPhoneClaudia [ hostname="192.168.178.gh", retry=1, timeout=5000, refreshInterval=60000 ]
Code: Alles auswählen
Group:Number:SUM gNet "Netzwerk [%d]" <network> [NetworkAppliance] // Number of "Online"-Devices
Switch Printer_WF2760 "Drucker WF-2760 [MAP(tech.map):%s]" <workforce> (gNet) [Point] {channel="network:pingdevice:printerWF2760:online"}
Switch Pi3b_online "RPi3b OH-Test [MAP(tech.map):%s]" <network> (gNet) [Point] {channel="network:pingdevice:pi3b_ohtest:online"}
Switch iPhoneSE1_Peter "iPhoneSE1 Peter 43[MAP(tech.map):%s]" <iphone> (gNet) [Point] {channel="network:pingdevice:iPhoneSE1_Peter:online"}
Switch iPhone_Claudia "iPhone Claudia[MAP(tech.map):%s]" <iphone> (gNet) [Point] {channel="network:pingdevice:iPhoneClaudia:online"}
Code: Alles auswählen
rule "test execute Command"
when
Item Dummy_3 changed to ON
then
// Version 1 - funktioniert nicht - ich kann den Grund nicht finden
var pingresult = executeCommandLine(Duration.ofSeconds(5), "/bin/bash", "-c", "/bin/ping -c5 -W1 192.168.178.99 > /dev/null && /bin/echo 'online' || /bin/echo 'offline'")
logInfo("execute-Version 1","String - pingresult: {}", pingresult) // Log pingresult
// Version 2 - Der Shell-Befehl verpackt in einem Bash-Script, dann klappt's
pingresult = executeCommandLine(Duration.ofSeconds(10),"/bin/bash","/etc/openhab/scripts/ping_test.sh") // String in einer Variablen zwischenspeichern
logInfo("execute-Version 2","String - pingresult: {}", pingresult) // Log pingresult
// Version 3 - Shell-Kommando - einfach
pingresult = executeCommandLine(Duration.ofSeconds(2),"/bin/ls", "-alF") // String in einer Variablen zwischenspeichern
logInfo("execute-Version 3","String - pingresult: {}", pingresult) // Log pingresult
/* Das Bash-Script - als Beispiel - Einfacher geht's mit dem Network-Binding ;)
#!/bin/bash
INPUT=$(/bin/ping -c5 -W1 192.168.178.99 >/dev/null && /bin/echo 'online' || /bin/echo 'offline')
echo $INPUT
*/
// https://community.openhab.org/t/how-to-use-executecommandline-correctly/123987 - Solution from @NorbertHD for Version 1
end
Ich weiss zwar nicht genau, was du damit meinst (evtl. Status: Privates Netzwerk ???), aber bei mir klappt das ganz gut: