FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Flachzange am 11 Oktober 2022, 08:56:45

Titel: DOIF triggert fälschlicherweise?
Beitrag von: Flachzange am 11 Oktober 2022, 08:56:45
Hallo zusammen,

ich benötige mal Schwarmintelligenz, da ich mein Problem nicht sehe. Ich habe folgendes (triviale) DOIF:


([Bewegungsmelder_EG_Treppe:motion] eq 'on' and [?Weatherman:helligkeit] < 70 and [?Bewegungsmelder_OG_Flur:motion] eq 'off') (set Bewegungsmelder_EG_Treppe_TF fullyOn)
DOELSEIF ([Bewegungsmelder_EG_Treppe:motion] eq 'off')(set Bewegungsmelder_EG_Treppe_TF off)


Keine Attribute gesetzt.

Inhaltlich macht es folgendes: Wenn es dunkel genug ist und jemand die Treppe hochläuft soll das Licht eingeschaltet werden. Licht einschalten ist hier eine Besonderheit, weil es das über ein EnOcean Bewegungsmelder Telegramm geschieht  (set Bewegungsmelder_EG_Treppe_TF fullyOn). Eigentlich funktioniert das so seit einem Jahr, in den letzten Tagen werde ich jedoch nachts wach, weil sich das Licht einschaltet. Ok, dann wird wohl Bewegungsmelder_EG_Treppe auslösen. Dem ist aber nicht so. Beispiel von letzter Nacht 4:20:39 Uhr.


SELECT * FROM `history` WHERE DEVICE = 'DOIF_Licht_Treppe_einschalten' and TIMESTAMP > '2022-10-11 04:20:00' AND TIMESTAMP < '2022-10-11 04:30:00';

TIMESTAMP DEVICE TYPE EVENT READING VALUE UNIT
2022-10-11 04:20:39 DOIF_Licht_Treppe_einschalten DOIF cmd: 1 cmd 1
2022-10-11 04:20:39 DOIF_Licht_Treppe_einschalten DOIF cmd_event: Bewegungsmelder_EG_Treppe cmd_event Bewegungsmelder_EG_Treppe
2022-10-11 04:20:39 DOIF_Licht_Treppe_einschalten DOIF cmd_nr: 1 cmd_nr 1
2022-10-11 04:20:39 DOIF_Licht_Treppe_einschalten DOIF state: cmd_1 state cmd_1
   

Auch im Log:
2022.10.11 04:20:39 3: EnOcean set Bewegungsmelder_EG_Treppe_TF fullyOn


Bewegungsmelder_EG_Treppe:
SELECT * FROM `history` WHERE DEVICE = 'Bewegungsmelder_EG_Treppe' and TIMESTAMP > '2022-10-11 04:20:00' AND TIMESTAMP < '2022-10-11 04:30:00';

TIMESTAMP DEVICE TYPE EVENT READING VALUE UNIT
2022-10-11 04:20:39 Bewegungsmelder_EG_Treppe ENOCEAN brightness: 0 brightness 0
2022-10-11 04:20:39 Bewegungsmelder_EG_Treppe ENOCEAN motion: off motion off
2022-10-11 04:20:39 Bewegungsmelder_EG_Treppe ENOCEAN state: M: off E: 0 U: 2.8 state M: off E: 0 U: 2.8
2022-10-11 04:20:39 Bewegungsmelder_EG_Treppe ENOCEAN voltage: 2.8 voltage 2.8


Motion ist also sicher off, aber warum triggert dann das DOIF auf das Event?

Wie gesagt, ich sehe es gerade nicht, aber vielleicht hat ja jemand eine Eingebung :)

Gruß
Chris

Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Per am 11 Oktober 2022, 12:19:06
In "motion" steckt "on"
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Damian am 11 Oktober 2022, 12:30:03
Zitat von: Per am 11 Oktober 2022, 12:19:06
In "motion" steckt "on"
Das kann hier nicht das Problem sein, denn es geht hier um die Syntax [<device>:<reading>] und hier muss das Reading genau übereinstimmen, damit es einen Trigger gibt.

Ich kann hier keinen Definitionsfehler erkennen. Man müsste ausschließen, dass motion nicht kurzfristig auf "on" gegangen ist.
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Flachzange am 11 Oktober 2022, 22:53:28
Zitat von: Damian am 11 Oktober 2022, 12:30:03
Ich kann hier keinen Definitionsfehler erkennen. Man müsste ausschließen, dass motion nicht kurzfristig auf "on" gegangen ist.
Danke für Deine Einschätzung. Dann ist meine Frage ja erstmal berechtigt :)

