mqtt2.template: bugs, Fragen, Anregungen

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

Vorheriges Thema - Nächstes Thema

rudolfkoenig

LASTInputDev ist was fuers Protokoll, damit man bei mehreren moeglichen Datenleiferenten (z.Bsp. mehrere CULs) mitkriegt, wer die Daten empfangen hat.

IODev wird bei der Kommunikation von logischen Modulen (wie FS20) zu phyischen (wie CUL) verwendet, und ich habe vor 10+ Jahren (FritzBox-Zeiten) befuerchtet, dass ein Lookup bei jedem Schreiben zu aufwendig ist. Deswegen ist IODev ein Zeiger, und alle Anzeigen (list, JsonList2, XmlList, etc) haben extra Code drin, um das nach Menschenlesbar zu konvertieren. InternalVal nicht.

TomLee

#466
Sehe heute das erste mal das die Müller-Tint-GU10 auch Farbtemperatur können, ich meine dazu kam bisher bei mir kein Reading rein.

Das ich das Template auch über die Kommandozeile zuweisen kann ist klar, aber warum stehen mir die entsprechenden Templates mit bspw. dem u.a. Device nicht zur Auswahl ?

Das ist schon ein älteres Device in der DEF stand bisher nur der technische Name (k.A. ob das heute anders wäre beim neu erstellen, habs nicht ausprobiert), den hab ich um zigbee_ ergänzt (für das Internal CID), trotzdem werden die Templates nicht angezeigt ?

defmod MQTT2_zigbee_gu10_6 MQTT2_DEVICE zigbee_0x00158d0003278378
attr MQTT2_zigbee_gu10_6 userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 structexclude wzdl wzdl_map
attr MQTT2_zigbee_gu10_6 IODev MQTT2_Server
attr MQTT2_zigbee_gu10_6 alexaName decke6
attr MQTT2_zigbee_gu10_6 devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_gu10_6 genericDeviceType light
attr MQTT2_zigbee_gu10_6 group Wohnzimmer
attr MQTT2_zigbee_gu10_6 homebridgeMapping Brightness=brightness::brightness,minValue=0,maxValue=100,max=255,delay=true\
On=state,valueOn=ON,valueOff=OFF
attr MQTT2_zigbee_gu10_6 icon light_control
attr MQTT2_zigbee_gu10_6 imageLink /fhem/deviceimages/mqtt2/404006-404008-404004.jpg
attr MQTT2_zigbee_gu10_6 model L_02a_zigbee2mqtt_light_dimmer
attr MQTT2_zigbee_gu10_6 readingList zigbee2mqtt/0x00158d0003278378:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_gu10_6 room MQTT2_DEVICE,Wohnzimmer
attr MQTT2_zigbee_gu10_6 setList on:noArg zigbee2mqtt/0x00158d0003278378/set {"state":"ON"}\
  off:noArg zigbee2mqtt/0x00158d0003278378/set {"state":"OFF"}\
  brightness:colorpicker,BRI,0,1,255 zigbee2mqtt/0x00158d0003278378/set {"state":"on","$EVTPART0":"$EVTPART1"}
attr MQTT2_zigbee_gu10_6 setStateList on off
attr MQTT2_zigbee_gu10_6 verbose 2
attr MQTT2_zigbee_gu10_6 webCmd brightness
attr MQTT2_zigbee_gu10_6 webCmdLabel Helligkeit\
:

setstate MQTT2_zigbee_gu10_6 ON
setstate MQTT2_zigbee_gu10_6 2021-07-04 16:15:04 IODev MQTT2_Server
setstate MQTT2_zigbee_gu10_6 2021-07-04 16:04:04 brightness 254
setstate MQTT2_zigbee_gu10_6 2021-07-04 16:04:04 color_mode color_temp
setstate MQTT2_zigbee_gu10_6 2021-07-04 16:04:04 color_temp 153
setstate MQTT2_zigbee_gu10_6 2021-07-04 16:04:04 linkquality 127
setstate MQTT2_zigbee_gu10_6 2021-07-04 16:04:04 state ON


