FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bismosa am 18 August 2017, 17:04:29

Titel: DOIF Nur bei Status "on" eines Gerätes ausführen
Beitrag von: bismosa am 18 August 2017, 17:04:29
Hallo,

vermutlich mache ich nur einen kleinen Anfängerfehler....
Ich überwache über RPI_GPIO meine Heizung.
defmod GPIO_Heizung_Brenner RPI_GPIO 5
attr GPIO_Heizung_Brenner active_low yes
attr GPIO_Heizung_Brenner direction input
attr GPIO_Heizung_Brenner icon icoHEIZUNG
attr GPIO_Heizung_Brenner interrupt both
attr GPIO_Heizung_Brenner pud_resistor up
attr GPIO_Heizung_Brenner room Heizung
attr GPIO_Heizung_Brenner toggletostate yes
attr GPIO_Heizung_Brenner webCmd :


Und habe ein DOIF (DEF)
([HeizungsStoerung:"on"])
({
DebianMail("ich\@jemand.de","Heizung ausgefallen!","ACHTUNG! Die Heizung ist ausgefallen!");
fhem("set pushmsg msg device=ich title=Ausfall priority=2 retry=30 expire=3600 ACHTUNG! Die Heizung ist ausgefallen!");
})


Jetzt löst der Alarm immer wieder zwischendurch (meist wenn die Heizung abschaltet) aus.

Ich habe das jetzt mal im EventMonitor beobachtet:
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner Pinlevel: low
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner off
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner Longpress: off
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner LastStartTime: 1503065604.84483
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner LetzterVerbauch: 3.90187474091848e-05
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner LetzteLaufzeit: 0.00118873516718547
2017-08-18 16:13:24 RPI_GPIO GPIO_Heizung_Brenner Gesamtmenge: 3.90187474091848e-05
2017-08-18 16:13:32 DOIF di_HeizungStoerung cmd_nr: 2
2017-08-18 16:13:32 DOIF di_HeizungStoerung cmd: 2
2017-08-18 16:13:32 DOIF di_HeizungStoerung cmd_event: HeizungsStoerung
2017-08-18 16:13:32 DOIF di_HeizungStoerung cmd_2
2017-08-18 16:13:32 RPI_GPIO HeizungsStoerung Dblclick: off
2017-08-18 16:13:34 Pushover pushmsg msg device=ich title=Ausfall priority=2 retry=30 expire=3600 ACHTUNG! Die Heizung ist ausgefallen!
2017-08-18 16:13:34 DOIF di_HeizungStoerung cmd_nr: 1
2017-08-18 16:13:34 DOIF di_HeizungStoerung cmd: 1
2017-08-18 16:13:34 DOIF di_HeizungStoerung cmd_event: HeizungsStoerung
2017-08-18 16:13:34 DOIF di_HeizungStoerung cmd_1
2017-08-18 16:13:34 RPI_GPIO HeizungsStoerung Pinlevel: low
2017-08-18 16:13:34 RPI_GPIO HeizungsStoerung off
2017-08-18 16:13:34 RPI_GPIO HeizungsStoerung Longpress: off
...


Ich bin immer noch auf der Suche, ob nicht durch eine kleine Störung der GPIO der Störung kurzzeitig auf "on" wechselt. Im Event Monitor erscheint dieses Event jedoch nicht. Nur "RPI_GPIO HeizungsStoerung off"

Ich habe das jetzt auch mal protokolliert:
./log/HeizungsStoerung_Alle-%Y.log HeizungsStoerung
Das einzige was erscheint ist:
2017-08-18_16:13:32 HeizungsStoerung Dblclick: off
2017-08-18_16:13:32 HeizungsStoerung Pinlevel: low
2017-08-18_16:13:32 HeizungsStoerung off
2017-08-18_16:13:32 HeizungsStoerung Longpress: off


1.) Kann es sein, das mein DOIF auf "HeizungsStoerung Longpress: off" reagiert? Wie müsste ich das richtig im DOIF angeben, das er auch wirklich nur bei "on" reagiert?
2.) Kann der Impuls des "on" so kurz sein? Das würde doch protokolliert werden? Müsste sich doch mit dem DOIF umsetzen lassen? Wait?
3.) Warum kommt beim RPI_GPIO der Status "off", obwohl vorher kein "on" da war?

Ich hoffe ihr versteht was ich meine...
 
Gruß
Bismosa
Titel: Antw:DOIF Nur bei Status "on" eines Gerätes ausführen
Beitrag von: Damian am 18 August 2017, 18:11:54
Zitat1.) Kann es sein, das mein DOIF auf "HeizungsStoerung Longpress: off" reagiert? Wie müsste ich das richtig im DOIF angeben, das er auch wirklich nur bei "on" reagiert?

ja, es kann!

daher:



([HeizungsStoerung:"^on$"])


alternativ den Status abfragen mit:

([HeizungsStoerung] eq "on")

Titel: Antw:DOIF Nur bei Status "on" eines Gerätes ausführen
Beitrag von: bismosa am 18 August 2017, 20:39:11
Hallo!

Vermutung richtig...Umsetzung mangelhaft.  *Grmpf
Da muss ich also noch richtig viel lernen...vor allem beim Regex. Gelöst habe ich es jetzt mit
([HeizungsStoerung] eq "on")

Das versrtehe ich wenigstens  ;D

Eine weitere Beobachtung die ich machen konnte war das die GPIO wohl bei Auslastung des Raspberry gelegentlich neu eingelesen werden. Daher kommt vermutlich des öfteren der gleiche Status...aber das muss ich jetzt noch ein bisschen beobachten. Kann ich ja jetzt zum Glück...keine Fehlalarme mehr  :)

Vielen Dank!

Gruß
Bismosa

Titel: Antw:DOIF Nur bei Status "on" eines Gerätes ausführen
Beitrag von: Damian am 18 August 2017, 20:43:35
Zitat aus der Commandref:

ZitatIm Gegensatz zum notify werden vom DOIF-Modul selbst keine Regex-Sonderzeichen hinzugefügt. Insb. wird kein ^ für Anfang vorangestellt, bzw. kein $ für Ende angehängt.

Beispiele für Regex-Angaben:

["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen
(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
[""] triggert auf alles
Titel: Antw:DOIF Nur bei Status "on" eines Gerätes ausführen
Beitrag von: bismosa am 18 August 2017, 20:50:15
Hallo,

danke. Den Abschnitt muss ich überlesen haben. Vermutlich weil ich auf etwas anderes so fixiert war.
Wer lesen kann ist klar im Vorteil! Schande auf mein Haupt! ::)*duckundwech

Gruß
Bismosa