mqtt2.template: bugs, Fragen, Anregungen

Begonnen von Beta-User, 15 Dezember 2018, 11:44:43

Vorheriges Thema - Nächstes Thema

TomLee

Wie es sich liest müsstest in der Payload bei den Schlüsseln einfach nur ein "_rgb" anhängen?

moskito

Hier mal mein Device, kann nicht ausschließen evtl. irgendwo noch mal etwas händisch angepasst zu haben:

define MQTT2_zigbee_led_flur MQTT2_DEVICE zigbee_led_flur
attr MQTT2_zigbee_led_flur alias LED Flur
attr MQTT2_zigbee_led_flur cmdIcon on:general_an off:general_aus
attr MQTT2_zigbee_led_flur devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_led_flur devicetopic zigbee2mqtt/led_flur
attr MQTT2_zigbee_led_flur event-on-change-reading .*
attr MQTT2_zigbee_led_flur group Licht
attr MQTT2_zigbee_led_flur jsonMap color_temp:ct
attr MQTT2_zigbee_led_flur licht se.alle.lichter
attr MQTT2_zigbee_led_flur model zigbee2mqtt_light_rgbw_hex
attr MQTT2_zigbee_led_flur readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state_rgb}=lc($ret->{state_rgb}) if defined $ret->{state_rgb};; }\
zigbee2mqtt/led_flur/availability:.* { json2nameValue($EVENT, 'availability_', $JSONMAP) }\
zigbee2mqtt/led_flur/rgb:.* { json2nameValue($EVENT, 'rgb_', $JSONMAP) }\
zigbee2mqtt/led_flur/white:.* { json2nameValue($EVENT, 'white_', $JSONMAP) }
attr MQTT2_zigbee_led_flur room 13_Flur,MQTT2_DEVICE
attr MQTT2_zigbee_led_flur setList on:noArg $DEVICETOPIC/set {"state_rgb":"ON"}\
  off:noArg $DEVICETOPIC/set {"state_rgb":"OFF"}\
  warm:noArg $DEVICETOPIC/set {"brightness_rgb": 200 , "color_temp_rgb": 360}\
  white:noArg $DEVICETOPIC/set {"brightness_rgb": 254, "color_temp_rgb": 250}\
  blue:noArg $DEVICETOPIC/set {"color":{"hex":"#0000FF"}}\
  ct:colorpicker,CT,250,1,454 $DEVICETOPIC/set {"color_temp_rgb":"$EVTPART1"}\
  brightness:colorpicker,BRI,0,5,255 $DEVICETOPIC/set {"state_rgb":"on","$EVTPART0":"$EVTPART1"}\
  hex:colorpicker,HEX,0,15,255 $DEVICETOPIC/set {"color":{"$EVTPART0":"#$EVTPART1"}}
attr MQTT2_zigbee_led_flur userReadings hex:color_y.* {Color::xyY2hex(ReadingsVal($name,'color_x',0),ReadingsVal($name,'color_y',0),ReadingsVal($name,'brightness',254))},\
attr MQTT2_zigbee_led_flur webCmd on:off:brightness:ct:warm:white:hex


Gruß
Danny
FHEM auf Intel NUC/Proxmox & Debian 12 + HM-CFG-USB + zigbee2mqtt + Zwave + Enocean

fsyy

Hallo,

das Aqara W100 wird nun von zigbee2mqtt unterstützt.

https://github.com/Koenkk/zigbee2mqtt/issues/27262

Wie kann ich hierbei helfen? Ich habe das Gerät und es ist in zigbee2mqtt angelernt. Wenn ich davon Infos posten soll, bitte bescheid geben.

Herzlichen Dank.

McElch

Hallo, ich habe eine Frage zu einem meiner mqtt2_devices. Es ist ein Fingerbot, der den Türöffner der Haussprechanlage bedient. Das hat auch lange geklappt. Allerdings bin ich gerade dabei, alle meine Zigbee-Geräte von deConz auf zigbee2mqtt umzustellen.

