Dimmer heller schalten mit notify und einem ausgelesenem Zustand?

Begonnen von heinzelrumpel, 05 März 2016, 13:42:28

Vorheriges Thema - Nächstes Thema

heinzelrumpel

Hallo,

möchte das mein Device ez_Dimmer je nach Dimmzustand heller wird. Habe mir dazu ein notify angelegt und im DEF Teil steht dies



ez_Dimmer { if (ReadingsVal("ez_Dimmer","state",off) > "20%") {fhem "set ez_Dimmer dim50%"} elseif (ReadingsVal("ez_Dimmer","state",off) > "50%") {fhem "set ez_Dimmer dim 80%"} elseif (ReadingsVal("ez_Dimmer","state",off) > "80%") {fhem "set ez_Dimmer dim100%"}}


mit "trigger heller_Esszimmer" bewegt sich nichts. Im log steht dann nichts. Ich vermute, dass einfach der aktuelle Dimmwert der in den Readings unter "state" nicht mit meiner if Andweisung so einfach ausgewertet werden kann, denn wenn der Dimmlevel auf z.B. 30% steht, dann zeigt "state" dim 30" und dies kann man ja nicht einfach mit "> 50%" abragen. Irgenwie ist mir das ja auch klar, aber wie mache ich es richtig?

Grüße, Heinzelrumpel


Otto123

Hi,