Eigentlich denke ich schon ausgeschlossen zu haben, dass motion nicht kurzfristig auf "on" war, denn dann müsste ich das auch in der Datenbank sehen (siehe Query oben). Auch müsste dann das DOIF einmal den Zweig wechseln. Beides sehe ich nicht.
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Damian am 12 Oktober 2022, 08:21:10
Zitat von: Flachzange am 11 Oktober 2022, 22:53:28
Danke für Deine Einschätzung. Dann ist meine Frage ja erstmal berechtigt :)

Eigentlich denke ich schon ausgeschlossen zu haben, dass motion nicht kurzfristig auf "on" war, denn dann müsste ich das auch in der Datenbank sehen (siehe Query oben). Auch müsste dann das DOIF einmal den Zweig wechseln. Beides sehe ich nicht.

Du könntest ein zweites DOIF definieren:

DOIF {["^Bewegungsmelder_EG_Treppe:motion on"]}

Das sollte nur auf "on" reagieren, wenn dieser auslöst, dann weißt du Bescheid.
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Flachzange am 12 Oktober 2022, 10:49:51
Ja, ich wollte schon das DOIF komplett auf Event-Trigger umstellen, aber das zusätzliche DOIF ist tatsächlich noch besser zum Testen. Ich gehe aber davon aus, dass

{["^Bewegungsmelder_EG_Treppe:motion:.on"]}

die richtige Notation wäre, oder?
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Damian am 12 Oktober 2022, 15:46:09
Zitat von: Flachzange am 12 Oktober 2022, 10:49:51
Ja, ich wollte schon das DOIF komplett auf Event-Trigger umstellen, aber das zusätzliche DOIF ist tatsächlich noch besser zum Testen. Ich gehe aber davon aus, dass

{["^Bewegungsmelder_EG_Treppe:motion:.on"]}

die richtige Notation wäre, oder?

ja, Beim DOIF kann man (im Gegensatz zu notify) auch das Leerzeichen statt Punkt hinter dem Doppelpunkt angeben.
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Flachzange am 14 Oktober 2022, 08:53:22
Was muss ich konfigurieren, damit bei einem DOIF im Perl-Modus auch Events erzeugt und damit in die Datenbank geschrieben werden? Wurde heute Nacht wieder vom Licht geweckt, aber ich finde zum DOIF-Device nichts in der Datenbank. Das betrifft auch meine anderen DOIF-Perl-Devices die jetzt nichts mit der konkreten Problemstellung hier zu tun haben.
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Damian am 14 Oktober 2022, 08:57:21
Zitat von: Flachzange am 14 Oktober 2022, 08:53:22
Was muss ich konfigurieren, damit bei einem DOIF im Perl-Modus auch Events erzeugt und damit in die Datenbank geschrieben werden? Wurde heute Nacht wieder vom Licht geweckt, aber ich finde zum DOIF-Device nichts in der Datenbank. Das betrifft auch meine anderen DOIF-Perl-Devices die jetzt nichts mit der konkreten Problemstellung hier zu tun haben.

indem du z. B. den Status setzt:


{["^Bewegungsmelder_EG_Treppe:motion:.on"];set_State("motion")}
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Flachzange am 16 Oktober 2022, 09:55:39
Nachdem jetzt alle Debug-Register gezogen wurden, weiß ich dass das DOIF (wie zu erwarten) korrekt funktioniert. Es wird tatsächlich ein Event erzeugt, genau genommen scheint der Bewegungsmelder neuerdings zwei Events zum "gleichen" Zeitpunkt zu erzeugen:

Zitat2022.10.16 06:21:55 4: EnOcean Bewegungsmelder_EG_Treppe received from IODev: TCM_Remote_EG PacketType: 1 RORG: A5 DATA: 8C00000F SenderID: 0592033F STATUS: 00
2022.10.16 06:21:55 4: EnOcean Bewegungsmelder_EG_Treppe received from IODev: TCM_Remote_EG PacketType: 1 RORG: A5 DATA: 8A00000D SenderID: 0592033F STATUS: 00

Dblog scheint das zweite Event zu ignorieren, weshalb ich nur das erste "motion off" in der Datenbank sehe.

Da ich gerade nicht davon ausgehe, das hardwareseitige Problem zu lösen: Was ist die beste der schmutzigen Lösungen, um das zweite Event zu ignorieren?
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Damian am 16 Oktober 2022, 10:21:41
Du musst herausfinden, wie genau on-off Kombinationen vorkommen. Vermutlich wirst du on und off unmittelbar nacheinander ignorieren müssen. Dazu kannst du ein watchdog oder ein vorgeschaltetes DOIF definieren, auf das du dann triggern kannst.
Titel: Antw:DOIF triggert fälschlicherweise?
Beitrag von: Flachzange am 21 Oktober 2022, 21:38:57
Mit dem Watchdog schön die Büchse der Pandora geöffnet. Die Eltako Bewegungsmelder senden gefühlt komplett random ab und zu mal die off-on-Kombination.

Thema kann dann geschlossen werden. Danke fürs Supporten Damian.