list für die CID:

Internals:
   CID        zigbee_0x00158d0003278378
   DEF        zigbee_0x00158d0003278378
   DEVICETOPIC MQTT2_zigbee_gu10_6
   FUUID      5fcd1b4c-f33f-78f5-517f-83893558e44c8d56
   IODev      MQTT2_Server
   LASTInputDev MQTT2_Server
   MQTT2_Server_MSGCNT 24
   MQTT2_Server_TIME 2021-07-04 16:04:04
   MSGCNT     24
   NAME       MQTT2_zigbee_gu10_6
   NR         303
   STATE      ON
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-07-04 16:15:04   IODev           MQTT2_Server
     2021-07-04 16:04:04   brightness      254
     2021-07-04 16:04:04   color_mode      color_temp
     2021-07-04 16:04:04   color_temp      153
     2021-07-04 16:04:04   linkquality     127
     2021-07-04 16:04:04   state           ON
Attributes:
   IODev      MQTT2_Server
   alexaName  decke6
   devStateIcon {zigbee2mqtt_devStateIcon255($name)}
   genericDeviceType light
   group      Wohnzimmer
   homebridgeMapping Brightness=brightness::brightness,minValue=0,maxValue=100,max=255,delay=true
On=state,valueOn=ON,valueOff=OFF
   icon       light_control
   imageLink  /fhem/deviceimages/mqtt2/404006-404008-404004.jpg
   model      L_02a_zigbee2mqtt_light_dimmer
   readingList zigbee2mqtt/0x00158d0003278378:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE,Wohnzimmer
   setList    on:noArg zigbee2mqtt/0x00158d0003278378/set {"state":"ON"}
  off:noArg zigbee2mqtt/0x00158d0003278378/set {"state":"OFF"}
  brightness:colorpicker,BRI,0,1,255 zigbee2mqtt/0x00158d0003278378/set {"state":"on","$EVTPART0":"$EVTPART1"}
   setStateList on off
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 structexclude wzdl wzdl_map
   verbose    2
   webCmd     brightness
   webCmdLabel Helligkeit

Beta-User

Hab's eben mit der (um IODev gekürzten) RAW-Definition ausprobiert, keine Probleme bzw. alle z2m-attrTemplate im dropdown auswählbar...
Browser-refresh bzw. kompletten reload der Seite gemacht?
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

TomLee

Browser-refresh hatte ich natürlich auch gemacht. es wurde immer nur das z2m_bridge-Template angezeigt, warum auch immer, wenn ich jetzt schaue folgen nach dem Bridge-Template alle weiteren  :o  ::) sry.

TomLee

#469
Ich hab ja mehrere von den GU-10, eben hab ich bei einer weiteren zigbee_ in der DEF ergänzt, gleiches Spiel wie gestern, trotz Browser-refresh keine weiteren Templates, weiterhin nur das Bridge-Template, es muss an was anderem liegen. Einen restart seit der Änderung gestern hatte ich, mein ich, auch nicht gemacht.

defmod MQTT2_zigbee_gu10_1 MQTT2_DEVICE zigbee_0x00158d0003274a6c
attr MQTT2_zigbee_gu10_1 userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 structexclude wzdl wzdl_map
attr MQTT2_zigbee_gu10_1 IODev MQTT2_Server
attr MQTT2_zigbee_gu10_1 alexaName decke1
attr MQTT2_zigbee_gu10_1 devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_gu10_1 genericDeviceType light
attr MQTT2_zigbee_gu10_1 group Wohnzimmer
attr MQTT2_zigbee_gu10_1 homebridgeMapping Brightness=brightness::brightness,minValue=0,maxValue=100,max=255,delay=true\
On=state,valueOn=ON,valueOff=OFF
attr MQTT2_zigbee_gu10_1 icon light_control
attr MQTT2_zigbee_gu10_1 imageLink /fhem/deviceimages/mqtt2/404006-404008-404004.jpg
attr MQTT2_zigbee_gu10_1 model L_02a_zigbee2mqtt_light_dimmer
attr MQTT2_zigbee_gu10_1 readingList zigbee2mqtt/0x00158d0003274a6c:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_gu10_1 room MQTT2_DEVICE,Wohnzimmer
attr MQTT2_zigbee_gu10_1 setList on:noArg zigbee2mqtt/0x00158d0003274a6c/set {"state": "ON"}\
off:noArg zigbee2mqtt/0x00158d0003274a6c/set {"state": "OFF"}\
brightness:colorpicker,BRI,0,5,255 zigbee2mqtt/0x00158d0003274a6c/set {"state":"on","$EVTPART0":"$EVTPART1"}
attr MQTT2_zigbee_gu10_1 setStateList on off
attr MQTT2_zigbee_gu10_1 verbose 2
attr MQTT2_zigbee_gu10_1 webCmd brightness
attr MQTT2_zigbee_gu10_1 webCmdLabel Helligkeit\
:

setstate MQTT2_zigbee_gu10_1 OFF
setstate MQTT2_zigbee_gu10_1 2021-07-05 16:01:45 IODev MQTT2_Server
setstate MQTT2_zigbee_gu10_1 2020-02-06 22:37:46 abrightness 50
setstate MQTT2_zigbee_gu10_1 2021-07-01 03:33:09 brightness 254
setstate MQTT2_zigbee_gu10_1 2021-07-05 02:21:46 color_mode xy
setstate MQTT2_zigbee_gu10_1 2021-07-05 02:21:46 linkquality 199
setstate MQTT2_zigbee_gu10_1 2021-07-05 02:21:46 state OFF

Beta-User

Hmm, seltsam, das...

Habe nochmal - diesmal mit einem anderen (aktuellen) System - die RAW-DEF (nur den cfg-Teil, ohne IO und alexaName) kopiert und mit dem "grünen Plus" eingespielt, und direkt war nach Aufruf des Devices war eine längere Liste von t2m-attrTemplate wählbar.

Da scheint irgendwas in den internen Datenstrukturen "verklemmt" zu sein, wenn man nachträglich die DEF ändert. Da die bridgeRegexp mWn. auch seit langem unverändert ist, dürfte das ganze auch eher weniger User betreffen. Bin daher eher abgeneigt, größeren Aufwand für Ursachenforschung zu betreiben. Aber falls jemand eine Erklärung oder (praktikable) Lösung hat: her damit...
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

TomLee

ZitatBin daher eher abgeneigt, größeren Aufwand für Ursachenforschung zu betreiben.

Und ich ergänze nur noch :

Einen restart hab ich auch gleich für ein update genutzt, die mqtt2.template-File tauchte auch im Eventmonitor auf, war also nicht aktuell, die weiteren Templates sind danach vorhanden.
Wieder in einem anderen GU-10 Device die DEF geändert, Verhalten bleibt auch nach update so, keine weiteren Templates, ohne restart.

kennymc.c

Ich bin vor kurzem vom alten MQTT Modul mit XiaomiMQTTDevice über Zigbee2MQTT auf MQTT2_Client/Device umgestiegen. Das hat soweit auch ganz gut funktioniert. Was mir allerdings aufgefallen ist, das mit dem Template zigbee2mqtt_plug_w_energy_measuring (andere Schalter Templates habe ich bisher nicht getestet) diese Geräte in Homebridge immer als eingeschaltet angezeigt werden auch wenn sie gar nicht eingeschaltet sind. Man kann sie zwar Aus- und wieder Einschalten, nach kurzer Zeit werden sie dann aber wieder als eingeschaltet angezeigt. Das entspricht nicht der Anzeige in Fhem selbst.
Mit XiaomiMQTTDevice musste ich da nichts im HomebridgeMapping ändern. Das steht auch im neuen Device weiterhin auf history:size=1024,type=energy. Könnte man das anpassen, da es mit anderen Geräte keine Probleme über Homebridge gibt?

kennymc.c

Ok, mit folgendem HomebridgeMapping funktioniert es:

On=state,valueOn=ON,valueOff=OFF

Wäre nett, wenn man das ins Template integrieren könnte, da es ansonsten keine Auswirkungen hat. Außer es gibt Probleme, da es als Userattribut nicht bei allen vorhanden ist.

Beta-User

Nachdem es doch einige Installationen gibt, die die diversen zigbee2mqtt-on/off-Geräte beinhalten, unterstelle ich mal zwei Dinge:
a) es gibt eine gewisse Anzahl an User darunter, die homebridge nutzen und
b) die finden es völlig ok, dass attrTemplate (für on/off-Geräte) nur den genericDeviceType setzt.

Ergo meine ich: Löschen des Attributs (bzw. Nicht-Setzen wie gehabt) ist die korrekte Vorgehensweise.
(Danach einfach die homebridge-Erkennung/den externen Dienst nochmal starten).

PS: Die im gestaffelten Aufruf der attrTemplate enthaltene Logik ermöglicht es zu erkennen, ob das Attribut "bekannt" sein müßte (also eine Sprachsteuerung aktiviert ist). Sonst wird auch genericDeviceType nicht gesetzt.

Auch hier gilt also: Lass die Automatik machen und verschlimmbessere nicht gleich alles...
Für das Sprachsteuerungs-"Zeug" gilt im übrigen: Weniger ist mehr! Nur setzen, was unbedingt sein muss.
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

kennymc.c

Ich habe aus dem Device jetzt alle von mir zusätzlich gesetzten Attribute (Ausnahme room und DBLogExclude) entfernt und das Template erneut angewendet. Es bleibt dabei, dass der State in Homebridge nicht stimmt.


Internals:
   CID        zigbee_WZ_Plug_Amp
   DEF        zigbee_WZ_Plug_Amp
   DEVICETOPIC zigbee2mqtt/WZ_Plug_Amp
   FUUID      6134dbfc-f33f-b03f-1eae-e446ae05a33d7280
   FVERSION   10_MQTT2_DEVICE.pm:0.248610/2021-08-20
   IODev      mqtt2
   LASTInputDev mqtt2
   MSGCNT     2241
   NAME       WZ_Plug_Amp
   NR         537
   STATE      off
   TYPE       MQTT2_DEVICE
   mqtt2_MSGCNT 2241
   mqtt2_TIME 2021-09-08 22:25:27
   Helper:
     DBLOG:
       linkquality:
         DBLogging:
           TIME       1631132310.84627
           VALUE      54
       power:
         DBLogging:
           TIME       1631125194.7511
           VALUE      0
       state:
         DBLogging:
           TIME       1631132346.48746
           VALUE      attrTemplate speechcontrol_general_naming_master_template
   READINGS:
     2021-09-08 04:09:20   IODev           mqtt2
     2021-09-08 18:44:28   associatedWith  ZigBee2MQTT_Bridge
     2021-09-08 22:20:48   attrTemplateVersion 20200903
     2021-09-08 18:44:28   availability    online
     2021-09-08 22:25:27   current         0
     2021-09-08 22:23:24   elapsed         27991
     2021-09-08 22:25:27   energy          16.24
     2021-09-08 22:25:27   last_seen       1631132727914
     2021-09-08 22:25:27   linkquality     60
     2021-09-08 22:25:27   power           0
     2021-09-08 22:25:27   state           OFF
     2021-09-08 22:25:27   voltage         240
Attributes:
   DbLogExclude .*
   devStateIcon {my $light = FW_makeImage(ReadingsVal($name,"state","off")); my $current = ReadingsVal($name,"current",0); my $pwr = ReadingsVal($name,"power",0); my $energy = ReadingsVal($name,"energy",0); qq(<div> <a href="/fhem?cmd.dummy=set $name toggle&XHR=1">$light</a> Aktuell: $current A  Leistung.: $pwr W<b></b>)}
   devicetopic zigbee2mqtt/WZ_Plug_Amp
   eventMap   { dev=>{ON=>'on',OFF=>'off'} }
   genericDeviceType switch
   icon       message_socket
   model      zigbee2mqtt_plug_w_energy_measuring
   readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
   room       Homebridge,ZigBee
   setList    on:noArg $DEVICETOPIC/set {"state":"ON"}
  off:noArg $DEVICETOPIC/set {"state":"OFF"}
  toggle:noArg $DEVICETOPIC/set {"state":"TOGGLE"}
   setStateList on off toggle


