MQTT2_DEVICE und Espurna

Begonnen von Beta-User, 03 Februar 2020, 12:04:42

Vorheriges Thema - Nächstes Thema

joelinux

Zitat von: Beta-User am 03 Februar 2020, 16:14:18
Hmm, vielleicht hat sonst jemand eine Idee, wie man das umkonfiguriert, wie gesagt, ich werde aus der Doku auch nicht schlau, am ehesten könnte es noch sein, dass die Konfiguration über "sonoffswitchS203/action/set" beeinflußt werden kann..?

Ich habe meine ESPURNA 4-fach Steckdose über eine Telnet Verbindung angesprochen und mit den Terminal Kommandos

set relayPayloadOff off
set relayPayloadOn on
set relayPayloadToggle toggle
reload

umkonfigurieren können. Danach liefert MQTT als Status für die Relais anstatt 0,1 die Werte on oder off zurück.
Was relayPayloadToggle bewirkt habe ich noch nicht erkannt.

Konfiguration soll auch mit einem http upload zum internen Webserver der Steckdose möglich sein.
Dazu ist die gewünschte Konfiguration als JSON String zu formatieren


{
"app": "ESPURNA",
"relayPayloadOff": "off",
"relayPayloadOn": "on",
"relayPayloadToggle": "toggle"
}

und kann dann laut Espurna Wiki mit curl hochgeladen werden.

$ curl -F "file=@my-settings.json" -u admin:eigenes_passwort http://192.168.xxx.yyy/config

Ob die Konfiguration auch über MQTT möglich ist habe ich noch nicht herausgefunden.
FHem on RPi2 Buster, Duofern Rollladen, ZWave Rolllade + Steckdosen, ZigBee (Philips, Tradfri), Tasmota (diverse Steckdosen, GU10 und E14 LSC Leds von Action, Sonoff RF Bridge), InterTechno Dimmer Steckdose ITLR-200

Beta-User

Danke mal für diese Zwischeninfo; damit ist zumindest klar: Es geht, und man kann irgendwelche "Umetikettierungen" vermeiden :) .

Dann könnte man versuchen, den JSON mal via MQTT zu senden. Hal mal jemand ein list (ausnahmsweise bitte _kein_ RAW), in dem man die subscriptions sieht (müßte iVm. MQTT2_SERVER zu sehen sein) - da sollte der Zweig auftauchen, wenn es überhaupt geht... bzw. kann genau diesen JSON mal durchtesten?

(den curl-Befehl sollte man in den attrTemplate wohl eher nicht verwenden, sonst müßte ich die Zugangsdaten abfragen...). Evtl. kann es ja zwei attrTemplate geben. Jemand müßte dann halt erklären, wie man von "a) nach b)" kommt...)

Da "toggle" in der Regel nicht versendet wird, sondern nur das Ergebnis, finde ich es logisch, dass das "toggle" via MQTT nicht auftaucht, sondern nur die "on" & "off".
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

joelinux

#17
Hallo Beta-User,

in einer Debug Sitzung des ESPURNA Web Interfaces habe ich entdeckt, daß die von ESPURNA vorgenommenen MQTT subscriptions sichtbar werden. Die Informationen passen mit einen verbose 5 log des MQTT2 Servers zusammen.

Das Root Topic meiner 4-fach Steckerleiste ist Espurna-Arbeit.