Das Gerät hat sich nach dem neuen Pairing wie folgt angelegt:

define zigbee_Fingerbot01 MQTT2_DEVICE zigbee_Fingerbot01
attr zigbee_Fingerbot01 readingList zigbee2mqtt/Fingerbot01:.* { json2nameValue($EVENT) }
attr zigbee_Fingerbot01 room MQTT2_DEVICE
#   CFGFN     
#   CID        zigbee_Fingerbot01
#   DEF        zigbee_Fingerbot01
#   FUUID      6947d638-f33f-e7df-b244-d35c974785c0c02b
#   IODev      mqtt2server
#   LASTInputDev mqtt2server
#   MSGCNT     50
#   NAME       zigbee_Fingerbot01
#   NR         895
#   STATE      OFF
#   TYPE       MQTT2_DEVICE
#   eventCount 52
#   mqtt2server_CONN mqtt2server_192.168.70.178_58024
#   mqtt2server_MSGCNT 50
#   mqtt2server_TIME 2025-12-21 12:38:27
#   READINGS:
#     2025-12-21 12:12:56   IODev           mqtt2server
#     2025-12-21 12:12:56   associatedWith  mqttjs_dee908bf
#     2025-12-21 12:38:27   battery         100
#     2025-12-21 12:38:27   delay           3
#     2025-12-21 12:38:27   linkquality     18
#     2025-12-21 12:38:27   lower           85
#     2025-12-21 12:38:27   mode            click
#     2025-12-21 12:38:27   program_0       255
#     2025-12-21 12:38:27   program_1       255
#     2025-12-21 12:38:27   program_2       255
#     2025-12-21 12:38:27   program_3       0
#     2025-12-21 12:38:27   program_4       85
#     2025-12-21 12:38:27   program_5       0
#     2025-12-21 12:38:27   program_6       1
#     2025-12-21 12:38:27   program_7       0
#     2025-12-21 12:38:27   program_8       0
#     2025-12-21 12:38:27   program_9       5
#     2025-12-21 12:38:27   reverse         ON
#     2025-12-21 12:38:27   state           OFF
#     2025-12-21 12:38:27   touch           ON
#     2025-12-21 12:38:27   upper           0
#
setstate zigbee_Fingerbot01 OFF
setstate zigbee_Fingerbot01 2025-12-21 12:12:56 IODev mqtt2server
setstate zigbee_Fingerbot01 2025-12-21 12:12:56 associatedWith mqttjs_dee908bf
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 battery 100
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 delay 3
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 linkquality 18
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 lower 85
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 mode click
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_0 255
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_1 255
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_2 255
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_3 0
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_4 85
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_5 0
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_6 1
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_7 0
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_8 0
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 program_9 5
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 reverse ON
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 state OFF
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 touch ON
setstate zigbee_Fingerbot01 2025-12-21 12:38:27 upper 0


Nur schalten lässt sich nichts. Ich habe auch kein passendes attrTemplate gefunden (habe erfolglos zigbee2mqtt_light_switch und zigbee2mqtt_wireless_button ausprobiert).

Das einzige, was er können soll, ist den Türöffner ein paar Sekunden zu drücken.

Von zigbee2mqtt wird der Fingerbot zu 100% unterstützt. Ich weiss nur nicht, wie ich FHEM dazu bringe, ihn zu steuern.

Unter deConz hat es funktioniert, da ist er wie folgt angelegt worden:

define deConz_HUEDevice12 HUEDevice 12  IODev=deConz
attr deConz_HUEDevice12 IODev deConz
attr deConz_HUEDevice12 alias Haustür
attr deConz_HUEDevice12 color-icons 2
attr deConz_HUEDevice12 devStateIcon .*:smartlock_unlocked@green
attr deConz_HUEDevice12 group HUEDevice
attr deConz_HUEDevice12 icon secur_locked
attr deConz_HUEDevice12 model TS0001
attr deConz_HUEDevice12 room HUEDevice,Schlösser
attr deConz_HUEDevice12 subType switch
attr deConz_HUEDevice12 webCmd toggle
#   DEF        12  IODev=deConz
#   FUUID      677d9626-f33f-07a1-a09c-b7a25fa32e896201
#   FVERSION   31_HUEDevice.pm:0.290140/2024-07-06
#   ID         12
#   INTERVAL  
#   IODev      deConz
#   NAME       deConz_HUEDevice12
#   NR         529
#   STATE      unreachable
#   TYPE       HUEDevice
#   desired    0
#   eventCount 30174
#   has_events 1
#   lastannounced 2025-11-15T12:23:08Z
#   manufacturername _TZ3210_j4pdtz9v
#   modelid    TS0001
#   name       On/Off output 12
#   swversion  1.1.3
#   type       On/Off output
#   uniqueid   a4:c1:38:41:9b:74:1f:5a-01
#   READINGS:
#     2025-11-30 15:07:23   IODev           deConz
#     2025-12-21 12:53:17   lastseen        2025-12-21T11:01Z
#     2025-12-20 15:12:22   onoff           0
#     2025-12-20 15:12:22   pct             0
#     2025-12-21 12:07:05   reachable       0
#     2025-12-21 12:07:05   state           unreachable
#   helper:
#     alert     
#     battery    -1
#     bri        -1
#     colormode 
#     ct         -1
#     devtype   
#     dynamics_status
#     effect    
#     hue        -1
#     lastseen  
#     mode      
#     on         0
#     pct        0
#     reachable  0
#     rgb       
#     sat        -1
#     update_timeout 1
#     v2effect  
#     xy        
#     capabilities:
#     json:
#       etag       13a9585ac21bbe9163288cb8183f3eac
#       lastannounced 2025-11-15T12:23:08Z
#       lastseen   2025-12-21T11:01Z
#       manufacturername _TZ3210_j4pdtz9v
#       modelid    TS0001
#       name       On/Off output 12
#       nwkaddress 0x897A
#       swversion  1.1.3
#       type       On/Off output
#       uniqueid   a4:c1:38:41:9b:74:1f:5a-01
#       capabilities:
#       config:
#         groups:
#           11
#           10
#       state:
#
setstate deConz_HUEDevice12 unreachable
setstate deConz_HUEDevice12 2025-11-30 15:07:23 IODev deConz
setstate deConz_HUEDevice12 2025-12-21 12:53:17 lastseen 2025-12-21T11:01Z
setstate deConz_HUEDevice12 2025-12-20 15:12:22 onoff 0
setstate deConz_HUEDevice12 2025-12-20 15:12:22 pct 0
setstate deConz_HUEDevice12 2025-12-21 12:07:05 reachable 0
setstate deConz_HUEDevice12 2025-12-21 12:07:05 state unreachable


Könnt ihr helfen? Vielen Dank im Voraus! :)

Beta-User

Kannst du den Link zum Modell auf den zigbee2mqtt-Seiten raussuchen? Da sollte stehen, wie die Json aussehen müssen.
Server: HP-elitedesk@Debian 13, 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

moskito

Du müsstest das Device um das Attribut "setList" erweitern. Mal so aus der Hüfte ohne Gewähr...

setList:
on:noArg zigbee2mqtt/Fingerbot01/set {"state": "ON"}

Ich habe mal dieses Modell als Vorlage genommen:
https://www.zigbee2mqtt.io/devices/TS0001_fingerbot.html

Gruß
Danny
FHEM auf Intel NUC/Proxmox & Debian 12 + HM-CFG-USB + zigbee2mqtt + Zwave + Enocean

McElch

Ja, genau das ist die Seite auf zigbee2mqqt:

https://www.zigbee2mqtt.io/devices/TS0001_fingerbot_1.html

Das mit dem setList hat auf Anhieb geklappt, ich kann jetzt set zigbee_Fingerbot01 on senden, dann drückt er den Knopf, und lässt ihn auch nach der in zigbee2mqtt eingestellten sustain time wieder los!

Cool, vielen Dank!


drhirn

#592
Ich hätte da ein Split-Template für den Shelly Power Strip 4 Gen4. Ich hab das auf Basis MQTT Control mit generischen Status Updates gemacht, weil ich über RPC nicht alles rausbekommen habe, was ich gerne gehabt hätte. Insbesondere nicht die IP. Und dachte mir, wenn ich eh schon generische Status Updates aktivieren muss, kann ich gleich auf RPC verzichten. Gibt weniger MQTT-Traffic.

Gebe zu, ich hab das von anderen Devices zusammenkopiert. Und es gibt die ein oder andere Code-Zeile, bei der ich nicht genau weiß, was da passiert. Dürfte ich euch daher bitten, mal drüber zu sehen und Fehler oder Verbesserungsvorschläge zu melden?

Besten Dank!

name:shellyPowerStripG4_split_cmd
filter:TYPE=MQTT2_DEVICE
desc:<p>Shelly Power Strip Gen4 using original firmware<br>NOTE: This is the split template. It creates four different devices.</p><p>MQTT settings at the device:<ul><li><i>Enable 'MQTT Control'</i> enabled</li><li><i>Enable RPC over MQTT</i> disabled</li><li><i>RPC status notifications over MQTT</i> disabled</li><li><i>Generic status update over MQTT</i> enabled</ul></p>
par:DEV_TPC;Shelly name in the topic;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m<(shellies/[^/]+|shelly(plus|pro4pm|1pmmini-)[^/:_]{4,}+)> ? $1 : undef }
order:A_19
par:ICON;ICON as set, defaults to message_socket;{ AttrVal('DEVICE','icon','message_socket') }
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE devicetopic DEV_TPC
attr DEVICE icon ICON
attr DEVICE devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot': '10px-kreis-gruen'; $onl = FW_makeImage($onl); my $light = FW_makeImage(ReadingsVal($name,'state','off')); my $cons = ReadingsNum($name,'power',0); my $total = round(ReadingsNum($name,'energy_total',0)/1000,2); my $ip = ReadingsVal($name,'wifi_sta_ip','none'); qq(<a href="http://$ip" target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a><div>Verbrauch: $cons W / Total: $total kwh</div>)}
attr DEVICE readingList $\DEVICETOPIC/online:.* online\
  $\DEVICETOPIC:.* {}\
  $\DEVICETOPIC/announce:.* { json2nameValue($EVENT, '', $JSONMAP) }\
  $\DEVICETOPIC/command:.* {}\
  $\DEVICETOPIC/command/switch_0:.* {}\
  $\DEVICETOPIC/status:.* {}\
  $\DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }\
  $\DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }\
  $\DEVICETOPIC/status/switch_0:.* { $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT,'',$JSONMAP) }\
  $\DEVICETOPIC/status/ble:.* {}\
  $\DEVICETOPIC/status/cloud:.* {}\
  $\DEVICETOPIC/status/knx:.* {}\
  $\DEVICETOPIC/status/powerstrip_ui:.* {}\
  $\DEVICETOPIC/status/wifi:.* { json2nameValue($EVENT, 'wifi_', $JSONMAP) }\
  $\DEVICETOPIC/status/ws:.* {}\
  $\DEVICETOPIC/status/zigbee:.* {}
attr DEVICE setList toggle:noArg $\DEVICETOPIC/command/switch:0 toggle\
  on:noArg $\DEVICETOPIC/command/switch:0 on\
  off:noArg $\DEVICETOPIC/command/switch:0 off\
  on-for-timer $\DEVICETOPIC/command/switch:0 on,$EVTPART1\
  off-for-timer $\DEVICETOPIC/command/switch:0 off,$EVTPART1\
  x_statusUpdate:noArg $\DEVICETOPIC/command status_update\
  x_getDeviceInfo:noArg $\DEVICETOPIC/command announce\
  x_check_update:noArg $\DEVICETOPIC/command ota_update_check\
  x_update:noArg $\DEVICETOPIC/command ota_update_to_stable
attr DEVICE jsonMap output:state aenergy_total:energy_total apower:power freq:frequency
attr DEVICE setStateList on off toggle on-for-timer off-for-timer
attr DEVICE webCmd :
deleteattr DEVICE getList
set DEVICE x_statusUpdate
set DEVICE x_getDeviceInfo
loop:#:1:2:3
copy DEVICE DEVICE_CH#
deleteattr DEVICE_CH# stateFormat
deleteattr DEVICE_CH# devStateIcon
attr DEVICE_CH# devStateIcon {my $light = FW_makeImage(ReadingsVal($name,'state','off')); my $cons = ReadingsNum($name,'power',0); my $total = round(ReadingsNum($name,'energy_total',0)/1000,2); qq(<a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a><div>Verbrauch: $cons W / Total: $total kwh</div>)}
attr DEVICE_CH# readingList\
  $\DEVICETOPIC/status/switch_#:.* { $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT,'',$JSONMAP) }\
  $\DEVICETOPIC/command/switch_#:.* {}
attr DEVICE_CH# setList toggle:noArg $\DEVICETOPIC/command/switch:# toggle\
  on:noArg $\DEVICETOPIC/command/switch:# on\
  off:noArg $\DEVICETOPIC/command/switch:# off\
  on-for-timer $\DEVICETOPIC/command/switch:# on,$EVTPART1\
  off-for-timer $\DEVICETOPIC/command/switch:# off,$EVTPART1
loop:END
rename DEVICE_CH3 DEVICE_CH4
rename DEVICE_CH2 DEVICE_CH3
rename DEVICE_CH1 DEVICE_CH2
loop:#:2:3:4
defmod DEVICE_CH# MQTT2_\DEVICE
attr DEVICE_CH# devicetopic DEV_TPC
loop:END
set DEVICE attrTemplate set_associatedWith \CHANNELS=4
setreading DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4 attrTemplateVersion 20230104
attr DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4 model powerstripg4

Beta-User

Zitat von: drhirn am 22 März 2026, 13:55:25es gibt die ein oder andere Code-Zeile, bei der ich nicht genau weiß, was da passiert. Dürfte ich euch daher bitten, mal drüber zu sehen und Fehler oder Verbesserungsvorschläge zu melden?
Sorry, dass es etwas gedauert hat, bis ich mir das wenigstens im Groben mal zu Gemüte führen konnte.

Was ich anders machen würde:
- das attrTemplate "set_associatedWith" habe ich neulich mal so geändert, dass per "\MAKECOPIES=1" gleich den defmod mit ausführt.
- bleibt bei copy bzw. MAKECOPIES nicht devicetopic erhalten?
- devStateIcon braucht man nicht zu löschen, wenn man es hinterher gleich wieder (anders) setzt.
- Die "Pseudo-Perl" readingList-Zeilen kann man m.E. zusammenfassen, der Spur nach "(ble|cloud|whatever):.* {}".

Funktional kann ich wenig sagen, vermute aber, dass man pro Kanal noch jsonMap anders setzen sollte.

Konkrete Fragen zur Synax beantworte ich gerne hier, ansonsten wäre es vermutlich (auch für's wiederfinden) sinnvoll, einen eigenen Thread dafür aufzumachen.

PS: Endlich jemand, der sich zielführend mit der "normalen" Syntax für die Shelly auseinandersetzt! TOP!!!
Server: HP-elitedesk@Debian 13, 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

drhirn

Zitat von: Beta-User am 27 März 2026, 07:26:32ansonsten wäre es vermutlich (auch für's wiederfinden) sinnvoll, einen eigenen Thread dafür aufzumachen

Seh ich auch so: https://forum.fhem.de/index.php?topic=144291.0