DOIF bei Klingelsensor mit trigger

Begonnen von Depechem, 16 August 2017, 14:45:08

Vorheriges Thema - Nächstes Thema

nils_

Zitat von: Depechem am 17 August 2017, 17:41:20
ich habe mehrere Klingelsensoren, und die dürfen nicht alle auf einmal dafür getriggert werden. ;-)

ich hatte es geahnt  ;D
dann wird es natürlich schwer ein kurzes regex zu bauen.
andere idee, du packst die Klingelsensoren in eine structure. d.h. du brauchst nur diese "liste" pflegen und deine logik basiert dann darauf.
(jetzt bin ich nur unsicher ob du dann auch events weitergereicht bekommst....-> Eventmonitor prüfen ;). vielleicht weiß Otto da mehr  8) )
viele Wege in FHEM es gibt!

Brockmann

Das Unterscheiden von Short und Long könntest Du Dir ersparen, wenn Du anstatt trigger auf trigger_cnt reagierst. Das ist ein Zähler, der bei jedem Betätigen der Klingel um eins erhöht wird. Wenn der Höchststand erreicht ist, fängt er wieder bei 0 an. Entscheidend ist aber, dass trigger_cnt unabhängig von der Länge des Betätigens immer um eins erhöht wird. Du brauchst also Short und Long nicht zu unterscheiden, sondern reagierst einfach nur auf ein trigger_cnt-Event von diesem Device.


([Klingelsensor_1_Eltern_Haustuer:"trigger_cnt"] or...)


Das event-on-change-Attribut müsstest Du dafür aber entsprechend ändern.

Otto123

#17
Moin Thomas,

nochmal kleine Grundlagenkunde  8)
das semikolon
für den FHEM Befehl muss in der Raw definition (damit auch in der fhem.cfg) doppelt stehen, ein einzelnes semikolon würde von Perl interpretiert und damit entfernt. Beispiel
defmod ALLE_ROLLOS_ notify ALLE_ROLLOS set RolloAZL $EVENT;; set RolloAZR $EVENT
In der Oberfläche steht in der DEF und im DEF Editor aber nur ein SemikolonDEF ALLE_ROLLOS set RolloAZL $EVENT; set RolloAZR $EVENTWenn Du hier postest musst Du entweder die DEF posten und das so schreiben, oder die Raw definiton posten oder ein list <gerät> posten. Die DEF zu kopieren und ein define daraus zu basteln und das zu posten führt genau dazu, dass der Leser verwirrt ist. In deinem define steht nur ein Leerzeichen!
das regEx
Im regEx muss ein Leerzeichen gesondert berücksichtigt werden. Meist nimmt man einen Punkt. Ich suche die Textkette "Klingelsensor_3_Thomas_Haustuer Short" und muss im regEx das Leerzeichen durch einen Punkt ersetzen "Klingelsensor_3_Thomas_Haustuer.Short" Der Punkt trifft auf jedes Zeichen zu! Also regEx ..... wären einfach ein Wort mit 5 Zeichen.

Insofern enthält dein regEx in Deinem DOIF noch Leerzeichen und das ist aus meiner Sicht falsch. Ich glaube aber DOIF handhabt das anders, deswegen funktioniert es vielleicht. Hast Du ja geschrieben, ich bezweifle es weil das regEx hat ein Leerzeichen und Dein Ausführungsteil hat ein semikolon zu wenig. Aber vielleicht macht der Ausführungsteil was, wirft einen Fehler und Du denkst geht doch.  ;)

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

Otto123

Noch ein Vorschlag mit notify, weil Du hier DOIF mMn nicht brauchst und notify einfacher wird.
Ich nehme mal diesen Eventteil, der geht bei Short und Long falls Dich Klingeldauerfeuer nicht stört:
Klingelsensor_3_Thomas_Haustuer trigger:
Du hast diese Sensoren und willst genau die:
Klingelsensor_1_Eltern_Haustuer
Klingelsensor_Btn_04_Eltern_Hoftor
Klingelsensor_2_Omi_Haustuer
Klingelsensor_Btn_06_Omi_Hoftor


define nty_Klingel_Thomas_bekommt_alles notify (Klingelsensor_[1,2].*|Klingelsensor_Btn_0[4,6].*):trigger:.* IF ([Klingel_Thomas_bekommt_alles_Schalter] eq "on")(set Klingelmodul_Thomas playTone 001;; set Pushover_Pushnachrichten msg 'Klingel' 'von Omi oder Eltern' 'iPhoneThomas' 0 'pushover')
Man beachte: der erste ":" ist der Trenner zwischen Gerät und Event, der zweite ":" ist Teil des Events!
Ist jetzt nicht getestet sollte aber funktionieren. Falls nicht, kannst Du einfach den regEx Teil oder Teile davon im Eventmonitor ausprobieren, das ist schneller und besser als auf das notify zu warten.

Der trigger_cnt Event wie Brockmann schrieb ist  auch eine Idee.
Wenn Du kein Dauerfeuer willst, kannst Du auf LongRelease triggern, allerdings klingelt es dann erst beim loslassen.

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

Fixel2012

#19
eventmininterval setzen wäre auch eine Möglichkeit. z.B. auf 30 sekunden, somit wird nur jede 30 sekunden ein Event generiert.
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Otto123

@Fixel2012
Ich finde es sinnlos einen kompletten Beitrag zu zitieren, der genau vor der Antwort steht.
Besser wäre Du hättest den Teil rausgenommen, der sich auf Deine Antwort bezieht. Dann würde man das auch sofort verstehen und müsste nicht minutenlang nachdenken  :-X :'(

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

Fixel2012

@Otto123 Da hast du eigentlich Recht! habe es oben editiert und werde Zukünftig schauen, dass ich das vermeide  :)
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify