Toggle Button für Thermostat (MAX! Zwischenstecker)

Begonnen von Hallmackenreuther, 03 September 2018, 15:23:32

Vorheriges Thema - Nächstes Thema

Hallmackenreuther

Moin zusammen!

Ausgangssituation:
Ich habe einige BC-TS-Sw-Pl, mit denen ich beliebige Verbraucher per Toggle Button (also Icon, wie z. B. bei meinem HM-LC-Sw2PBU-FM) an und aus schalten möchte.

Ziel:
Der Button soll von meinem Floorplan aus abwechselnd desiredTemperature am Stecker auf on oder off setzen - vor allem soll er aber auch anzeigen, wenn sich der Status anderweitig, z. B. durch schalten am Stecker selbst, ändert.

Mein bisheriger Ansatz:
Dummy für Button:
define Toggler dummy
attr Toggler devStateIcon on.*:SchuKo2@00EF00 off.*:SchuKo2@red
attr Toggler setList on off
attr Toggler useSetExtensions 1
attr Toggler webCmd on:off


Notify, um mit Änderung des Dummys den Schalter umzustellen (funktioniert):
define TGGL2Steck notify Toggler set Stecker_03 desiredTemperature $EVENT

Notify, um den Dummy über anderweitige Änderungen zu informieren (funktioniert nicht):
define Steck2TGGL notify Stecker_03 set Toggler $EVENT

Große Frage:
Wie hätte ich das gemacht, wenn ich schlauer wär oder besser lesen könnte?
FHEM 6.0 auf Raspi 5, Raspberry Pi OS Bookworm | MAX! Cube a-culfw MAX: Heizkörperthermostate,  Fensterkontakte, Wandthermostat, Zwischenstecker BC-TS-Sw-Pl |2. MAX! Cube a-culfw HM: Rollos HM-LC-BI1PBU-FM, Licht HM-LC-Sw2PBU-FM | 3. MAX! Cube a-culfw SlowRF: Thermometer TX29-IT

Otto123

#1
Hi,

das größte Problem deiner beiden notify ist, dass Du jeden Event (egal was drin steht) einfach in desiredTemperature von Stecker_03 schreibst (was vielleicht nicht sinnvoll und schlimm ist) aber auch jeden Event von Stecker_03 in den dummy schreibst der wiederum jeden Event in das Reading vom Stecker_03 schreibt.
Damit wäre der Kreis geschlossen und der Wettlauf beginnt  ;D

1. Vorschlag, reagiert nur auf on und off
define TGGL2Steck notify Toggler:(on|off) set Stecker_03 desiredTemperature $EVENT

Wozu soll jeder Event von Stecker_03 in ein Reading von Toggler geschrieben werden - was willst Du damit erreichen?

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

Hallmackenreuther

Zitat von: Otto123 am 03 September 2018, 15:30:54
Hi,

das größte Problem deiner beiden notify ist, dass Du jeden Event (egal was drin steht) einfach in desiredTemperature von Stecker_03 schreibst (was vielleicht nicht sinnvoll und schlimm ist) aber auch jeden Event von Stecker_03 in den dummy schreibst der wiederum jeden Event in das Reading vom Stecker_03 schreibt.
Damit wäre der Kreis geschlossen und der Wettlauf beginnt  ;D
Diese Schleife hatte ich auch schon befürchtet, aber in der Praxis konnte ich nicht nachvollziehen, dass es wirklich so passiert.

Zitat
1. Vorschlag, reagiert nur auf on und off
define TGGL2Steck notify Toggler:(on|off) set Stecker_03 desiredTemperature $EVENT

Wozu soll jeder Event von Stecker_03 in ein Reading von Toggler geschrieben werden - was willst Du damit erreichen?

Gruß Otto
Da es im Dummy nur on und off gibt, kommen auch nur diese Werte in die desiredTemperature.
Wie ich andersrum gezielter die desiredTemperature abgreifen könnte suche ich aber auch noch.
FHEM 6.0 auf Raspi 5, Raspberry Pi OS Bookworm | MAX! Cube a-culfw MAX: Heizkörperthermostate,  Fensterkontakte, Wandthermostat, Zwischenstecker BC-TS-Sw-Pl |2. MAX! Cube a-culfw HM: Rollos HM-LC-BI1PBU-FM, Licht HM-LC-Sw2PBU-FM | 3. MAX! Cube a-culfw SlowRF: Thermometer TX29-IT

Otto123

#3
Nein gibt es nicht bloß on und off -> mit dem zweiten notify kommt alles was  Stecker_03 so zu bieten hat:
set Toggler $EVENT

Diesen Satz verstehen ich leider nicht - Du setzt sie doch selbst?
ZitatWie ich andersrum gezielter die desiredTemperature abgreifen könnte suche ich aber auch noch.

Oder ahne ich richtig und du willst sowas in der Art im ersten Beispiel?
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

Hallmackenreuther

