FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: crossbike0815 am 30 November 2016, 13:26:01

Titel: Anwesenheitsüberwachung
Beitrag von: crossbike0815 am 30 November 2016, 13:26:01
Hallo,
mein erstes Projekt war eine Anwesenheitsüberwachung und den Code habe ich aus einer Raspberry-Zeitschrift. Das funktioniert auch hervorragend und ich habe mir für jedes Familienmitglied jeweils eine Pushnachricht schicken lassen können, wenn er das Haus verläßt/nach Hause kommt.
Jetzt wollte ich die einzelnen Personen zusammenfassen und das Beispielskript hat dafür eine Familie definiert, die auch korrekt funktioniert:

define Familie RESIDENTS
attr Familie alias Residents
attr Familie devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home .*:user_unknown:home
attr Familie group Home State
attr Familie icon control_building_filled
attr Familie room Residents
attr Familie webCmd state

Jetzt möchte ich mir bei jeder Statusänderung von "Familie" eine Push schicken lassen. Mein erster Versuch über NOTIFY sah so aus:

define HomeEvent notify Familie { if ([Familie:state] eq "home") {fhem ("set pushmsg msg 'FHEM' 'Jemand zu Hause'")} elsif ([Familie:state] eq "gone") {fhem ("set pushmsg msg 'FHEM' 'Alle unterwegs'")}}

Das hat leider dazu geführt, dass nach einer Statusänderung massenhaft Pushes gesendet wurden. Also hab ich es alternativ über DOIF gemacht:

define KeinerDaEvent DOIF ( if ([Familie:state] eq "home") {fhem ("set pushmsg msg 'FHEM' 'Jemand zu Hause'")} elsif ([Familie:state] eq "gone") {fhem ("set pushmsg msg 'FHEM' 'Alle unterwegs'")})

Das funktioniert fast, denn leider schickt er auch eine Push, wenn der State auf home gesetzt wird aber vorher auch schon auf home stand. Also nicht allein beim ersten, der nach Hause kam, sondern bei jedem.

Wie kann ich das so setzen, dass es tatsächlich nur bei einer Statusänderung greift?
Titel: Antw:Anwesenheitsüberwachung
Beitrag von: bomi am 30 November 2016, 14:56:13
Hallo.

Ich weiß zwar nicht ob es daran liegt, aber ich würde mal mit der aufgeräumten DOIF-Version probieren.

define KeinerDaEvent DOIF ([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause') DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs')

Gruß
Titel: Antw:Anwesenheitsüberwachung
Beitrag von: crossbike0815 am 30 November 2016, 16:07:38
Hallo Bomi,

danke, das hat schon mal funktioniert. Jetzt wollte ich aber weitermachen und bei den beiden Bedingungen nicht nur eine Push schicken, sondern auch ein GetHTTPFile aufrufen (was mit dem DOIF wie in meinem ersten Post auch lief, ich aber der Übersicht halber rausgenommen hatte  :o).

So sieht mein DEF aus: ([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause') DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs'";GetHttpFile("192.168.178.35:80", "/heizung_aus.php"))

FHEM meckert aber:     
set pushmsg msg 'FHEM' 'Alle unterwegs'";GetHttpFile("192.168.178.35:80", "/heizung_aus.php"): Syntax: pushmsg msg ['<title>'] '<msg>' ['<device>' <priority> '<sound>' [<retry> <expire> ['<url_title>' '<action>']]] Unknown command GetHttpFile("192.168.178.35:80",, try help.

Bin verwirrt von der Klammersetzung...





Titel: Antw:Anwesenheitsüberwachung
Beitrag von: Otto123 am 30 November 2016, 16:16:24
Zitat von: crossbike0815 am 30 November 2016, 13:26:01
Wie kann ich das so setzen, dass es tatsächlich nur bei einer Statusänderung greift?
Hi,

event-on-change-reading wäre ein Stichwort  ;)

Gruß Otto
Titel: Antw:Anwesenheitsüberwachung
Beitrag von: bomi am 30 November 2016, 17:01:14
Im DOIF Modul werden die einzelnen Befehle mit Komma und nicht mit Semikolon getrennt.
Wenn du im Befehl ein Komma hast musst diesen Befehl nochmal in Klammern packen.
Probiers mal so:
(set pushmsg msg 'FHEM' 'Alle unterwegs', (GetHttpFile("192.168.178.35:80", "/heizung_aus.php")))
Titel: Antw:Anwesenheitsüberwachung
Beitrag von: Otto123 am 30 November 2016, 19:10:31
Zitat von: bomi am 30 November 2016, 17:01:14
(GetHttpFile("192.168.178.35:80", "/heizung_aus.php"))
Was soll das werden? --> http://fhem.de/commandref_DE.html#command
Falls es den Befehl GetHttpFile aus Systemebene gibt, könnte es so gehen:
"GetHttpFile('192.168.178.35:80', '/heizung_aus.php')"

Gut ist das nicht, siehe hier -> https://forum.fhem.de/index.php?topic=39124.0

Im übrigen sind die Code tags über den Smilies mit der # Taste zu erreichen

Gruß Otto
Titel: Antw:Anwesenheitsüberwachung
Beitrag von: crossbike0815 am 01 Dezember 2016, 12:12:46
Danke für die vorherigen Tips. habe es jetzt wie von Otto geschrieben ausprobiert und sehe zumindestens bei den Readings keinen Fehler mehr angezeigt bekommen. Dafür allerdings dann im Logfile, wobei das wirklich sehr nichtssagend ist für mich:

sh: 1: Syntax error: word unexpected (expecting ")")

Das ist jetzt mein aktueller Code:

([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause') DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs',"GetHttpFile('192.168.178.35:80', '/heizung_aus.php')")
Titel: Antw:Anwesenheitsüberwachung
Beitrag von: crossbike0815 am 01 Dezember 2016, 15:09:26
So, Lösung gefunden. Statt Anführungszeichen oder runden Klammern müssen es geschweifte Klammern sein:

([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause',{GetHttpFile('192.168.178.35:80', '/heizung_an.php')}) DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs',{GetHttpFile('192.168.178.35:80', '/heizung_aus.php')})