Hauptmenü

Blink Kamera und DOIF

Begonnen von Himi, 10 Oktober 2021, 19:46:30

Vorheriges Thema - Nächstes Thema

Himi

Hallo Zusammen,

ich bräuchte mal Hilfe.

Ich betreibe zwei Kameras von Blink (Haustürkamera und Terassenkamera)

Ich möchte auf die Readings alertID und alertCameraName reagieren. D.h. wenn eine Bewegung an einer der Kameras erkannt wird, möchte ich das dazu gehörige Licht einschalten.

Beide Readings reagieren ja auf das Ereignis wenn eine Bewegung erkannt wird. Je nach dem welche Kamera gerade eine Bewegung erkennt, ändert sich der alertCameraName im Device entweder in Haustürkamera oder Terassenkamera.

Im nachfolgendem Code muß ein Fehler sein. Wer kann mir auf die Sprünge helfen.

Vielen Dank im Voraus

define blinkAuswertung_Haustuere DOIF ([blink:alertID.*] and [blink:alertCameraName] == "Haustuerkamera") ("set Haustuerlicht on-for-timer 60")
setuuid blinkAuswertung_Haustuere 61631d63-f33f-3023-8e43-00847a31554c37b1
attr blinkAuswertung room BlinkCameras

define blinkAuswertung_Terasse DOIF ([blink:alertID.*] and [blink:alertCameraName] == "Terassenkamera") ("set Terasserlicht on-fot-timer 60")
setuuid blinkAuswertung_Terasse 61631d63-f33f-3023-8e43-00847a31554c37b1
attr blinkAuswertung room BlinkCameras


Beta-User

Sehe mehrere Probleme:
"Harte" Themen:
a) Text mit "==" zu vergleichen ist unzulässig, das muss "eq" sein;
b) (unsicher, da DOIF): Mehrere Events können niemals gleichzeitig auf wahr geprüft werden (es müßte irgendwo ein Fragezeichen hin)

"Weiche" Themen:
c) Warum mehrere Event-Handler, wenn immer der gleiche Auslöser relevant ist? Kann man zusammenfassen, unabhängig von der konkret gewählten Lösung.
d) Du scheinst cfg-Editierer zu sein. Das ist fehleranfällig, bitte in "das grüne Plus" bzw. "RAW-Definition" einlesen (https://wiki.fhem.de/wiki/Import_von_Code_Snippets).

Hier mal ein Vorschlag, wie man das mit notify lösen können sollte (ungetestet):
defmod n_blinkAuswertung notify blink:alertID.* { \
if (ReadingsVal('blink', 'alertCameraName', '') eq 'Haustuerkamera') {return fhem ("set Haustuerlicht on-for-timer 60")};;\
if (ReadingsVal('blink', 'alertCameraName', '') eq 'Terassenkamera') {return fhem ("set Terasserlicht on-for-timer 60");;}\
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Himi

Hallo Beta-User,

dein Vorschlag funktioniert perfekt...

Da war ich wohl auf einem Irrweg mit dem DOIF.

Ich verstehe jetzt auch den Code.

Nochmals vielen Dank für den Tipp.

Viele Grüße aus Hohenlohe

Beta-User

Danke für die Rückmeldung. Sowas geht sicher auch mit DOIF, ich weiß nur eben nicht wie; aber schön, dass du den Code so verstehst.

Markierst du den Thread bitte noch als [gelöst] (siehe https://forum.fhem.de/index.php/topic,71806.0.html).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Damian

Mit DOIF eher so:

define blinkAuswertung_Haustuere DOIF ([blink:"alertID"] and [?blink:alertCameraName]  eq "Haustuerkamera") ("set Haustuerlicht on-for-timer 60")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Himi

den Vorschlag mit DOIF habe ich getestet, da muss aber noch ein Fehler sein.

DOIF reagiert nicht auf Readingsänderungen im Blink-Device

Damian

Zitat von: Himi am 13 Oktober 2021, 10:44:23
den Vorschlag mit DOIF habe ich getestet, da muss aber noch ein Fehler sein.

DOIF reagiert nicht auf Readingsänderungen im Blink-Device

Beim Testen darauf achten, dass das Modul ohne do always nur schaltet, wenn sich der Zustand ändert, dh. auf cmd_1 kann nur cmd_2 folgen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF