[Info] zigbee2mqtt_devStateIcon255() erweitert

Begonnen von Beta-User, 26 April 2019, 09:34:20

Vorheriges Thema - Nächstes Thema

Beta-User

Moin zusammen,

seit https://svn.fhem.de/trac/changeset/19261 gibt es eine aktualisierte zigbee2mqtt_devStateIcon255($;$$).

Damit kann man nicht nur die Dimmer-Anzeige haben, sondern auch laufende Timer sehen und das ganze in Farbe haben :) .

Da die Parameter evtl. nicht selbsterklärend sind:
- Der Erste ist zwingend, da gehört der Gerätename hin der ausgewertet werden soll. In der Regel ist "$name" zweckmäßig...
- Der Zweite ist der Name des RGB-Readings (kann auch leer sein),
- Der (optionale) Dritte gibt an, ob bei gerade laufenden SetExtensions-Timern auch ein entsprechendes Timer-Symbol angezeigt werden soll. EDIT: Bitte beachten, dass das zwingend voraussetzt, dass das Attribut "setExtensionsEvent" auf "1" gesetzt ist!

Eventuell wird der Gesamtzusammenhang an einem Beispiel etwas klarer (sorry, soll keine Werbung für die dusseligen MiLights sein, die hatte ich nur grade zur Hand...):
defmod Licht_Spuele MQTT2_DEVICE milight_0xBE59_3
attr Licht_Spuele IODev MQTT2_FHEM_Server
attr Licht_Spuele devStateIcon {zigbee2mqtt_devStateIcon255($name,'hex',1)}
attr Licht_Spuele eventMap /set_white:Weiss/night_mode:Nacht/white_mode:white/
attr Licht_Spuele group Licht
attr Licht_Spuele icon light_control
attr Licht_Spuele model X_01_esp_milight_hub_rgbw_bulb
attr Licht_Spuele readingList milight/states/0xBE59/rgbw/3:.* { json2nameValue($EVENT) }\
   milight/states/0xBE59/rgbw/0:.* { json2nameValue($EVENT) }\
   milight/updates/0xBE59/rgbw/3:.* { json2nameValue($EVENT) }\
   milight/updates/0xBE59/rgbw/0:.* { json2nameValue($EVENT) }
attr Licht_Spuele room Esszimmer
attr Licht_Spuele setExtensionsEvent 1
attr Licht_Spuele setList on milight/0xBE59/rgbw/3 {"status":"ON"}\
   off milight/0xBE59/rgbw/3 {"status":"OFF"}\
   brightness:colorpicker,BRI,0,15,255 milight/0xBE59/rgbw/3 {"$EVTPART0":"$EVTPART1"}\
   hue:colorpicker,HUE,0,1,359 milight/0xBE59/rgbw/3 {"$EVTPART0":"$EVTPART1"}\
   command:uzsuSelectRadio,Weiss,Nacht milight/0xBE59/rgbw/3 {"$EVTPART0":"$EVTPART1"}
attr Licht_Spuele setStateList on off
attr Licht_Spuele userReadings hex:color_r.* {Color::rgb2hex(ReadingsVal($name,"color_r",255),ReadingsVal($name,"color_g",255),ReadingsVal($name,"color_b",255))}, hue:bulb_mode.*white {"0"}
attr Licht_Spuele webCmd brightness:hue:command

setstate Licht_Spuele OFF
setstate Licht_Spuele 2019-04-24 20:10:30 brightness 112
setstate Licht_Spuele 2019-04-24 20:10:30 bulb_mode white
setstate Licht_Spuele 2019-04-12 19:44:01 button_id 0
setstate Licht_Spuele 2019-04-24 20:10:30 color_b 255
setstate Licht_Spuele 2019-04-24 20:10:30 color_g 255
setstate Licht_Spuele 2019-04-24 20:10:30 color_r 255
setstate Licht_Spuele 2019-04-18 06:42:07 command set_white
setstate Licht_Spuele 2019-04-24 20:10:30 hex FFFFFF
setstate Licht_Spuele 2019-04-24 20:10:30 hue 0
setstate Licht_Spuele 2019-04-18 07:20:57 myDimmDir 0
setstate Licht_Spuele 2019-04-18 07:25:40 myLastShort 2
setstate Licht_Spuele 2019-04-24 20:10:30 state OFF


Für "nur Farbe" wäre das so:
attr Licht_Spuele devStateIcon {zigbee2mqtt_devStateIcon255($name,'hex')}

Das ganze sollte auch mit "einfachen" on/off"-Geräten funktionieren, die gar kein RGB-Reading haben:
attr Beispielgeraet devStateIcon {zigbee2mqtt_devStateIcon255($name,'',1)}

Wen die Vorgeschichte interessiert, wird hier fündig.

Viel Spaß damit!

Beta-User
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

kotaro

Hallo,

ich habe scheinbar ein Fehler mit dem neuen devStateIcon255...

dabei sieht mein Device folgendermaßen aus.


Internals:
   CID        zigbee_WZ_Glaslampe
   DEF        zigbee_WZ_Glaslampe
   DEVICETOPIC WZ_Licht_Glaslampe
   FUUID      5cd1e346-f33f-787c-4dcc-51fb9976d1c02bf7
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 36
   MQTT2_FHEM_Server_TIME 2019-05-12 00:16:32
   MSGCNT     36
   NAME       WZ_Licht_Glaslampe
   NR         239
   STATE      on
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-05-07 21:57:58   associatedWith  MQTT2_zigbee_zigbee
     2019-05-12 00:16:32   brightness      150
     2019-05-12 00:16:32   color_mode      2
     2019-05-12 00:16:32   color_saturation 79.5
     2019-05-12 00:16:32   color_temp      370
     2019-05-12 00:16:32   color_x         0.458
     2019-05-12 00:16:32   color_y         0.41
     2019-05-12 00:16:32   device_dateCode unknown
     2019-05-12 00:16:32   device_friendlyName WZ_Glaslampe
     2019-05-12 00:16:32   device_hwVersion unknown
     2019-05-12 00:16:32   device_ieeeAddr 0x000d6ffffe080289
     2019-05-12 00:16:32   device_manufId  4635
     2019-05-12 00:16:32   device_manufName MLI
     2019-05-12 00:16:32   device_modelId  ZBT-ExtendedColor
     2019-05-12 00:16:32   device_nwkAddr  7171
     2019-05-12 00:16:32   device_powerSource Mains (single phase)
     2019-05-12 00:16:32   device_status   offline
     2019-05-12 00:16:32   device_swBuildId unknown
     2019-05-12 00:16:32   device_type     Router
     2019-05-12 00:16:32   hex             FFC248
     2019-05-12 00:16:32   linkquality     81
     2019-05-12 00:16:32   state           ON
Attributes:
   DbLogExclude .*
   IODev      MQTT2_FHEM_Server
   alias      Blaue Vase
   assistantName Blaue Lampe
   devStateIcon {zigbee2mqtt_devStateIcon255($name,'hex',1)}
   genericDeviceType light
   group      Licht
   icon       hue_filled_white_and_color_e27_b22
   lightSceneParamsToSave brightness,color_temp
   model      L_02e_zigbee2mqtt_light_rgbcct_hex
   readingList zigbee2mqtt/WZ_Glaslampe:.* { json2nameValue($EVENT) }
   realRoom   Wohnzimmer
   room       11_Wohnzimmer,GoogleAssistant,Homekit
   setList    on:noArg zigbee2mqtt/WZ_Glaslampe/set {"state":"ON"}
  off:noArg zigbee2mqtt/WZ_Glaslampe/set {"state":"OFF"}
  brightness:colorpicker,BRI,0,5,255 zigbee2mqtt/WZ_Glaslampe/set {"state":"on","$EVTPART0":"$EVTPART1"}
  color_temp:colorpicker,CT,154,2,500 zigbee2mqtt/WZ_Glaslampe/set {"$EVTPART0":"$EVTPART1"}
  hex:colorpicker,HEX,0,15,255 zigbee2mqtt/WZ_Glaslampe/set {"color":{"$EVTPART0":"#$EVTPART1"}}
  scene:1,2,3,4,5,6 zigbee2mqtt/WZ_Glaslampe/set {"$EVTPART0":$EVTPART1}
   stateFormat {lc ReadingsVal("$name","state",0)}
   userReadings hex:color_y.* {Color::xyY2hex(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
   webCmd     toggle:on:off:brightness:color_temp:hex


und folgende Fehlermeldung
2019.05.12 00:15:32 1: PERL WARNING: Use of uninitialized value $n in hash element at fhem.pl line 4413.
2019.05.12 00:15:32 1: stacktrace:
2019.05.12 00:15:32 1:     main::__ANON__                      called by fhem.pl (4413)
2019.05.12 00:15:32 1:     main::ReadingsVal                   called by ./FHEM/10_MQTT2_DEVICE.pm (736)
2019.05.12 00:15:32 1:     main::zigbee2mqtt_devStateIcon255   called by (eval 9351) (1)
2019.05.12 00:15:32 1:     (eval)                              called by ./FHEM/01_FHEMWEB.pm (2864)
2019.05.12 00:15:32 1:     main::FW_dev2image                  called by ./FHEM/01_FHEMWEB.pm (3187)
2019.05.12 00:15:32 1:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1785)
2019.05.12 00:15:32 1:     main::FW_makeDeviceLine             called by ./FHEM/01_FHEMWEB.pm (1465)
2019.05.12 00:15:32 1:     main::FW_doDetail                   called by ./FHEM/01_FHEMWEB.pm (1116)
2019.05.12 00:15:32 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (567)
2019.05.12 00:15:32 1:     main::FW_Read                       called by fhem.pl (3717)
2019.05.12 00:15:32 1:     main::CallFn                        called by fhem.pl (749)

Beta-User

Moin,

kannst du mal testen, ob das ganze auch auftritt, wenn du dem Device setExtensionsEvent spendierst?
attr WZ_Licht_Glaslampe setExtensionsEvent 1

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

rudolfkoenig

Kannst du bitte das Problem nach einem FHEM update reproduzieren? Ich haette gerne aktuelle Zeilennummer.
Wann tritt das Problem auf? Ich habe dein list zu "list -r" umgebaut, damit ich es nachstellen kann, und ich sehe keine Meldungen.

KölnSolar

RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

kotaro

Zitat von: KölnSolar am 26 Mai 2019, 20:16:32
Ich hatte das selbe Problem. Ursache/Lösung

Das klingt interessant. Was sollte man jetzt abändern? Damit die Fehlermeldung weg ist, und die Parameter ihre Wirkung haben?
Danke dir.

Beta-User

Zitat von: kotaro am 28 Mai 2019, 09:00:39
Das klingt interessant. Was sollte man jetzt abändern? Damit die Fehlermeldung weg ist, und die Parameter ihre Wirkung haben?
Danke dir.
1. Hast du das update gemacht wie von Rudi vorgeschlagen?

2. Hast du das jetzt getestet:
Zitat von: Beta-User am 12 Mai 2019, 07:36:49
attr WZ_Licht_Glaslampe setExtensionsEvent 1
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

kotaro

Ich habe alles gemacht, wie es hier vorgeschlagen wurde....

Beta-User

Kannst du bitte nochmal die _aktuelle_ Fehlermeldung liefern?
Die in deinem ersten Post genannte Zeile gehört zur sub OldReadingsVal. Bezüge daraus zu dem devStateIcon-Code kann ich nicht so recht erkennen.

Kannst du bitte mal die Modulversionen hier posten (v.a. MQTT2_DEVICE, SetExtensions und fhem.pl)?

Auch verstehe ich bei näherer Betrachtung diesen Einwand nicht so recht:
Zitat von: KölnSolar am 26 Mai 2019, 20:12:54
Das "Problem" ist, dass Du die Funktionsparameter erweitert hast. zigbee2mqtt_devStateIcon255($;$$)Wenn nun die Attribute nicht angepasst werden, ist natürlich ab dem 2. Parameter jeder Parameter undefined und damit fällt my $rgb = ReadingsVal($name, $rgbReadingName, "FFFFFF");
auf die Nase.
Denn:
- ReadingsVal liefert den default-Wert (FFFFFF) zurück, wenn man "rubbish" für die ersten beiden Argumente verwendet, das sollte also kein Problem verursachen, wenn man dort nichts oder "irgendwas" angibt.
- auch der dritte Parameter sollte immer stressfrei sein, wenn die aktuelle MQTT2_DEVICE verwendet wird: In Zeile 719 wird abgeprüft, ob grade ein Timer läuft, wenn nicht, wird immer "0" verwendet ($useSetExtension = 0 if(!$too);).

Nach meinem Verständnis des Codes sollte es also (aktuelles FHEM vorausgesetzt) keinen Fall geben, in dem irgendwas "auf die Nase fällt".
Aber vielleicht übersehe ich auch was?
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

KölnSolar

Das
ZitatdevStateIcon {zigbee2mqtt_devStateIcon255($name,'hex',1)}
müsste OK sein.
Hier
ZitatstateFormat {lc ReadingsVal("$name","state",0)}
noch die " entfernen ?  :-\

ZitatReadingsVal liefert den default-Wert (FFFFFF) zurück, wenn man "rubbish" für die ersten beiden Argumente verwendet, das sollte also kein Problem verursachen, wenn man dort nichts oder "irgendwas" angibt.
Ja, aber: Gibt man den 2. Parameter gar nicht an, wird ReadingsVal mit undefined aufgerufen und das führt dann zu
Zitat2019.05.12 00:15:32 1: PERL WARNING: Use of uninitialized value $n in hash element at fhem.pl line 4413.
Und diese Meldung ist wahr,  ;D aber unschön. ;)

Du müsstest also, um es zu vermeiden, z.B. so prüfen/initialisieren:
$rgbReadingName = "" if(!defined($rgbReadingName));
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Beta-User

Zitat von: KölnSolar am 28 Mai 2019, 11:34:36
Hier noch die " entfernen ?  :-\
@kotaro: Das scheint mir eine gute Idee zu sein.

ZitatJa, aber: Gibt man den 2. Parameter gar nicht an, wird ReadingsVal mit undefined aufgerufen und das führt dann zu [...]
Den Zusammenhang verstehe ich nach wie vor nicht: Die nämliche Zeile 4413 gehört in der aktuellen fhem.pl (19458) zur sub OldReadingsNum(). Das hat doch mit dem hier wichtigen Aufruf der sub ReadingsVal() nichts zu tun; wenn, dann sollte Zeile 4448 (?) einen Fehler werfen...

Aber evtl. hat Rudi da eine Idee, wie dieser Zusammenhang zu verstehen ist, wenn ihr ihm nachweist, dass das die aktuelle fhem.pl ist, die ihr verwendet?
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

KölnSolar

Mit heutigem update ist es Zeile 4446. Kannst es doch leicht nachstellen, wenn Du in Deinem System mit devStateIcon {zigbee2mqtt_devStateIcon255($name)}aufrufst.

ReadingsVal prüft halt den übergebenen Namen des Readings nicht auf undefined. Könnte man u.U. auch dort einbauen. Ich sehe aber eher den Nutzer der Funktion in der Pflicht.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Beta-User

Ok, so wird ein Schuh draus, und ich gebe dir auch recht, dass man das vor dem Aufrufen von ReadingsVal geklärt haben sollte.

@Rudi: Reparierst du das bitte, oder magst du einen patch haben?
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

rudolfkoenig

Habs gefixt und eingecheckt.
Nachstellbar mit:define d MQTT2_DEVICE 123456
setreading d a b
{ zigbee2mqtt_devStateIcon255("d") }