Was ist mit Löschen des Attributs gemeint? GenereicDeviceType? Das zu Löschen hat keine Auswirkung.

Beta-User

Gemeint gewesen war "deleteattr <device> homeBridgeMapping" + anschließender Start der Geräte-Erkennung in homebridge.

Falls es wirklich so ist, dass man da was braucht (an eventuelle Mitleser: Rückmeldung wäre nett!), ist m.E. für diesen Fall das Setzen des Attributs (und damit der Weg über attrTemplate) mAn. die letzt-beste Variante.

Da heutzutage viele Geräte die Großschreibung für "ON" etc. (in state) verwenden, müßte mAn. dann mal auf der homebridge-Seite geklärt werden, ob man das nicht generell abfangen kann. Eventuell gibt es dafür Startoptionen...?
Wenn nein, wäre die Frage, ob man den dortigen Maintainer fragt, ob er sowas einbauen kann und will.

Danach wäre zu klären, ob man dem Sender (=zigbee2mqtt) beibiegen kann, dass man Kleinschreibung haben möchte (analog zu Tasmota)?

Erst wenn das alles nichts hilft, ist es nach meinem Dafürhalten ein Thema für homeBridgeMapping (und dann nur, wenn auch homebridge im Spiel ist...? Das macht es nämlich - vorläufig betrachtet - einigermaßen komplex in der konkreten Umsetzung via attrTemplate.)
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

gandy

Hi,

habe gerade einen kleinen Bug im mqtt2.template für shellyflood gefunden: Der Eintrag für readingList enhält DEVICE an Stelle von DEVNAME, was dazu führt, dass die Topics falsch formuliert werden (z.B. "shellies/LeckSensorWaschmaschine/sensor/flood" statt "shellies/shellyflood-613BD7/sensor/flood").

Folgende Version des Templates erzeugt das m.E. korrekte Verhalten:

# shellyflood using original firmware
name:shellyflood
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:shellyht using original firmware <br>Just adds stateFormat and icon
order:A_16a
par:DEVNAME;name of this shelly;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to humidity;{ AttrVal("DEVICE","icon","humidity") }
attr DEVICE icon ICON
attr DEVICE setList \
  x_update:noArg shellies/DEVNAME/command update_fw\
  x_mqttcom shellies/DEVNAME/command $EVTPART1
attr DEVICE  readingList shellies/DEVNAME/online:.* online\
  shellies/DEVNAME/announce:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  shellies/DEVNAME/sensor/temperature:.* temperature\
  shellies/DEVNAME/sensor/flood:.* flood\
  shellies/DEVNAME/sensor/battery:.* batteryPercent\
  shellies/DEVNAME/sensor/error:.* error\
  shellies/DEVNAME/sensor/act_reasons:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr DEVICE jsonMap 1:report
attr DEVICE stateFormat flood (bat batteryPercent%)
deletereading -q DEVICE (?!associatedWith|IODev).*
set DEVICE x_mqttcom announce
attr DEVICE model shellyflood
setreading DEVICE attrTemplateVersion 202110191


Beste Grüße,
Andy.
fhem (svn) auf i5-4210U NUC
2x HMLAN, 19x HM-SEC-RHS, 15x HM-LC-Bl1PBU-FM, etc.
ODYS Neron Tablet / Android 4.2
Samsung Galaxy Tab 2 10.1N / Android 4.1.2
Samsung Galaxy Note / Android 6.0.1

Beta-User

Danke für den Hinweis, auch an TomLee wg. des DEVICETOPIC-Themas.

Update folgt bei Gelegenheit.
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

moustic999

hello all,

Zigbee2mqtt bridge template is not alinged anymore with the api of zigbee2mqtt . They refactres their api in version 1.71.0. Is there someone already looking at updating this template ?

If nobody is working on it, I can make changes but I dont know how to publish the changes