[288849] [MQTT] Will topic: Espurna-Arbeit/status
[288891] [MQTT] Connected!
[288892] [MQTT] Unsubscribing to # (PID 1)
[288892] [MQTT] Subscribing to Espurna-Arbeit/relay/+/set (PID 2)
[288892] [MQTT] Subscribing to Espurna-Arbeit/pulse/+/set (PID 3)
[288895] [MQTT] Subscribing to Espurna-Arbeit/led/+/set (PID 4)
[288895] [MQTT] Subscribing to Espurna-Arbeit/action/set (PID 5)
[
 


Das action/set Topic nimmt nur die Payload reboot an.

Daraus entnehme ich, das die Konfiguration der MQTT Antworten nicht über MQTT Mittel geändert werden können.
FHem on RPi2 Buster, Duofern Rollladen, ZWave Rolllade + Steckdosen, ZigBee (Philips, Tradfri), Tasmota (diverse Steckdosen, GU10 und E14 LSC Leds von Action, Sonoff RF Bridge), InterTechno Dimmer Steckdose ITLR-200

joelinux

#18
Die aus zuvor erwähnter Debug Sitzung gewonnen Erkennnisse sind in eine neue Konfiguration eines
unified Espurna MQTT2 Gerätes eingeflossen.

Darf ich die hier mal zeigen?

Die Espurna Firmware ist dabei im Auslieferungszustand. Insbesondere ist in den MQTT Einstellungen
die Verwendung von JSON ausgeschaltet. (Key: mqttUseJson => "0"). Mit eingeschalteten JSON ändern
sich die MQTT Rückmeldungen und verlangen eine andere readingList. Weiterhin sind die Parameter (Keys)
relayPayloadOff, relayPayloadOn und relayPayloadToggle nicht gesetzt.

Ist sicher nicht perfekt. Meine Tasmota Mehrfach Steckerleisten sehen ähnlich aus.
Allerdings überlege ich, ob 'split' Geräte insgesamt besser zu handhaben sind.


define MQTT2_ESPURNA_556530 MQTT2_DEVICE ESPURNA_556530
attr MQTT2_ESPURNA_556530 DbLogExclude .*
attr MQTT2_ESPURNA_556530 IODev MQTT2_FHEM_Server
attr MQTT2_ESPURNA_556530 devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot 1.on:on:POWER1+off 1.off:off:POWER1+on 2.on:on:POWER2+off 2.off:off:POWER2+on 3.on:on:POWER3+off 3.off:off:POWER3+on 4.on:on:POWER4+off 4.off:off:POWER4+on 5.on:on:POWER5+off 5.off:off:POWER5+on
attr MQTT2_ESPURNA_556530 event-on-change-reading .*
attr MQTT2_ESPURNA_556530 genericDeviceType switch
attr MQTT2_ESPURNA_556530 model ESPurna_single_relay
attr MQTT2_ESPURNA_556530 readingList Espurna-Arbeit/relay/0:.* { $EVENT ? {"POWER1"=>"on"} : {"POWER1"=>"off"} }\
Espurna-Arbeit/relay/1:.* { $EVENT ? {"POWER2"=>"on"} : {"POWER2"=>"off"} }\
Espurna-Arbeit/relay/2:.* { $EVENT ? {"POWER3"=>"on"} : {"POWER3"=>"off"} }\
Espurna-Arbeit/relay/3:.* { $EVENT ? {"POWER4"=>"on"} : {"POWER4"=>"off"} }\
Espurna-Arbeit/relay/4:.* { $EVENT ? {"POWER5"=>"on"} : {"POWER5"=>"off"} }\
Espurna-Arbeit/status:.*  { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  Espurna-Arbeit/app:.* app\
  Espurna-Arbeit/version:.* version\
  Espurna-Arbeit/board:.* board\
  Espurna-Arbeit/host:.* host\
  Espurna-Arbeit/ssid:.* ssid\
  Espurna-Arbeit/ip:.* ip\
  Espurna-Arbeit/mac:.* mac\
  Espurna-Arbeit/rssi:.* rssi\
  Espurna-Arbeit/uptime:.* uptime\
  Espurna-Arbeit/datetime:.* datetime\
  Espurna-Arbeit/freeheap:.* freeheap\
  Espurna-Arbeit/vcc:.* vcc\
  Espurna-Arbeit/loadavg:.* loadavg\
  Espurna-Arbeit/desc:.* desc
attr MQTT2_ESPURNA_556530 room MQTT2_DEVICE
attr MQTT2_ESPURNA_556530 setList on Espurna-Arbeit/relay/0/set 1\
off Espurna-Arbeit/relay/0/set 0\
toggle Espurna-Arbeit/relay/0/set 2\
POWER1:on,off,toggle Espurna-Arbeit/relay/0/set $EVTPART1\
POWER2:on,off,toggle Espurna-Arbeit/relay/1/set $EVTPART1\
POWER3:on,off,toggle Espurna-Arbeit/relay/2/set $EVTPART1\
POWER4:on,off,toggle Espurna-Arbeit/relay/3/set $EVTPART1\
POWER5:on,off,toggle Espurna-Arbeit/relay/4/set $EVTPART1\
Reboot:reboot Espurna-Arbeit/action/set $EVTPART1
attr MQTT2_ESPURNA_556530 setStateList on off toggle
attr MQTT2_ESPURNA_556530 stateFormat LWT\
1:POWER1\
2:POWER2\
3:POWER3\
4:POWER4\
5:POWER5\
<br>\
<a href="http://ip" target="_blank">ip</a>

setstate MQTT2_ESPURNA_556530 Online\
1:off\
2:off\
3:off\
4:off\
5:off\
<br>\
<a href="http://192.168.x.xxx" target="_blank">192.168.x.xxx</a>
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:12 LWT Online
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 POWER1 off
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 POWER2 off
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 POWER3 off
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 POWER4 off
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 POWER5 off
setstate MQTT2_ESPURNA_556530 2020-02-16 08:03:00 Reboot set reboot
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 app ESPURNA
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 board ZHILDE_EU44_W
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 datetime 2020-02-16 15:03:09
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 desc 4-fach Steckerleiste
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 freeheap 20104
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 host Espurna-Arbeit
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 ip 192.168.x.xxx
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:12 loadavg 1
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 mac xx:xx:xx:xx:xx:xx
setstate MQTT2_ESPURNA_556530 2020-02-16 08:01:15 reboot set
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 rssi -86
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 ssid Snoopy
setstate MQTT2_ESPURNA_556530 2020-02-16 07:49:52 state set_on
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:11 uptime 25208
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:12 vcc 3189
setstate MQTT2_ESPURNA_556530 2020-02-16 15:03:10 version 1.14.0
FHem on RPi2 Buster, Duofern Rollladen, ZWave Rolllade + Steckdosen, ZigBee (Philips, Tradfri), Tasmota (diverse Steckdosen, GU10 und E14 LSC Leds von Action, Sonoff RF Bridge), InterTechno Dimmer Steckdose ITLR-200

Beta-User

Klar darfst du zeigen!

Hat mir geholfen, das besser in attrTemplate-Form zu bringen:

name:ESPurna_single_relay
filter:TYPE=MQTT2_DEVICE
desc:ESPurna is a alternative firmware comparable to tasmota, see <a href="https://github.com/xoseperez/espurna/wiki">project page wiki</a>. <br>NOTE: First experimental version, to contribute see <a href="https://forum.fhem.de/index.php/topic,108058.0.html">Forum Thread</a>. Template is for use without further configuration on ESP side, so especially no JSON is sent or relayPayload-xy is set!
order:A_30
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
attr DEVICE readingList DEVNAME/relay/0:.* relay_0\
  DEVNAME/relay/0:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/app:.* app\
  DEVNAME/version:.* version\
  DEVNAME/board:.* board\
  DEVNAME/host:.* host\
  DEVNAME/ssid:.* ssid\
  DEVNAME/ip:.* ip\
  DEVNAME/mac:.* mac\
  DEVNAME/rssi:.* rssi\
  DEVNAME/uptime:.* uptime\
  DEVNAME/datetime:.* datetime\
  DEVNAME/freeheap:.* freeheap\
  DEVNAME/vcc:.* vcc\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\\
  DEVNAME/loadavg:.* loadavg
attr DEVICE setList on DEVNAME/relay/0/set 1\
  off DEVNAME/relay/0/set 0\
  toggle DEVNAME/relay/0/set 2
attr DEVICE setStateList on off toggle
attr DEVICE event-on-change-reading .*
attr DEVICE stateFormat <a href="http://ip" target="_blank">\
LWT\
</a>\
state

set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
attr DEVICE model ESPurna_single_relay

name:ESPurna_4relay_unified
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*/relay/0.*
desc:ESPurna is a alternative firmware comparable to tasmota, see <a href="https://github.com/xoseperez/espurna/wiki">project page wiki</a>. <br>NOTE: First experimental version, to contribute see <a href="https://forum.fhem.de/index.php/topic,108058.0.html">Forum Thread</a>. Template is for use without further configuration on ESP side, so especially no JSON is sent or relayPayload-xy is set!
order:A_30b
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot 0.on:on:POWER0+off 0.off:off:POWER0+on 1.on:on:POWER1+off 1.off:off:POWER1+on 2.on:on:POWER2+off 2.off:off:POWER2+on 3.on:on:POWER3+off 3.off:off:POWER3+on 4.on:on:POWER4+off 4.off:off:POWER4+on
attr DEVICE event-on-change-reading .*
attr DEVICE readingList DEVNAME/relay/0:.* { $EVENT ? {"POWER0"=>"on"} : {"POWER0"=>"off"} }\
  DEVNAME/relay/1:.* { $EVENT ? {"POWER1"=>"on"} : {"POWER1"=>"off"} }\
  DEVNAME/relay/2:.* { $EVENT ? {"POWER2"=>"on"} : {"POWER2"=>"off"} }\
  DEVNAME/relay/3:.* { $EVENT ? {"POWER3"=>"on"} : {"POWER3"=>"off"} }\
  DEVNAME/status:.*  { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/app:.* app\
  DEVNAME/version:.* version\
  DEVNAME/board:.* board\
  DEVNAME/host:.* host\
  DEVNAME/ssid:.* ssid\
  DEVNAME/ip:.* ip\
  DEVNAME/mac:.* mac\
  DEVNAME/rssi:.* rssi\
  DEVNAME/uptime:.* uptime\
  DEVNAME/datetime:.* datetime\
  DEVNAME/freeheap:.* freeheap\
  DEVNAME/vcc:.* vcc\
  DEVNAME/loadavg:.* loadavg\
  DEVNAME/desc:.* desc
attr DEVICE setList on DEVNAME/relay/0/set 1\
  off DEVNAME/relay/0/set 0\
  toggle DEVNAME/relay/0/set 2\
  POWER0:on,off,toggle DEVNAME/relay/0/set $EVTPART1\
  POWER1:on,off,toggle DEVNAME/relay/1/set $EVTPART1\
  POWER2:on,off,toggle DEVNAME/relay/2/set $EVTPART1\
  POWER3:on,off,toggle DEVNAME/relay/3/set $EVTPART1\
  Reboot:reboot DEVNAME/action/set $EVTPART1
attr DEVICE setStateList on off toggle
attr DEVICE stateFormat LWT\
0:POWER0\
1:POWER1\
2:POWER2\
3:POWER3\
<br>\
<a href="http://ip" target="_blank">ip</a>
set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
attr DEVICE model ESPurna_4relay_unified

name:ESPurna_4relay_split
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*/relay/0.*
desc:ESPurna is a alternative firmware comparable to tasmota, see <a href="https://github.com/xoseperez/espurna/wiki">project page wiki</a>. <br>NOTE: First experimental version, to contribute see <a href="https://forum.fhem.de/index.php/topic,108058.0.html">Forum Thread</a>. Template is for use without further configuration on ESP side, so especially no JSON is sent or relayPayload-xy is set!
order:A_30a
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
attr DEVICE event-on-change-reading .*
attr DEVICE setStateList on off toggle
set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
attr DEVICE model ESPurna_4relay_split
deletereading -q DEVICE (?!associatedWith).*
copy DEVICE DEVICE_CH1
copy DEVICE DEVICE_CH2
copy DEVICE DEVICE_CH3
setreading DEVICE_CH1 associatedWith DEVICE,DEVICE_CH2,DEVICE_CH3
setreading DEVICE_CH2 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH3
setreading DEVICE_CH3 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2
attr DEVICE_CH1 readingList DEVNAME/relay/1:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }
attr DEVICE_CH2 readingList DEVNAME/relay/2:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }
attr DEVICE_CH3 readingList DEVNAME/relay/3:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }
attr DEVICE readingList DEVNAME/relay/0:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/app:.* app\
  DEVNAME/version:.* version\
  DEVNAME/board:.* board\
  DEVNAME/host:.* host\
  DEVNAME/ssid:.* ssid\
  DEVNAME/ip:.* ip\
  DEVNAME/mac:.* mac\
  DEVNAME/rssi:.* rssi\
  DEVNAME/uptime:.* uptime\
  DEVNAME/datetime:.* datetime\
  DEVNAME/freeheap:.* freeheap\
  DEVNAME/vcc:.* vcc\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\\
  DEVNAME/loadavg:.* loadavg
attr DEVICE_CH1 setList on DEVNAME/relay/1/set 1\
  off DEVNAME/relay/1/set 0\
  toggle DEVNAME/relay/1/set 2
attr DEVICE_CH2 setList on DEVNAME/relay/2/set 1\
  off DEVNAME/relay/2/set 0\
  toggle DEVNAME/relay/2/set 2
attr DEVICE_CH3 setList on DEVNAME/relay/3/set 1\
  off DEVNAME/relay/3/set 0\
  toggle DEVNAME/relay/3/set 2
attr DEVICE setList on DEVNAME/relay/0/set 1\
  off DEVNAME/relay/0/set 0\
  toggle DEVNAME/relay/0/set 2\
  Reboot:reboot DEVNAME/action/set $EVTPART1
attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
attr DEVICE stateFormat <a href="http://ip" target="_blank">\
LWT\
</a>\
state
setreading DEVICE associatedWith DEVICE_CH1,DEVICE_CH2,DEVICE_CH3


Ein paar Anmerkungen:
- Das "ummappen" der Kanal-Zahlen finde ich tendenziell verwirrend; ich hatte das mal bei den Shelly's, habe dort aber dann gemerkt, dass es die user spätestens dann verwirrt, wenn "plötzlich" weitere Readings zu den Kanälen dazukommen (dort waren es Verbrauchswerte).
- Ich gehe davon aus, dass JSON per default aus ist.
- Da das Ändern der payload ziemlich tricky ist, verzichten wir eben drauf, geht ja auch anders...
- "split" ist v.a. dann besser, wenn man die Kanäle wirklich separat verwendet, weil dann z.B. die setExtensions "ootb" funktionieren. Anders sollte man das nur machen, wenn man z.B. Rollläden darüber steuert und FHEM eher die "logische Kontrolle" über alle Kanäle übernimmt (z.B. via ROLLO). (Aber hier hat Tasmota mAn. dann die Nase vorn: Da gibt es direkt in der firmware eine shutter-Einstellung, die zumindest vom Konzept her dann DIE Lösung ist).

