Mqtt2 Sonoff Devices als Wechselschaltung [gelöst]

Begonnen von Mr.1000V, 26 März 2019, 15:38:56

Vorheriges Thema - Nächstes Thema

Mr.1000V

Ich benutze zwei Sonoff T1 EU 2ch und einen Sonoff Basic, allesamt mit neuester Tasmota Software geflasht, um Licht_Dz_Ost zu schalten. Hardwaremäßig ist die Lampe an einen Sonoff T1 angeklemmt. Der Sonoff Basic wird über einen Taster und GPI0/Gnd umgeschaltet zwischen on und off
Grundsätzlich funktionieren alle Komponenten für sich genommen einzeln einwandfrei und erwartungsgemäß.

So habe ich die drei Komponenten softwaremäßig auf fhem Ebene verbunden nachdem Konstrukte mit notifys und structure immer zum schwingen (Lichtorgel) neigten.
Grundidee ist folgende:
Es gibt drei Zustände:
1. Alle sind on
2. Alle sind off
3. Einer wird betätigt und soll damit den Zustand der Beleuchtung und damit aller Devices toggeln

Man nehme einen Dummy der den nächsten Zustand darstellt, also on wenn alle drei Schalter off sind, oder off wenn alle drei Schalter on sind.
Man nehme ein DOIF mit
cmd_1: wenn alle Devices = off, dann Next_Aktion on
cmd_2: wenn alle Devices = on, dann Next_Aktion off
cmd_3: alle anderen ungleichen Zustände führen zum schalten der beteiligten Devices auf den Wert des Dummy Next_Aktion

####################################################################################################################################################
# - Realisierung der Wechselschaltung Licht Dachzimmer Ost mit einem DOIF in der alle beteiligten Devices eingebunden werden
# - Erstellen eines Dummy der den nächsten Zustand repräsentiert für DOIF cmd_3

define Licht_Dz_Ost_Next_Aktion dummy
attr Licht_Dz_Ost_Next_Aktion setList state:on,off
attr Licht_Dz_Ost_Next_Aktion webCmd on:off

define Wechselschaltung_Licht_Dz_Ost DOIF ##1\
(([MQTT2_DVES_974944] eq "on") and ([MQTT2_DVES_96ED0F_CH2] eq "on") and ([Sonoff03] eq "ON")) \
(set Licht_Dz_Ost_Next_Aktion off)\
DOELSEIF\
##2\
(([MQTT2_DVES_974944] eq "off") and ([MQTT2_DVES_96ED0F_CH2] eq "off") and ([Sonoff03] eq "OFF"))  \
(set Licht_Dz_Ost_Next_Aktion on)\
DOELSE\
##3\
({fhem("set Sonoff03,MQTT2_DVES_974944,MQTT2_DVES_96ED0F_CH2 ".ReadingsVal("Licht_Dz_Ost_Next_Aktion","state","off"))})\

attr Wechselschaltung_Licht_Dz_Ost userattr room_map structexclude
attr Wechselschaltung_Licht_Dz_Ost alias Licht Dachzimmer Ost
attr Wechselschaltung_Licht_Dz_Ost devStateIcon cmd_1:FS20.on:cmd_3 cmd_2:FS20.off:cmd_3 cmd_3:light_toggle

Das funktioniert soweit auch mit folgendem Problem welches ich mir nicht erklären kann:
Nach einem restart von fhem fehlt für ca. 10 min der Status des Sonoff Basic(Sonoff03). Deshalb bleibt mein DOIF richtigerweise im cmd_3 hängen.
Wie kann ich das abfangen? Im Zweifelsfall "off" Kommandos senden? Habe ich nicht hingekriegt.
Warum ist der Sonoff Basic 10 min ohne Status, die beiden Sonoff T1 aber nicht? Woran liegt das? Haben gleiche Software.
Zwar kann ich den Sonoff Basic manuell ansprechen und dann in einen definierten Zustand bringen, aber eben nur manuell.....
Mit Watchdog auf den Sonoff Basic komme ich der Sache nicht auf die Spur, ist ja kein Status da....  Wie müßte ich einen Watchdog programmiern, der auf DOIF cmd_3 hört und nach 10s alle Devices auf off setzt?
Weiß einer Hilfe?

