FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bajogger am 11 Januar 2024, 23:14:30

Titel: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 11 Januar 2024, 23:14:30
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?
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: TomLee am 12 Januar 2024, 00:19:41
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.




Alternativ zum notify kannst auch ein userreadings missbrauchen:
attr WohnZimRol  userReadings bulb:pct:.100 {fhem('set WohnZimLight on');return 'done'}



Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: Beta-User am 12 Januar 2024, 07:08:13
@bajogger:
Bitte in den Anfängerbereich verschieben, das ist kein fertiger Code...
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 12 Januar 2024, 09:59:42
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?

Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: rabehd am 12 Januar 2024, 10:27:35
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)
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 12 Januar 2024, 15:00:14
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

Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: rabehd am 12 Januar 2024, 15:33:32
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.
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: frank am 12 Januar 2024, 15:46:57
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
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: rabehd am 12 Januar 2024, 15:55:53
Zitat von: frank am 12 Januar 2024, 15:46:57sollte folgendes auch funktionieren:
Er sagt nein
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: frank am 12 Januar 2024, 16:04:43
Zitat von: rabehd am 12 Januar 2024, 15:55:53Er sagt nein
nein.
mein bsp hat ein doppelpunkt weniger.
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: TomLee am 12 Januar 2024, 16:29:39
Zitat von: frank am 12 Januar 2024, 16:04:43
Zitat 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}
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 12 Januar 2024, 16:35:42
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 ?
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: TomLee am 12 Januar 2024, 16:52:40
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')}
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: frank am 12 Januar 2024, 16:58:16
bajogger hat scheinbar ein device, wo im reading state der wert "pct 100" kommt.

und kein reading pct.
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: TomLee am 12 Januar 2024, 17:02:58
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.
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: TomLee am 12 Januar 2024, 17:05:16
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 ? ? ?
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 12 Januar 2024, 17:27:31
Zitatbajogger hat scheinbar ein device, wo im reading state der wert "pct 100" kommt.

und kein reading pct.

Genau
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 12 Januar 2024, 23:12:12
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?
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: frank am 12 Januar 2024, 23:28:02
schau mal auf regex101.com
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: Beta-User am 13 Januar 2024, 08:16:29
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 onIch 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')}
Titel: Aw: Gerät schalten abhängig von Rollo Position
Beitrag von: bajogger am 14 Januar 2024, 17:13:54
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