Wäre natürlich super, wenn ihr mir Rückmeldung geben könntet, ob das funktioniert wie es soll, sonst muß ich "auf Verdacht" einchecken (ggf. einfach eine Kopie eurer Geräte zum Testen verwenden, dann sollte das nebenwirkungsfrei gehen...!)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

joelinux

Das war jetzt aber superschnell.  :)

Aktuell habe ich nur eine 4-fach Steckerleiste mit ESPurna laufen.
Nun, und da geht es schon los mit Verwirrung von Bezeichnungen. Die Steckerleiste ist mit 5 Relays bestückt. Vier davon fungieren als
Steckdosen. Das 5. Relay schaltet ein USB Netzteil mit 4 USB Anschlüssen. In anderen Darstellungen wird auch von 4 x AC+USB gesprochen.
Sorry für die Ungenauigkeit.

Ich habe daher deine Templates genommen und diese als ESPurna_4socketUSB_unified und ESPurna_4socketUSB_split nach
/opt/fhem/FHEM/lib/AttrTemplate/espurna.template abgelegt. Mit reichlich { AttrTemplate_Initialize() } und Verprobung möchte
ich diese beiden Templates zur Ansicht geben.

Motivation für das remapping der relay Kanal-Zahlen ist mein Wunsch ESPurna so ähnlich wie möglich wie Tasmota zu steuern.
Tasmota liefert für eine 4 x AC+USB Steckerleiste die Werte POWER1 bis POWER5.
POWER5 ist in der Regel das USB Netzteil (ist aber über eigene Tasmota Templates auf einen beliebigen Kanal=POWERx konfigurierbar).
ESPurna habe ich im Einsatz weil ich den Eindruck habe das ESPurna auch bei schlechter Wlan Abdeckung eine bessere Verfügbarkeit bereitstellt.
Daher ist hier nur wenig ESPurna und viel Tasmota im Einsatz.