Zitat von: Otto123 am 03 September 2018, 15:51:40
Diesen Satz verstehen ich leider nicht - Du setzt sie doch selbst?
Wie du schon sagst, schicke ich sämtliche Events weiter und es soll eigentlich nur die desiredTemperature übertragen werden.

Das Beispiel hat das selbe Ziel wie ich, also Umschaltbutton mit Rückmeldung, aber das Script kann ich auf mein Szenario nicht anwenden.

Geh auch bitte nicht so fest davon aus, dass ich mit jedem Element meiner Config was bezwecke, ich habe mir halt Sachen zusammengelesen und rumprobiert und das Ganze hat zunehmend funktioniert wie ich es vorhabe, aber letztendlich freue ich mich ggf. auch über ein "lösch den ganzen Unfug, das was du vorhast geht ganz einfach mit...".

Hauptsache am Ende steht ein Button, der meinen Stecker zwischen an und aus umschaltet, das entsprechend visualisiert und auch anzeigt, wenn der Schalter nicht über den Button selber an oder aus geschaltet wurde.
FHEM 6.0 auf Raspi 5, Raspberry Pi OS Bookworm | MAX! Cube a-culfw MAX: Heizkörperthermostate,  Fensterkontakte, Wandthermostat, Zwischenstecker BC-TS-Sw-Pl |2. MAX! Cube a-culfw HM: Rollos HM-LC-BI1PBU-FM, Licht HM-LC-Sw2PBU-FM | 3. MAX! Cube a-culfw SlowRF: Thermometer TX29-IT

Otto123

#5
Ich kenne leider diesen Zwischenstecker nicht. Ich weiß nicht wie die Events exakt aussehen, dass musst Du Dir im Eventmonitor anschauen.

Schau Dir mein Beispiel nochmal genau an, dass macht genau das was Du willst. Ich glaube Du hast gleich zu weit gelesen, es geht nicht um den Remote Taster sondern um den einfachen Taster bzw. mit einer kleinen Modifikation.

Es wäre allerdings gut,wenn wir einen Event hätten, der nicht von deinem Dummy kommt sondern von deinem Stecker_03.

Also zeichne bitte die Events vom Stecker_03 auf wenn Du in von wo auch immer betätigst und wenn Du ihn von dem Dummy mit dem notify setzt.

Das Prinzip dabei ist, dass man den Event nicht 1:1 zurück gibt, sondern ihn etwas modifiziert

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

Hallmackenreuther

#6
So?

Einschalten im Device:
2018-09-03 20:35:29 MAX Stecker_03 desiredTemperature on
2018-09-03 20:35:30 MAX Stecker_03 mode: manual
2018-09-03 20:35:30 MAX Stecker_03 battery: ok
2018-09-03 20:35:30 MAX Stecker_03 batteryState: ok
2018-09-03 20:35:30 MAX Stecker_03 desiredTemperature: on
2018-09-03 20:35:30 MAX Stecker_03 valveposition: 0
2018-09-03 20:35:30 MAX Stecker_03 on °C
2018-09-03 20:35:30 MAX Stecker_03 RSSI: -56


Ausschalten im Device:
2018-09-03 20:35:50 MAX Stecker_03 desiredTemperature off
2018-09-03 20:35:51 MAX Stecker_03 mode: manual
2018-09-03 20:35:51 MAX Stecker_03 battery: ok
2018-09-03 20:35:51 MAX Stecker_03 batteryState: ok
2018-09-03 20:35:51 MAX Stecker_03 desiredTemperature: off
2018-09-03 20:35:51 MAX Stecker_03 valveposition: 100
2018-09-03 20:35:51 MAX Stecker_03 off °C
2018-09-03 20:35:51 MAX Stecker_03 RSSI: -54


Einschalten am Dummy:
2018-09-03 20:42:32 MAX Stecker_03 desiredTemperature on
2018-09-03 20:42:32 dummy Toggler on
2018-09-03 20:42:34 MAX Stecker_03 mode: manual
2018-09-03 20:42:34 MAX Stecker_03 battery: ok
2018-09-03 20:42:34 MAX Stecker_03 batteryState: ok
2018-09-03 20:42:34 MAX Stecker_03 desiredTemperature: on
2018-09-03 20:42:34 MAX Stecker_03 valveposition: 0
2018-09-03 20:42:34 MAX Stecker_03 on °C
2018-09-03 20:42:34 MAX Stecker_03 RSSI: -55.5


Ausschalten am Dummy:
2018-09-03 20:45:23 MAX Stecker_03 desiredTemperature off
2018-09-03 20:45:23 dummy Toggler off
2018-09-03 20:45:24 MAX Stecker_03 mode: manual
2018-09-03 20:45:24 MAX Stecker_03 battery: ok
2018-09-03 20:45:24 MAX Stecker_03 batteryState: ok
2018-09-03 20:45:24 MAX Stecker_03 desiredTemperature: off
2018-09-03 20:45:24 MAX Stecker_03 valveposition: 100
2018-09-03 20:45:24 MAX Stecker_03 off °C
2018-09-03 20:45:24 MAX Stecker_03 RSSI: -55.5