Danke schon mal



Beta-User

Welcher TYPE ist denn "Sonoff03"?

Und spricht was dagegen, bei jeder Zustandsänderung bei einem der drei beteiligten Input-Devices schlicht ein toggle auf den T1 auszuführen? Dann würde ich das mit einem schlichten notify auf die drei Input-Devices lösen und in FHEMWEB dann nur das eine (Ziel-)Device darstellen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mr.1000V

Der Sonoff03 ist ein Sonoff Basic
siehe hier:
##########################################################################################################################
# - Sonoff Basic mit herausgeführtem Drähten GPI0 und GND um damit auf
# - das angeschlossene Eltako Relais, welches früher die Lampen einschaltete
# - wird in der Configuration des Moduls bei als Switch1 (09) configuriert
# - dann im der Cosole des Devices den Befehl switchmode 0 absetzen
# - der Sonoff03 wird als Device in die Wechselschaltung für Licht Dachzimmer Ost eingebunden

define Sonoff03 MQTT2_DEVICE DVES_948D56
attr Sonoff03 IODev MQTT2_FHEM_Server
attr Sonoff03 devStateIcon ON:FS20.on OFF:FS20.off
attr Sonoff03 model A_01_tasmota_basic
attr Sonoff03 readingList tele/Sonoff03/LWT:.* LWT\
  tele/Sonoff03/STATE:.* { json2nameValue($EVENT) }\
  tele/Sonoff03/SENSOR:.* { json2nameValue($EVENT) }\
  tele/Sonoff03/INFO.:.* { json2nameValue($EVENT) }\
  stat/Sonoff03/RESULT:.* { json2nameValue($EVENT) }\
DVES_948D56:cmnd/Sonoff03/POWER:.* POWER\
DVES_948D56:stat/Sonoff03/POWER:.* POWER\
DVES_948D56:tele/Sonoff03/UPTIME:.* { json2nameValue($EVENT) }\
DVES_948D56:stat/Sonoff03/UPGRADE:.* UPGRADE
attr Sonoff03 room MQTT2
attr Sonoff03 setList off:noArg    cmnd/Sonoff03/POWER 0\
  on:noArg     cmnd/Sonoff03/POWER 1\
  toggle:noArg cmnd/Sonoff03/POWER 2
attr Sonoff03 stateFormat POWER

Danke für den Denkansatz mit dem notify und toggle ...
Ich probiere es aus.

Beta-User

...den würde ich ggf. auch mit dem template mal auf Kleinschreibung umstellen...

