Anwesenheitserkennung und Zeitraum Funksteckdose schalten

Begonnen von 0bones, 20 April 2018, 21:16:12

Vorheriges Thema - Nächstes Thema

0bones

Hallo zusammen,
ich möchte gerne dass eine Funksteckdose aktiviert wird, wenn 1_Handy oder 2_Handy im Status present sind (Präsenzerkennung durch die Fritzbox funktioniert wie im Wiki beschrieben https://wiki.fhem.de/wiki/FRITZBOX). Außerdem soll die Funksteckdose nur in der Zeit zwischen 05:30 und 22:30 durch die Präsenzerkennung aktiviert werden können, nach 22:30 soll keine Aktivierung erfolgen, auch wenn die Geräte da sind.
Ich habe folgenden Befehl versucht, dieser funktioniert aber nicht. Auch wenn ich nur eine Bedingung festlege wird die Dose nicht geschaltet. Wo liegt der Fehler? Wie kann ich den Status z. B. alle 30 Sekunden überprüfen lassen?
define test DOIF ([1_Handy] eq "present" or [2_Handy] eq "present" and [05:30-22:30]) (set Wohnzimmer on) DOELSE (set Wonzimmer off)

Otto123

#1
Hi,
define test DOIF (([1_Handy] eq "present" or [2_Handy] eq "present") and [05:30-22:30]) (set Wohnzimmer on) DOELSE (set Wonzimmer off)

or musst Du separat klammern! http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

Was meinst Du damit: Auch wenn ich nur eine Bedingung festlege ...  ?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

0bones

#2
Danke für die Hilfe. Mit nur einer Bedingung meinte ich, dass ich z. B. den Zeitraum und 2_Handy entfernt hatte um nur 1_Handy als alleinige Bedingung zu haben.
Mittlerweile funktioniert es! Bezüglich der Wiederholungen (soll immer auf Änderungen reagieren) habe ich das Attribut do allways eingefügt.
attr test do always

0bones

#3
Ich habe den Code noch ergänzt, sodass ich Pushover eingebunden habe. Jetzt bekomme ich jedoch ca. alle 10 Sek. eine Benachrichtigung. Ich möchte aber nur bei einer Statusänderung informiert werden, wie lässt sich das bewerkstelligen?
define test DOIF (([1_Handy] eq "present" or [2_Handy] eq "present") and [05:30-22:30]) (set Wohnzimmer on, set pushmsg msg an) DOELSE (set Wohnzimmer off, set pushmsg msg aus)
attr test do always

Damian

Zitat von: 0bones am 21 April 2018, 09:26:26
Ich habe den Code noch ergänzt, sodass ich Pushover eingebunden habe. Jetzt bekomme ich jedoch ca. alle 10 Sek. eine Benachrichtigung. Ich möchte aber nur bei einer Statusänderung informiert werden, wie lässt sich das bewerkstelligen?
define test DOIF (([1_Handy] eq "present" or [2_Handy] eq "present") and [05:30-22:30]) (set Wohnzimmer on, set pushmsg msg an) DOELSE (set Wohnzimmer off, set pushmsg msg aus)
attr test do always


Du willst doch nicht set Wohnzimmer on schalten, wenn es bereits schon auf on war, nur weil z. B. das 2. Handy auf present geht.

Hier ist do always kontraproduktiv.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

0bones

Zitat von: Damian am 21 April 2018, 10:39:31
Du willst doch nicht set Wohnzimmer on schalten, wenn es bereits schon auf on war, nur weil z. B. das 2. Handy auf present geht.

Hier ist do always kontraproduktiv.
Da hast Du recht. Welchen Parameter sollte ich dann nehmen, wenn die Steckdose geschaltet werden soll, sobald entweder ein Handy anwesend ist (on) oder beide abwesend sind (off) jedoch nur im definierten Zeitfenster?

Otto123

Moin,

ich denke der Code funktioniert so komplett ohne do always. Probiert?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

0bones

Hab ich probiert. Die Benachrichtigung geht so jetzt auch. Prinzipiell funktioniert es. Aber nicht zu 100%, d.h. beide Handys sind present, ich habe die Dose (über FHEM) 1x manuell ausgeschaltet. Dann geht sie nicht mehr automatisch an, obwohl die Bedingungen dafür erfüllt sind. Stelle ich sie dann manuell an, erhalte ich auch keine Benachrichtigung. Ich werde es beobachten.

Otto123

Du musst jetzt aber schon genau überlegen, was Du willst!
Ich bin davon ausgegangen, Du willst etwas auslösen, wenn etwas passiert - also einer kommt oder geht.

Das Du Zwangsbeleuchtung machen willst wenn einer da ist, egal ob derjenige der schon da war das Licht wieder ausgemacht hat, hast Du nicht gesagt  ;D

Dann kannst Du natürlich Dauerfeuer auf die Lampe geben (kannst Du noch mit event-on-change-reading eindämmen) und musst do always nehmen.
Schau Dir am Besten im Eventmonitor an was passiert, das hilft verstehen.

https://wiki.fhem.de/wiki/Event_monitor

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

0bones

Zitat von: Otto123 am 21 April 2018, 12:08:12
Du musst jetzt aber schon genau überlegen, was Du willst!
Ich bin davon ausgegangen, Du willst etwas auslösen, wenn etwas passiert - also einer kommt oder geht.

Das Du Zwangsbeleuchtung machen willst wenn einer da ist, egal ob derjenige der schon da war das Licht wieder ausgemacht hat, hast Du nicht gesagt  ;D

Dann kannst Du natürlich Dauerfeuer auf die Lampe geben (kannst Du noch mit event-on-change-reading eindämmen) und musst do always nehmen.
Schau Dir am Besten im Eventmonitor an was passiert, das hilft verstehen.

https://wiki.fhem.de/wiki/Event_monitor

Gruß Otto
Alles klar. Ich wusste nur nicht, dass die reine Anwesenheit die Zwangsbeleutung ausschließt bzw. verkompliziert. Ich dachte deshalb, einen Fehler in der Programmierung zu haben. Danke an alle Beteiligten!