OH3 Anwesenheitserkennung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
peter-pan
Beiträge: 2772
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Anwesenheitserkennung

Beitrag von peter-pan »

....
udo1toni hat geschrieben: 25. Jun 2021 23:49 geübte Programmierer
:lol: ...davon bin ich weit entfernt. Ich bin froh, wenn ich "ls -alF" in der Konsole eintippen kann. Ich benutze Putty !!?? Hat das eine bestimmte Konsole ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: OH3 Anwesenheitserkennung

Beitrag von udo1toni »

PuTTY hat damit nichts zu tun, PuTTY stellt lediglich ein Terminal zur Verfügung.
Welche Konsole Du gewöhnlich benutzt, ist in /etc/passwd hinterlegt, es ist der letzte Parameter in der Liste (die Liste führt alle User im System auf). Dort kann man auch sehen, dass die Standardkonsole des Users openhab /bin/false lautet, womit also verhindert wird, dass der User openhab sich überhaupt an einer Konsole anmelden kann (aber man kann das natürlich umgehen).


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

Benutzeravatar
peter-pan
Beiträge: 2772
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Anwesenheitserkennung

Beitrag von peter-pan »

udo1toni hat geschrieben: 27. Jun 2021 09:46 Welche Konsole Du gewöhnlich benutzt, ist in /etc/passwd hinterlegt
Erst mal Danke für den guten Tipp.👍👍👍
Ich hoffe, ich kann mir das eine Weile merken (in meinem Alter 🙃 🤔 ;) )

Das hat mich dann auf die Idee gebracht den Befehl executeCommandLine mal mit einem Shell/Bash-Script zu verwenden, und siehe da, es hat geklappt.

Die Rule:

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
Das Shell-Script hab ich der Einfachheit halber als Kommentar in die Regel gepackt.

Das Ergebnis im Log sieht dann so aus:

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
Aber einfacher geht's wirklich mit dem Network-Binding (Auch in OH3).
.things:

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 ]
.items:

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"}
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
peter-pan
Beiträge: 2772
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Anwesenheitserkennung

Beitrag von peter-pan »

Hier noch ein kleiner Nachtrag. Ich habe das Ganze mal im internationalen Forum gepostet und ein lieber Mitstreiter hat auch gleich die Lösung gepostet. Hier also noch mal die überarbeitete Test-Rule:

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
Version 1 sollte nun deinen Wünschen entsprechen.

Ganz unten in der Rule findest du den Link des englischen Threads und die Lösung von Norbert.

Viel Spass!!!
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

DarkOfSoul
Beiträge: 28
Registriert: 11. Jul 2019 17:40
Answers: 0

Re: OH3 Anwesenheitserkennung

Beitrag von DarkOfSoul »

Super vielen Dank das werde ich dann mal mit dem IPhone meiner Frau testen.
Das hat zumindest unter OH 2.5 besser funktioniert als des Network Binding in 3.0.

Benutzeravatar
peter-pan
Beiträge: 2772
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Anwesenheitserkennung

Beitrag von peter-pan »

...aber wie gesagt, das Iphone ist da nicht besonders geeignet, da es sich nach eine Weile von selbst in einen "deep-sleep" legt, auch wenn es im WiFi-Bereich ist.
Falls du dann meinst du hast sturmfreie Bude und du kannst deine Kumpels zusammen trommeln-> Pustekuchen .... :lol: :lol: ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

T_b_a_
Beiträge: 9
Registriert: 9. Aug 2021 21:12
Answers: 0

Re: OH3 Anwesenheitserkennung

Beitrag von T_b_a_ »

Mit meinem Android handy klappt die Erkennung super. Mit meinem win10 Desktop (macht natürlich für eine Anwesenheitserkennung kein Sinn aber für andere Sachen) habe ich das Problem das er dauerthaft offline angezeigt wird. Habe sowohl via IP als auch hostname Mac getestet.
Jemand eine Idee (Netzwerk Modus am PC ist privat)

Benutzeravatar
peter-pan
Beiträge: 2772
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Anwesenheitserkennung

Beitrag von peter-pan »

T_b_a_ hat geschrieben: 24. Aug 2021 14:03 Jemand eine Idee (Netzwerk Modus am PC ist privat)
Ich weiss zwar nicht genau, was du damit meinst (evtl. Status: Privates Netzwerk ???), aber bei mir klappt das ganz gut:
net.jpg

Das Network-Binding ist installiert und konfiguriert ?
net-conf.jpg

Thing (Channel) für PC angelegt und wird als Online angezeigt ?
net-thing.jpg
Und ein Switch-Item ist auch angelegt und mit dem Channel verlinkt ?

Dann sollte es eigentlich passen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

T_b_a_
Beiträge: 9
Registriert: 9. Aug 2021 21:12
Answers: 0

Re: OH3 Anwesenheitserkennung

Beitrag von T_b_a_ »

Danke Peter, genau das meinte ich "Status Privates Netzwerk" bei öffentlich wird so einiges automatisch von MS geblockt. Habe genau so eingestellt, wenn ich in genau diesem Things die IP auf die einen anderen Gerätes wie zb. Handy, HUE etc. ändere ist auch online. Bin aber weiter gekommen, es liegt an der Windows Firewall, auf einer VM win7 konnte ich ganz abstellen (ob man das will ist ein anderen Thema) und es funktioniert. Mit Windows 10 kämpfe ich gerade noch das es bei abgeschalteter Firewall auf Ping reagiert. Wenn das auch klappt, muss man mal schauen das man eine sprechende Regel anlegt.

T_b_a_
Beiträge: 9
Registriert: 9. Aug 2021 21:12
Answers: 0

Re: OH3 Anwesenheitserkennung

Beitrag von T_b_a_ »

Update: nur ICMPv4 Echoanforderung in der Firewall erlaubt macht zwar Pingbar via CMD vom anderen Gerät (die Funktion kann man damit super testen) jedoch reicht das nicht für OpenhHAB. Nur das Vollständige deaktivieren der Firewall hilft, also ist die Frage welche Regel man in der Firewall zusätzlich hinzufügen muss um es gezielt zu erlauben.

ICMP: zum testen erst mal lieber mehr freigeben als zu wenig
- für v4 und v6
- für Domain, privat und öffentliches Netzwerk
- beliebige Local IP

sonst fällt mir nichts mehr ein, echt schon komisch das alle meine Windows Geräte sich so verhalten

Antworten