Dann noch:
- Zukünftig bitte mit code-Tags arbeiten (#-Button oben)
- Direktes Editieren der cfg. ist suboptimal, gibt andere Methoden, Geräte direkt in FHEMWEB zu editieren usw.. Bitte dazu mal informieren. Für Kommentare gibt es das "comment"-Attribut.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mr.1000V

Ja, ich weiss....  :P mittlerweile editiere ich nicht mehr in der .cfg, nehme den def Editor. und auch das attr comment, Danke.

wie meinst du das mit template auf Kleinschreibung umstellen?

Dein Lösungsvorschlag mit notify und toggle...
Wenn man an T2 den Zustand ändert und per notify an T1 gibt, ändert der damit ja auch seinen Zustand, was wiederum das notify merkt und einen neuen toggle Befehl an T1 (sich selbst) sendet. Ich fürchte, die Sache beginnt zu schwingen.... Außerdem leuchten die Sonoff Touch (wie eine Kontrolllampe) wenn sie eingeschaltet sind, also müßte man nicht nur T1, an dem die Lampe angeschlossen ist, toggeln, sondern auch T2 damit der richtige Zustand der Beleuchtung angezeigt wird. Das wird wiederum zum toggeln von T1 führen.....

Deshalb war ich auf die zwei stabilen Zustände on und off, sowie den "toggle" Zustand als cmd_3 in meinem DOIF gekommen.

Beta-User

Zitat von: Mr.1000V am 26 März 2019, 16:23:09
wie meinst du das mit template auf Kleinschreibung umstellen?
Fast alle mit attrTemplate verfügbaren templates für tasmota senden ein paar Konfigurationsbefehle an die ESP's. Deswegen ist der state von dem zwei-Kanaligen jeweils "on" oder "off" (da hattest du das template genommen, jedenfalls deutet auch die Namensgebung darauf hin ;) .

ZitatDein Lösungsvorschlag mit notify und toggle...
Ah ok, ich kenne die hardware nicht und dachte, das wäre egal...
Es müßte trotzdem mit einem simplen notify gehen, ggf. dann erweitert mit einem Filter, der die Devices aus dem set ... $EVENT rausnimmt, die schon den richtigen Zustand haben. Dann aber nicht toggeln, sondern on bzw. off schalten. (setzt aber voraus, dass die Schreibweise des Befehls und Events einheitlich ist und auch so verstanden wird).
https://fhem.de/commandref_DE.html#devspec
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mr.1000V

Ich habe dem Sonoff03 jetzt ein anderes attrTemplate gegeben. Vorher war es A_01_tasmota_basic, jetzt ist es A_01z_tasmota_set_lowercase_texts_and_state1
Dann noch mein DOIF angepasst auf die Kleinschreibung und siehe da....es geht immer noch, sogar besser!!!
Denn jetzt ist auch nach einem Restart von fhem der State von Sonoff03 sofort da und damit funktioniert mein DOIF tadellos. Das hebt den WAF gewaltig  ;)
define Licht_Dz_Ost_Next_Aktion dummy
attr Licht_Dz_Ost_Next_Aktion setList state:on,off
attr Licht_Dz_Ost_Next_Aktion webCmd on:off

define Wechselschaltung_Licht_Dz_Ost DOIF ##1\
(([MQTT2_DVES_974944] eq "on") and ([MQTT2_DVES_96ED0F_CH2] eq "on") and ([Sonoff03] eq "on")) \
(set Licht_Dz_Ost_Next_Aktion off)\
DOELSEIF\
##2\
(([MQTT2_DVES_974944] eq "off") and ([MQTT2_DVES_96ED0F_CH2] eq "off") and ([Sonoff03] eq "off"))  \
(set Licht_Dz_Ost_Next_Aktion on)\
DOELSE\
##3\
({fhem("set Sonoff03,MQTT2_DVES_974944,MQTT2_DVES_96ED0F_CH2 ".ReadingsVal("Licht_Dz_Ost_Next_Aktion","state","off"))})\

attr Wechselschaltung_Licht_Dz_Ost userattr room_map structexclude
attr Wechselschaltung_Licht_Dz_Ost alias Licht Dachzimmer Ost
attr Wechselschaltung_Licht_Dz_Ost devStateIcon cmd_1:FS20.on:cmd_3 cmd_2:FS20.off:cmd_3 cmd_3:light_toggle

VIELEN DANK für den entscheidenden Hinweis auf das andere template

Dein Vorschlag mit notify und Filter werde ich bei der nächsten Wechselschaltung ausprobieren, habe mich bisher noch nicht mit Filter beschäftigt. Sieht aber gut aus.
Ich bin ein bißchen ein Fan von DOIF, weil man damit fast alles sehr elegant und übersichtlich lösen kann.

Beta-User

Schön, dass es geklappt hat.

Mach dann bitte ein [gelöst] in den Titel des ersten Beitrags.

Das template hattest du vermutlich vor einiger Zeit angewendet, da haben wir einiges im Lauf der zeit noch geändert.

Und was dieses universelle Modul angeht, bin ich froh, dass ich das nicht mehr in der config habe. Da bin ich zu doof für, ich kapiere das einfach nicht mit den ganzen Attributen... Geht bequem auch ohne :P .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors