Moin zusammen,
seit https://svn.fhem.de/trac/changeset/19261 (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 (https://forum.fhem.de/index.php/topic,95581.msg933270.html#msg933270) fündig.
Viel Spaß damit!
Beta-User
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)
Moin,
kannst du mal testen, ob das ganze auch auftritt, wenn du dem Device setExtensionsEvent spendierst?
attr WZ_Licht_Glaslampe setExtensionsEvent 1
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.
Ich hatte das selbe Problem. Ursache/Lösung (https://forum.fhem.de/index.php/topic,94494.msg943524.html#msg943524)
Zitat von: KölnSolar am 26 Mai 2019, 20:16:32
Ich hatte das selbe Problem. Ursache/Lösung (https://forum.fhem.de/index.php/topic,94494.msg943524.html#msg943524)
Das klingt interessant. Was sollte man jetzt abändern? Damit die Fehlermeldung weg ist, und die Parameter ihre Wirkung haben?
Danke dir.
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
Ich habe alles gemacht, wie es hier vorgeschlagen wurde....
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?
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));
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 (https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl#L4448) (?) 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?
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.
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?
Habs gefixt und eingecheckt.
Nachstellbar mit:define d MQTT2_DEVICE 123456
setreading d a b
{ zigbee2mqtt_devStateIcon255("d") }