Eine weiterer Wunsch ist die Wlan Erreichbarkeit für jeden Kanal sichtbar zu machen. Eine von Netz getrennte Steckerleiste ist so gut zu erkennen.
Daher liest mein 'split' Template in allen Kanälen das 'Last Will Testament' Topic aus.
Ebenso möchte ich recht einfach das Web Interface des Gerätes aus allen Kanälen erreichen.
Verwaltungs Informationen wie Wlan RSSI oder Versions Informationen sehe ich gerne nur im Stamm Gerät.

Hoffentlich werde ich jetzt nicht zusehr Off Topic. 
 
name:ESPurna_4socketUSB_unified
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*/relay/0.*
desc:ESPurna is a alternative firmware comparable to tasmota, see <a href="https://github.com/xoseperez/espurna/wiki">project page wiki</a>. <br>NOTE: First experimental version, to contribute see <a href="https://forum.fhem.de/index.php/topic,108058.0.html">Forum Thread</a>. Template is for use without further configuration on ESP side, so especially no JSON is sent or relayPayload-xy is set!
order:A_30b
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_outlet;{ AttrVal("DEVICE","icon","hue_filled_outlet") }
attr DEVICE icon ICON
attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot 1.on:on:POWER1+off 1.off:off:POWER1+on 2.on:on:POWER2+off 2.off:off:POWER2+on 3.on:on:POWER3+off 3.off:off:POWER3+on 4.on:on:POWER4+off 4.off:off:POWER4+on 5.on:on:POWER5+off 5.off:off:POWER5+on
attr DEVICE event-on-change-reading .*
attr DEVICE readingList DEVNAME/relay/0:.* { $EVENT ? {"POWER1"=>"on"} : {"POWER1"=>"off"} }\
  DEVNAME/relay/1:.* { $EVENT ? {"POWER2"=>"on"} : {"POWER2"=>"off"} }\
  DEVNAME/relay/2:.* { $EVENT ? {"POWER3"=>"on"} : {"POWER3"=>"off"} }\
  DEVNAME/relay/3:.* { $EVENT ? {"POWER4"=>"on"} : {"POWER4"=>"off"} }\
  DEVNAME/relay/4:.* { $EVENT ? {"POWER5"=>"on"} : {"POWER5"=>"off"} }\
  DEVNAME/status:.*  { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/app:.* app\
  DEVNAME/version:.* version\
  DEVNAME/board:.* board\
  DEVNAME/host:.* host\
  DEVNAME/ssid:.* ssid\
  DEVNAME/ip:.* ip\
  DEVNAME/mac:.* mac\
  DEVNAME/rssi:.* rssi\
  DEVNAME/uptime:.* uptime\
  DEVNAME/datetime:.* datetime\
  DEVNAME/freeheap:.* freeheap\
  DEVNAME/vcc:.* vcc\
  DEVNAME/loadavg:.* loadavg\
  DEVNAME/desc:.* desc
attr DEVICE setList on DEVNAME/relay/0/set 1\
  off DEVNAME/relay/0/set 0\
  toggle DEVNAME/relay/0/set 2\
  POWER1:on,off,toggle DEVNAME/relay/0/set $EVTPART1\
  POWER2:on,off,toggle DEVNAME/relay/1/set $EVTPART1\
  POWER3:on,off,toggle DEVNAME/relay/2/set $EVTPART1\
  POWER4:on,off,toggle DEVNAME/relay/3/set $EVTPART1\
  POWER5:on,off,toggle DEVNAME/relay/4/set $EVTPART1\
  Reboot:reboot DEVNAME/action/set $EVTPART1
attr DEVICE setStateList on off toggle
attr DEVICE stateFormat LWT\
1:POWER1\
2:POWER2\
3:POWER3\
4:POWER4\
5:POWER5\
<br>\
<a href="http://ip" target="_blank">ip</a>
set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
attr DEVICE model ESPurna_4socketUSB_unified
deletereading -q DEVICE relay_.*

name:ESPurna_4socketUSB_split
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*/relay/4.*
desc:ESPurna is a alternative firmware comparable to tasmota, see <a href="https://github.com/xoseperez/espurna/wiki">project page wiki</a>. <br>NOTE: First experimental version, to contribute see <a href="https://forum.fhem.de/index.php/topic,108058.0.html">Forum Thread</a>. <br>NOTE: Tested with 5-way multi socket ZHILDE_EU44_W. <br>NOTE: Template is for use without further configuration on ESP side, so especially no JSON is sent or relayPayload-xy is set!
order:A_90a
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_outlet;{ AttrVal("DEVICE","icon","hue_filled_outlet") }
attr DEVICE icon ICON
attr DEVICE event-on-change-reading .*
attr DEVICE setStateList on off toggle
set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
attr DEVICE model ESPurna_4socketUSB_split
attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
attr DEVICE stateFormat <a href="http://ip" target="_blank">ip\
LWT\
</a>\
state
deletereading -q DEVICE (?!associatedWith).*
copy DEVICE DEVICE_CH2
copy DEVICE DEVICE_CH3
copy DEVICE DEVICE_CH4
copy DEVICE DEVICE_USB
setreading DEVICE_CH2 associatedWith DEVICE,DEVICE_CH3,DEVICE_CH4,DEVICE_USB
setreading DEVICE_CH3 associatedWith DEVICE,DEVICE_CH2,DEVICE_CH4,DEVICE_USB
setreading DEVICE_CH4 associatedWith DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_USB
setreading DEVICE_USB associatedWith DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4
attr DEVICE_CH2 readingList DEVNAME/relay/1:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/ip:.* ip
attr DEVICE_CH3 readingList DEVNAME/relay/2:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/ip:.* ip
attr DEVICE_CH4 readingList DEVNAME/relay/3:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/ip:.* ip
attr DEVICE_USB readingList DEVNAME/relay/4:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/ip:.* ip
attr DEVICE readingList DEVNAME/relay/0:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
  DEVNAME/app:.* app\
  DEVNAME/version:.* version\
  DEVNAME/board:.* board\
  DEVNAME/host:.* host\
  DEVNAME/ssid:.* ssid\
  DEVNAME/ip:.* ip\
  DEVNAME/mac:.* mac\
  DEVNAME/rssi:.* rssi\
  DEVNAME/uptime:.* uptime\
  DEVNAME/datetime:.* datetime\
  DEVNAME/freeheap:.* freeheap\
  DEVNAME/vcc:.* vcc\
  DEVNAME/status:.* { $EVENT ? {"LWT"=>"Online"} : {"LWT"=>"Offline"} }\
  DEVNAME/loadavg:.* loadavg\
  DEVNAME/desc:.* desc
attr DEVICE_CH2 setList on DEVNAME/relay/1/set 1\
  off DEVNAME/relay/1/set 0\
  toggle DEVNAME/relay/1/set 2
attr DEVICE_CH3 setList on DEVNAME/relay/2/set 1\
  off DEVNAME/relay/2/set 0\
  toggle DEVNAME/relay/2/set 2
attr DEVICE_CH4 setList on DEVNAME/relay/3/set 1\
  off DEVNAME/relay/3/set 0\
  toggle DEVNAME/relay/3/set 2
attr DEVICE_USB setList on DEVNAME/relay/4/set 1\
  off DEVNAME/relay/4/set 0\
  toggle DEVNAME/relay/4/set 2
attr DEVICE setList on DEVNAME/relay/0/set 1\
  off DEVNAME/relay/0/set 0\
  toggle DEVNAME/relay/0/set 2\
  Reboot:reboot DEVNAME/action/set $EVTPART1
attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
attr DEVICE stateFormat <a href="http://ip" target="_blank">ip\
LWT\
</a>\
state
setreading DEVICE associatedWith DEVICE_CH2,DEVICE_CH4,DEVICE_CH4,DEVICE_USB
FHem on RPi2 Buster, Duofern Rollladen, ZWave Rolllade + Steckdosen, ZigBee (Philips, Tradfri), Tasmota (diverse Steckdosen, GU10 und E14 LSC Leds von Action, Sonoff RF Bridge), InterTechno Dimmer Steckdose ITLR-200

Beta-User

...überredet...

Zumindest für die USB-Variante dürfte das ok sein, und wir haben hier ja "ausgiebig" diskutiert, dass man das "eigentlich" nicht machen sollte - aber das "Umstiegsargument" von Tasmota ist gut - ebenso der Hinweis, dass evtl. die WLAN-Performance@ESPurna besser ist.

(Und die challenge, das mit dem LWT selbst auf stateFormat-Basis hinzubiegen, hast du ja erfolgreich angenommen ;D ).

Ich schau's nochmal durch, sieht aber (bis auf 1xorder?) erst mal gut aus. Kommt also demnächst per update :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files