Es lässt sich auch toll schalten, das Manko ist, dass mein Dummy nicht weiß, wenn anderweitig geschaltet wird.
FHEM 6.0 auf Raspi 5, Raspberry Pi OS Bookworm | MAX! Cube a-culfw MAX: Heizkörperthermostate,  Fensterkontakte, Wandthermostat, Zwischenstecker BC-TS-Sw-Pl |2. MAX! Cube a-culfw HM: Rollos HM-LC-BI1PBU-FM, Licht HM-LC-Sw2PBU-FM | 3. MAX! Cube a-culfw SlowRF: Thermometer TX29-IT

Otto123

Man könnte doch jetzt folgendes notify machen:
defmod Steck2TGGL notify Stecker_03:desiredTemperature:.(on|off) set Toggler _$EVENT
attr Toggler devStateIcon _on:SchuKo2@00EF00 _off:SchuKo2@red


Schau mal ob das geht. Damit wird das Icon klickbar und toggelt
attr Toggler devStateIcon _on:SchuKo2@00EF00:off _off:SchuKo2@red:on

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

Hallmackenreuther

Vielen Dank!

Ich bin mir über den Erfolg noch nicht zu 100% sicher, weil die Credits beim rumprobieren rar wurden, aber das sieht soweit gut aus.

Aktuelle Config:

define Toggler dummy
attr Toggler devStateIcon .*on:SchuKo3@00EF00:off .*off:SchuKo3@red:on
attr Toggler fp_Grundriss 634,785,1,Toggler,
attr Toggler setList on off
attr Toggler webCmd on:off

define TGGL2Steck notify Toggler set Stecker_03 desiredTemperature $EVENT

define Steck2TGGL notify Stecker_03:desiredTemperature:.(on|off) set Toggler _$EVENT


Zwei bis drei Fragen habe ich aktuell noch:

- Hast du eine Idee, wo die FM herrühren kann?
ZitatTGGL2Steck return value: Second parameter must be 'until'
- Kannst du mir bitte den defmod Teil nochmal detailliiert aufschlüsseln?
- Gibt es nicht auch eine Möglichkeit per readingsProxy? Ich finde dazu leider keine vollständige Dokumentation, aber einige Elemente deuten namentlich darauf hin.


FHEM 6.0 auf Raspi 5, Raspberry Pi OS Bookworm | MAX! Cube a-culfw MAX: Heizkörperthermostate,  Fensterkontakte, Wandthermostat, Zwischenstecker BC-TS-Sw-Pl |2. MAX! Cube a-culfw HM: Rollos HM-LC-BI1PBU-FM, Licht HM-LC-Sw2PBU-FM | 3. MAX! Cube a-culfw SlowRF: Thermometer TX29-IT

Otto123

#9
Moin,

um die Fehlermeldung zu erforschen, kannst Du TGGL2Steck  im Eventmonitor beobachten, oder einen FileLog für TGGL2Steck  machen und dann die Fehlermeldung mit den Events abgleichen.

Mit Aufschlüsseln meinst Du was? Das hier
attr Toggler devStateIcon .*on:SchuKo3@00EF00:off .*off:SchuKo3@red:on
Doku -> https://commandref.fhem.de/commandref_DE.html#devStateIcon
ZitatLeerzeichen getrennte Auflistung von regexp:icon-name:cmd Dreierpärchen, icon-name und cmd dürfen leer sein.
Wenn der Zustand des Gerätes mit der regexp übereinstimmt, wird als icon-name das entsprechende Status Icon angezeigt, und (falls definiert), löst ein Klick auf das Icon das entsprechende cmd aus.

Du hast es gegenüber meinem Vorschlag verändert, Du reagierst jetzt nicht auf _on und _off sondern auf alles was mit on oder off endet.

Das notify macht aus jedem on ein _on und aus dem off ein _off. Damit ist gewährleistet, dass keine Schleife entsteht wo sich alles wieder selbst triggert. Nur der Klick auf das Icon sendet einen neuen Befehl.

Die vollständige Dokumentation von readingsProxy ist hier: https://commandref.fhem.de/commandref.html#readingsProxy

Damit könntest Du sicher alles in einem define vereinen.
Ich habe so etwas um das GuestWlan an und aus zu schalten, also nur als Beispiel:
defmod rp_FB_GWLAN1 readingsProxy FB7490:box_guestWlan
attr rp_FB_GWLAN1 devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr rp_FB_GWLAN1 event-on-change-reading .*
attr rp_FB_GWLAN1 room Haus
attr rp_FB_GWLAN1 setFn {($CMD eq "on")?"guestWlan on":"guestWlan off"}
attr rp_FB_GWLAN1 setList on off


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