ich denke zum Ersten dein Ausdruck stimmt nicht: (ReadingsVal("ez_Dimmer","state",off) ich denke so ist richtig: (ReadingsVal("ez_Dimmer","state","off")
Zum Zweiten denke ich der Vergleich wäre nicht richtig, 20% wäre eine Zeichenkette keine Zahl.
Ich zitiere mal die commandref:
ZitatVergleichende Abfragen werden, wie in Perl gewohnt, mit Operatoren ==, !=, <, <=, >, >= bei Zahlen und mit eq, ne, lt, le, gt, ge, =~, !~ bei Zeichenketten angegeben.
Aber steht im State wirklich 20% und nicht 20? Also bei meinen Homematic Dimmern steht da nur eine Zahl.
Zum Dritten Du sagst "trigger heller_Esszimmer" aber Dein notify triggert gar nicht auf "heller_Esszimmer" sondern auf "ez_Dimmer". So kannst Du das nicht testen!

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

heinzelrumpel

Im state steht tatsächlich "dim 20" . Ich hab  keine Ahnung, mit welchem Vergleichsoperator ich da arbeiten soll. Denke, ich muss ein customReading erstellen, dass das "dim"  wegfiltert, oder?

frank

Zitat von: heinzelrumpel am 06 März 2016, 00:38:58
Im state steht tatsächlich "dim 20" . Ich hab  keine Ahnung, mit welchem Vergleichsoperator ich da arbeiten soll. Denke, ich muss ein customReading erstellen, dass das "dim"  wegfiltert, oder?
du hast immer noch nicht gesagt, welchen dimmer du hast. bei homematic gäbe es sicher genügend readings, die du problemlos nutzen könntest.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Otto123

Mach doch einfach mal ein list ez_Dimmer und poste das Ergebnis.
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

heinzelrumpel

#5
Stimmt, habe ich vergessen

Internals:
   DEF        d629b337 6
   IODev      ZWDongle_0
   LASTInputDev ZWDongle_0
   MSGCNT     96
   NAME       ez_Dimmer
   NR         46
   STATE      TRANSMIT_NO_ACK
   TYPE       ZWave
   ZWDongle_0_MSGCNT 96
   ZWDongle_0_RAWMSG 00130601025a
   ZWDongle_0_TIME 2016-03-06 00:49:02
   homeId     d629b337
   isWakeUp
   lastMsgSent 1457221746.67809
   nodeIdHex  06
   Readings:
     2016-02-22 21:48:22   CMD             ZW_APPLICATION_UPDATE
     2016-03-05 21:52:04   reportedState   off
     2016-03-06 00:49:02   state           TRANSMIT_NO_ACK
     2016-03-06 00:49:06   transmit        OK
Attributes:
   IODev      ZWDongle_0
   classes    MANUFACTURER_SPECIFIC VERSION CONFIGURATION ASSOCIATION MULTI_CHANNEL_ASSOCIATION SWITCH_MULTILEVEL FIRMWARE_UPDATE_MD SWITCH_ALL POWERLEVEL MARK SWITCH_MULTILEVEL SCENE_ACTIVATION
   room       Esszimmer
   webCmd     dim


So langsam glaube ich aber, dass mein Vorhaben so nicht zu realisieren ist. ICh nutzte Tasker und Autovoice.  Jetzt möchte ich, dass Tasker einen Befehl auf mein Sprachkommando absetzt, in dem Fall "Es ist im Esszimmer zu dunkel". Der abzusetzende Befehl in  Fhem soll dann prüfen, wie der Dimmer gerade läuft, also welche Dimmstufe. Aber notify reagiert dann ja immer bei einer Änderung des Dimlevels, zB. wenn ich den Dimmer am Wandschalter betätige, oder?

Folgender Code läuft, wenn der Dimmer komplett auf 0 ist und ich "triggern heller_Esszimmer" absetze.



heller_Esszimmer { if (ReadingsVal("ez_Dimmer","state","off") < "20") {fhem "set ez_Dimmer dim 50"} elsif (ReadingsVal("ez_Dimmer","state","off" ) < "50") {fhem "set ez_Dimmer dim 80"} elsif (ReadingsVal("ez_Dimmer","state","off") < "80") {fhem "set ez_Dimmer dim 100"}}



frank

ich kenne kein zwave, aber eventuell ist das reading reportedState besser geeignet.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

heinzelrumpel

Zitat von: frank am 06 März 2016, 12:25:11
ich kenne kein zwave, aber eventuell ist das reading reportedState besser geeignet.

Zeigt auch nur zB. "dim 30"

heinzelrumpel

Habe es mal so probiert, nachdem ich im Wiki zum notify einige Beispiele gesehen habe


heller_Esszimmer (ez_Dimmer:STATE.*) { if ($EVTPART0 < "20") {fhem "set ez_Dimmer dim 50"} elsif ($EVTPART0 < "50") {fhem "set ez_Dimmer dim 80"} elsif ($EVTPART0) < "80") {fhem "set ez_Dimmer dim 100"}}


ein trigger löst nix aus, im Log steht dann folgendes


heller_Esszimmer return value: Unknown command (ez_Dimmer:STATE.*), try help.


Ich dachte eigentlich, dass sich die if-Abfrage dann auf das Ergebnis aus " (ez_Dimmer:STATE.*) holt. Da habe ich mich wohl getäuscht.

Otto123

#9
Also erstmal verwirrt mich das ziemlich:
Zitat2016-03-05 21:52:04   reportedState   off
     2016-03-06 00:49:02   state           TRANSMIT_NO_ACK
     2016-03-06 00:49:06   transmit        OK
Aber egal, wenn Du der Meinung bist er zeigt "dim 50" in der Art an, dann gilt es die Spreu vom Weizen, sprich die Zahl vom Text zu trennen.
Mit einem RegExp "\d" nimmt man nur die Zahl. Ich weiß jetzt auf die Schnelle nicht wie man das bei Dir einbaut.
Eventuell so (ReadingsVal("ez_Dimmer","state","off")\d

Die Idee mit dem EVTPART ist eventuell auch eine, aber wie sieht Dein Event denn aus? Du sagst trigger heller_Esszimmer!!! Da ist Dein Event heller_Esszimmer! Du stocherst irgendwie im ganz trüben Wasser! Du kannst den Event prima im Eventmonitor sehen, da wird Dir vielleicht klar was Du tust.
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

heinzelrumpel

Ich weiß :-[ Finde fhem irgendwie echt kompliziert. Im eventmonitor hab ich bisher nix brauchbares entdecken können.

Otto123

#11
Zitat von: heinzelrumpel am 06 März 2016, 21:04:49
Ich weiß :-[ Finde fhem irgendwie echt kompliziert. Im eventmonitor hab ich bisher nix brauchbares entdecken können.
findest Du? Ich finde Du hast irgendwie komplizierte Ansätze  :'(

Also klären wir mal die Sache mit Deinem notify und dem eventmonitor:
Dein notify heisst heller_Esszimmer? Du willst wissen was passiert und wie der event aussieht? Also mach bitte den eventmonitor auf, am Besten in einem zweiten Fenster. Dann tippst Du oben auf den Filter, dort schreibst du heller_Esszimmer rein. Damit steht dort heller_Esszimmer.* und Du drückst ok.
Anschließend gibst Du im anderen Fenster, trigger heller_Esszimmer ein - im eventmonitor siehst Du den event.

Alles klar?

Da ich davon ausgehe, dass Du nichts mit der Kommandozeile und dem Befehl trigger heller... machen willst: Was willst Du eigentlich machen? Einen Dimmer bedienen?
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

heinzelrumpel

Wenn ich das im Eventmonitor eingegebe, bekomme ich unknown command. Das meine ich mit kompliziert ;) Kann schon sein,dass ich das verkompliziere,aber irgenwie sind die Zusammenhänge nicht in einer für micf verständliche Form erklärt. Stehe mit der IT eigentlich nicfht auf Kriegfuss, habe mit Debian auch schon viel gemacht, aber fhem killt mich gerade. Vielleicht liegts auch ein wenig an perl. Keine Ahnung. Ich versuche mal zu erklären, was ich eigentlich erreichen möchte. Ich brauche einen Befehl, der checkt,wie der dimlevel gerade ist und bei bestimmten Werten den level hochsetzt, also zb. falls derdimlevel bei <= 20 ist, soll der dimlevel auf 50 gesetzt werden. Der gleiche Befehl soll dann auch  weitere level prüfen, also falls dimlevel <=50, dann auf 80  hoch, falls nicht <=20 usw. Dachte Elsif wäre dafür geeignet.Diesen Befel möchte ich dann über Tasker per fhem Plugin absetzen. Hoffe das war verständlich ausgedrückt  ::)

Otto123

#13
Welche Version FHEM hast Du?

Die Zeile die Du oben in FHEM siehst ist immer die Kommandozeile, immer die Gleiche. Im Fenster eventmonitor kannst Du dort Befehle eingeben aber nicht das was ich meine!

Hast Du eigentlich mal den verlinkten Anfängerkurs von Uli angeschaut?

Die rot markierte Stelle im Bild ist klickbar, dort trägst Du das Filter ein!
(https://forum.fhem.de/index.php?action=dlattach;topic=50270.0;attach=48075)

Hier habe ich noch was gefunden, ich habe jetzt keine Lust das für Dich zu lesen  ;)
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