Möchte ein Licht schalten sobald ein Rolladen eine bestimmte Position hat
Das Gerät "WohnZimLight" soll on gesetzt werden sobald der Rolladen "WohnZimRol" "pct 100" hat
Kann mir jemand mit dem entsprechenden Code, vermutlich ein notify, helfen?
Hallo,
ZitatKann mir jemand mit dem entsprechenden Code, vermutlich ein notify, helfen?
ZitatVorgehensweise beim Anlegen eines Gerätes (https://wiki.fhem.de/wiki/Event_monitor#Vorgehensweise_beim_Anlegen_eines_Ger%C3%A4tes)
- Event-Zeile komplett markieren
- den Knopf Create/Modify Device betätigen
- ein Gerätemodul auswählen
- Create auswählen
- die gewünschte Form des Events auswählen
- den Knopf OK betätigen
Danach öffnet sich die Detailansicht des angelegten Gerätes, dort kann die Definition weiter bearbeitet werden.
- Eventmonitor öffnen
- WohnZimRol auf 100 fahren
- die Event-Zeile (die mit der 100) komplett markieren
- den Button Create/Modify Device betätigen
- notify in dem Dialogfeld auswählen und mit OK bestätigen
- in der Detailansicht des erstellten notify auf DEF tippen
- die zwei geschweiften Klammern durch set WohnZimLight on ersetzen
Alternativ zum notify kannst auch ein userreadings missbrauchen:
attr WohnZimRol userReadings bulb:pct:.100 {fhem('set WohnZimLight on');return 'done'}
@bajogger:
Bitte in den Anfängerbereich verschieben, das ist kein fertiger Code...
Vielen Dank an TomLee hat Super funktioniert. Vorgehensweise wird mir noch oft helfen. Habe ich trotz Nutzung von FHEM seit vielen Jahren nicht gekannt.
Hat mir wieder gezeigt wie kleine Unterschiede ein großes Problem machen.
WohnZimRoll:pct.100 set WohnZimLight on # funktioniert
Hatte ich so, nur ohne den Punkt zwischen pct und 100 zigmal probiert. Wird halt als Leerzeichen im state dargestellt
Danke für die Hilfe
Noch eine Frage:
Die exakte Position pct.100 durch >pct.80 ersetzen? Wie fügt man das ins notify ein?
Zitat von: bajogger am 12 Januar 2024, 09:59:42Noch eine Frage:
Die exakte Position pct.100 durch >pct.80 ersetzen? Wie fügt man das ins notify ein?
In dem man in die Hilfe oder das Wiki schaut.
https://wiki.fhem.de/wiki/Notify (https://wiki.fhem.de/wiki/Notify)
Mache ich eigentlich immer. Auch schon vor deinem Hinweis. Versuche wirklich zu verstehen. Nur wenn ich nicht weiterkomme -- so wie hier
Ausgangssituation
WohnZimRoll:pct.100 set WohnZimLight on
Exakte Position pct.100 schaltet Licht
Im Wiki gefunden
dimmer:pct:.(100|7[6-9]|[89][0-9]) → reagiert, wenn pct einen Wert über 75 annimmt.
Versuch zu übertragen
WohnZimRoll:pct:.(100|7[6-9]|[89][0-9]) set WohnZimLight on
Funktioniert "wie erwartet" nicht. Unabhängig das ich den Zahlenblock in der Klammer schon nicht verstehe
Das kann hier noch eine Grundsatzdiskussion werden.
Ich würde auf alle events von pct reagieren und in notify den Wert abfragen und nur auf den gewünschten Bereich reagieren (IF). Vielleicht nicht perfekt aus Sicht der Programmierung, aber zumindest lesbarer.
Damit wären wir dann auch beim DOIF. Das wäre mir hier am liebsten.
Für Deine Lösung, da würde ich mich rantasten.
dimmer:pct:.(100|7[6-9]|[89][0-9])
dimmer:pct:.(7[6-9])
dimmer:pct:.([89][0-9])
dimmer:pct:.(7[6-9]|[89][0-9])
...und so weiter. Jede Version muss ja für sich funktionieren. Zum Testen reicht ja auch das Schreiben ins Log.
wenn das funktioniert wie geschrieben:
WohnZimRoll:pct.100 set WohnZimLight on
sollte folgendes auch funktionieren:
WohnZimRoll:pct.(100|7[6-9]|[89][0-9]) set WohnZimLight on
Zitat von: frank am 12 Januar 2024, 15:46:57sollte folgendes auch funktionieren:
Er sagt nein
Zitat von: rabehd am 12 Januar 2024, 15:55:53Er sagt nein
nein.
mein bsp hat ein doppelpunkt weniger.
Zitat von: frank am 12 Januar 2024, 16:04:43Zitat von: rabehd am 12 Januar 2024, 15:55:53Er sagt nein
nein.
mein bsp hat ein doppelpunkt weniger.
Hast das auch ausprobiert ?
Bei mir klappt das ohne Doppelpunkt nicht, aber mit, wie im Wiki gezeigt, schon:
defmod pct2dim_notify_1 notify pct2dim:pct:.(100|7[6-9]|[89][0-9]) {Debug $EVTPART1}
WohnZimRoll:pct.(100|7[6-9]|[89][0-9]) set WohnZimLight on
Funktioniert tatsächlich. War wirklich der Doppelpunkt.
dimmer:pct:.(100|7[6-9]|[89][0-9]) → reagiert, wenn pct einen Wert über 75 annimmt.
Stand so im Wiki
Danke für eure Mühe
Wo ist denn der Zahlenblock (100|7[6-9]|[89][0-9]) erklärt ?
Dann nutzt Ihr ein anderes FHEM wie ich ;D
Bei mir mag das so nicht:
defmod pct2dim dummy
attr pct2dim readingList pct
attr pct2dim setList pct:slider,0,1,100 on off
defmod pct2dim_notify_1 notify pct2dim:pct.(100|7[6-9]|[89][0-9]) {fhem('set OG_Echo_Wohnzimmer speak bla')}
bajogger hat scheinbar ein device, wo im reading state der wert "pct 100" kommt.
und kein reading pct.
Ok, dann komm ich jetzt wieder mit ...
Ich war deswegen:
ZitatDas Gerät "WohnZimLight" soll on gesetzt werden sobald der Rolladen "WohnZimRol" "pct 100" hat
von einem Reading pct ausgegangen.
Popcorn für nix, wäre halt mal ein list gezeigt worden.
Wobei hier aber steht:[/s]
Zitat von: bajogger am 12 Januar 2024, 16:35:42WohnZimRoll:pct.(100|7[6-9]|[89][0-9]) set WohnZimLight on
Funktioniert tatsächlich.
...
das er ein Reading pct hat ? ? ?
Zitatbajogger hat scheinbar ein device, wo im reading state der wert "pct 100" kommt.
und kein reading pct.
Genau
Tut mir leid falls ich meine Frage missverständlich gestellt habe. Der genannte pct Wert steht unter readings state.
Werde dann künftig mit und ohne ":" testen.
WohnZimRoll:pct.(100|7[6-9]|[89][0-9]) set WohnZimLight on
Kann mir jemand was zu dem Zahlenblock sagen. Muss keine Erklärung sein kann auch der Hinweis sein, wo man es nachlesen kann.
Falls ich mal einen Schwellwert verändern will sollte man verstehen was da steht. Mir fehlt der Suchbegriff.
Einen Klartext wie >75 kann man auf keinen Fall verwenden?
schau mal auf regex101.com
Danke für's verschieben.
Falls du NOTIFYDEF nicht kaputt machen willst (passiert bei notify immer, wenn man "regex-oder" in runden Klammern verwendet), kannst du das auch so notieren:
WohnZimRoll:pct.100|WohnZimRoll:pct.7[6-9]|WohnZimRoll:pct.[89][0-9] set WohnZimLight on
Ich würde aber auch zu einer "if"-Lösung raten, die aber direkt mit Perl umsetzen, ungetestet in diese Richtung:
WohnZimRoll:pct.* {return if ReadingsNum('WohnZimRoll','state',0) < 74; fhem('set WohnZimLight on')}
Beide Lösungen funktionieren
Diese
WohnZimRoll:pct.* {return if ReadingsNum('WohnZimRoll','state',0) < 74; fhem('set WohnZimLight on')}
gefällt mir am Besten, weil für mich lesbar
Danke