attrTemplate: zigbee2mqtt_light_rgbcct_rgb

Begonnen von TomLee, 06 Oktober 2022, 12:46:47

Vorheriges Thema - Nächstes Thema

TomLee

Wie das umzusetzen wäre ist klar und war keine Frage.
So ein Bulb https://www.zigbee2mqtt.io/devices/404000_404005_404012_404019.html verhält sich genau gleich, ähnliche Leuchten von Ikea vlt. auch ?
Es gibt halt keinen direkten Befehl (bei meinen zweien, von unterschiedlichen Herstellern wie du liest) auf Weiß zu schalten, das geht nur über "ct", darum dacht ich es wäre eine gute Idee/Basis. Mach wie du es für richtig hältst.

Beta-User

Zitat von: TomLee am 13 Oktober 2022, 17:58:31
Mach wie du es für richtig hältst.
Wenn es nachweislich mit 2 verschiedenen klappt und die bisherige Quote 100% ist, halte ich für richtig, was du dazu konkret vorschlägst ;) . (Ich habe jetzt leider etwas den Faden verloren, was der gewünschte Sollzustand ist, ein c/p-Vorschlga in attrTemplate-Form wäre super!).
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

Als Basis hab ich zigbee2mqtt_light_rgbw_hex genommen, welchen Namen man dem Template jetzt gibt weiß ich auch nicht, da wär ich bei dir schon gespannt gewesen welchen du gewählt hättest oder mit welchem Template verwurstet, denke mal zigbee2mqtt_light_rgbcct_rgb.


Getestet:
#source post: https://forum.fhem.de/index.php/topic,97303.msg905935.html#msg905935
name:zigbee2mqtt_light_rgbw_hex
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
desc: A dimmable rgbw light connected via zigbee2mqtt<br>rgb value is encoded as HEX value<br>Tested with:<br><a href="https://www.zigbee2mqtt.io/devices/HG08008.html" target="_blank">Livarno Home LED ceiling light</a><br><a href="https://www.zigbee2mqtt.io/devices/404000_404005_404012_404019.html#m%25C3%25BCller%2520licht-404000%252F404005%252F404012%252F404019" target="_blank">Mueller Light tint RGBW bulb</a>
order:L_02d
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef }
par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_white_and_color_e27_b22;{ AttrVal('DEVICE','icon','hue_filled_white_and_color_e27_b22') }
attr DEVICE icon ICON
attr DEVICE devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr DEVICE webCmd toggle:on:off:brightness:ct:warm:white:rgb
attr DEVICE devicetopic BASE_TOPIC/DEV_ID
attr DEVICE readingList $\DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
attr DEVICE setList \
  on:noArg $\DEVICETOPIC/set {"state":"ON", "color_temp": 320}\
  off:noArg $\DEVICETOPIC/set {"state":"OFF"}\
  warm:noArg $\DEVICETOPIC/set {"brightness": 200 , "color_temp": 320}\
  white:noArg $\DEVICETOPIC/set {"brightness": 254, "color_temp": 250}\
  ct:colorpicker,CT,250,1,454 $\DEVICETOPIC/set {"color_temp":"$EVTPART1"}\
  brightness:colorpicker,BRI,0,5,255 $\DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}\
  rgb:colorpicker,RGB {"$\DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
attr DEVICE userReadings rgb:color_y.* {Color::xyY2hex(ReadingsVal($name,'color_x',0),ReadingsVal($name,'color_y',0),ReadingsVal($name,'brightness',254))}
attr DEVICE jsonMap color_temp:ct
set DEVICE attrTemplate speechcontrol_type_light_255
attr DEVICE model zigbee2mqtt_light_rgbw_hex
setreading DEVICE attrTemplateVersion 20221014


Mit option will ich mich wieder beschäftigen, alles vergessen und muss mich wieder einlesen, weil das würd mir gefallen wenn der Wert abgefragt würde beim anwenden Geht das überhaupt, den Wert color_temp als Variable zu übergeben mein ich ?

Beta-User

Zitat von: TomLee am 14 Oktober 2022, 13:34:00
mit welchem Template verwurstet, denke mal zigbee2mqtt_light_rgbcct_rgb.
So hätte ich das auch gesehen, ist ja nur eine Erweiterung, und wer es nicht/anders mag, muss es halt ändern...

Zitat
Mit option will ich mich wieder beschäftigen, alles vergessen und muss mich wieder einlesen, weil das würd mir gefallen wenn der Wert abgefragt würde beim anwenden Geht das überhaupt, den Wert color_temp als Variable zu übergeben mein ich ?
Also z.B. alles, wo jetzt "320" steht mit einem Wert zu belegen, den der User (mit) angeben kann? Sollte gehen.

Wobei sich da die Frage stellt, ob man nicht "par:" vorsieht, aber eine Vorbelegung mit 320 macht. Wer es anders will, muss dann halt das attrTemplate mit dem passenden anderen Wert aufrufen?
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

Cool.

Komm hier aber nicht genau mit wie das genau gemeint ist:
Zitataber eine Vorbelegung mit 320 macht. Wer es anders will, muss dann halt das attrTemplate mit dem passenden anderen Wert aufrufen?

Das man die Auswahl hat vorgegebene oder eigene Werte zu übergeben ?




Zitatname:zigbee2mqtt_light_rgbcct_rgb
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
desc: A dimmable rgbw light connected via zigbee2mqtt<br>rgb value is encoded as HEX value<br>remove color_temp in setlist command <b>on</b> if default white is not desired<br>Tested with:<br><a href="https://www.zigbee2mqtt.io/devices/HG08008.html" target="_blank">Livarno Home LED ceiling light</a><br><a href="https://www.zigbee2mqtt.io/devices/404000_404005_404012_404019.html#m%25C3%25BCller%2520licht-404000%252F404005%252F404012%252F404019" target="_blank">Mueller Light tint RGBW bulb</a>
order:L_02e1
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef }
par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_white_and_color_e27_b22;{ AttrVal('DEVICE','icon','hue_filled_white_and_color_e27_b22') }
par:BRIGHTNESS;default brightness in <b>brightness</b>-command;undef
par:CTWARMVALUE;default color_temp in <b>warm</b>-command;undef
par:CTWHITEVALUE;default color_temp in <b>white</b>-command;undef

attr DEVICE icon ICON
attr DEVICE devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr DEVICE webCmd toggle:on:off:brightness:ct:warm:white:rgb
attr DEVICE devicetopic BASE_TOPIC/DEV_ID
attr DEVICE readingList $\DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
attr DEVICE setList \
  on:noArg $\DEVICETOPIC/set {"brightness": BRIGHTNESS , "state":"ON", "color_temp": CTVALUE}\
  off:noArg $\DEVICETOPIC/set {"state":"OFF"}\
  warm:noArg $\DEVICETOPIC/set {"brightness": BRIGHTNESS , "color_temp": CTWARMVALUE}\
  white:noArg $\DEVICETOPIC/set {"brightness": BRIGHTNESS, "color_temp": CTWHITEVALUE}\
  ct:colorpicker,CT,250,1,454 $\DEVICETOPIC/set {"color_temp":"$EVTPART1"}\
  brightness:colorpicker,BRI,0,5,255 $\DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}\
  rgb:colorpicker,RGB {"$\DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
attr DEVICE userReadings rgb:color_y.* {Color::xyY2hex(ReadingsVal($name,'color_x',0),ReadingsVal($name,'color_y',0),ReadingsVal($name,'brightness',254))}
attr DEVICE jsonMap color_temp:ct
set DEVICE attrTemplate speechcontrol_type_light_255
attr DEVICE model zigbee2mqtt_light_rgbcct_rgbt
setreading DEVICE attrTemplateVersion 20221014

Mir fehlt dabei irgendwo noch ein Hinweis, entweder irgendwo in dem Dialogfeld wo man die Werte angibt oder danach wenn man mit OK bestätigt hat, so in der Art:
The specified values ​​can be adjusted at any time in the setlist attribute

Beta-User

par:BRIGHTNESS;default brightness in <b>brightness</b>-command;{200}
Ruft man dann das attrTemplate ohne Parameter auf, wird die 200 gezogen. Ruft man es mit BRIGHTNESS=230 auf, wird es zu 230. Ob man das auch mit nicht namentlich übergebenen Argumenten ohne weitere machen kann, weiß ich grade nicht.
Nicht ermittelbare Argumente werden in der Reihenfolge aufgelöst, in der sie nicht automatisch bestimmt werden können. Der "undef"-Fall würde daher die Eingabe von Argumenten erzwingen, was vielleicht nicht gewünscht ist bzw. die User verwirrt (hilfreich ist dann wenigstens die Angabe des (gedachten) defaults im angezeigten Kommentar).
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

#21
ZitatDer "undef"-Fall würde daher die Eingabe von Argumenten erzwingen, ...

das ist aber genau das was ich mir vorstelle, damit wird, nebenbei, meiner Meinung nach sofort Verständnis dazu aufgebaut warum welche Werte irgendwo stehen, es steht doch schließlich auch da was man anzugeben hat und in der Beschreibung des Template ist die Doku verlinkt aus der man sich die Info ziehen kann welche Werte gerade abgefragt werden:

Specify the unknown parameters for MQTT2_zigbee_0x00158d0003e5ee0c/zigbee2mqtt_light_rgbcct_rgbtest:
default brightness in brightness-command   
default color_temp in on-command   
default color_temp in warm-command   
default color_temp in white-command

Zitat... was vielleicht nicht gewünscht ist bzw. die User verwirrt

dann seh ich das wsl. halt mit anderen Augen.


Ein Template mit Parametern aufrufen, wo/wann kam das mal vor, woher weiß das ein User der einfach nur ein Template anwenden will und keine Ahnung von der Materie hat, woher soll er die Info haben, wo steht das? im Wiki, wo ich als Anfänger zuerst lesen würde, nicht ?

Und dann noch was, ich habs mit Edge und Chrome ausprobiert, schonmal über die Kommandozeile ein Template aufgerufen welches wieder dann ein Sprachtemplate aufruft und das Dialogfeld erscheinen sollte ?
Bei mir ist der Inhalt des Dialogfelds dann einfach über die ganze Breite der rechten Seite von "FHEMWEB" und es gibt keinen OK-Button mehr zum bestätigen.


edit:

OK, im Wiki steht doch was:
ZitatParameterName wird in jeder Befehlzeile ersetzt mit dem Wert. Zusätzlich: DEVICE wird mit dem Namen des Gerätes ersetzt, wird DEVICE (z.B. für Modulnamen) als Text benötigt, muß es escaped werden (z.B. MQTT2_\DEVICE)

Es ist aber mMn. gewiss nicht gängige Praxis/geläufig Templates mit Parameter über die Kommandozeile auszuführen.


Beta-User

Vermutlich hast du recht, und es wäre in der Tat Zeit, die User (noch mehr) daran zu gewöhnen, dass man auch mal was eingeben muss.

Würde dann allerdings wie schon geschrieben gleich einen "default"-Wert in die Beschreibung mit aufnehmen, also z.B.:

default color_temp in on-command (numeric, 0-370, 270 might be a good value to start).

Ist halt lang, aber es würde evtl. reichen, die "Langform" für den ersten Parameter zu zeigen.
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

das freut mich zu lesen.

Zitat von: TomLee am 14 Oktober 2022, 17:38:56
Das man die Auswahl hat vorgegebene oder eigene Werte zu übergeben ?

Als ich oben "option" schrieb war damit Radio gemeint, meine Vorstellung ist, das als erstes das Dialogfeld kommt mit zwei Optionen zur Auswahl -> einmal vorgegebene Werte zu übernehmen (die man dann in der desc auch erwähnen sollte) oder selbst Werte angeben möchte.

Hab mir speechcontrol.template wieder mal angeschaut und meine das ist genau der Punkt (das mit den Radio Buttons) als ich damals ausgestiegen bin  ;D , irgendwann konnt ich nicht mehr folgen, ich hab mir vorgenommen mich da wieder einzudenken und es zu verstehen.

Beta-User

Puh, also... das mit den Radio-Buttons funktioniert (soweit ich das jetzt noch im Kopf habe) nur deswegen, weil jeweils ein anderes "Unter-template" aufgerufen wird, jeweils abhängig von dem, was der User vorher ausgewählt hat. Ich glaube, das ist (jedenfalls in der jetzigen Form) keine Lösung für solche Fälle wie hier, weil man sonst 2 oder drei Templates für jede Konfiguration braucht (2, falls! man es gefahrlos rekursiv (=mit Parametern) aufrufen könnte, wenn die Wahl klar ist).
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

Beta-User

Habe jetzt mal "auf Verdacht" was eingecheckt, weil ich eh' wegen was anderem an dem Thema war. Bitte melden, falls es nicht paßt...
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

Sry für die späte Rückmeldung.

Gestern Morgen, nach den Äuglein aufmachen, hab ich mich für rd. 1/2 Wochen Arbeit entschlossen die nicht geplant waren (und auch direkt losgelegt) und heute Morgen gings unerwartet schnell in die Pilze.

Bei default color_temp in on-command (numeric, 0-370, 270 might be a good value to start) stimm ich dir zu, das etwas lang und bei den anderen Parametern find ich es merkwürdig wenn da einfach eine Zahl mit ? dasteht, hab aber erstmal auch keine bessere Idee.

Ich bin noch kein Stückchen weiter damit mich mit den Templates zu beschäftigen, warum wird farewell nicht angezeigt, liegt es daran das die Sprachtemplates danach aufgerufen werden ? Da farewell nicht "greift" ist es ja gut das du es comment auch nochmal vorgesehen hast, aber warum gleich zweimal farewell und comment ?




in webCmd ist das ersetzen von color noch untergegangen.


Beta-User

Zitat von: TomLee am 19 Oktober 2022, 18:19:11
Sry für die späte Rückmeldung.
Kein Ding.

Zitat
in webCmd ist das ersetzen von color noch untergegangen.
Thx, gefixt.

Zitathab aber erstmal auch keine bessere Idee.
Na ja, irgendwie muss man es halt lösen, wenn man was dialogisches haben will. Ist mal ein Vorschlag, bin da offen, sobald jemand was noch besseres einfällt...

Zitat
warum wird farewell
V.a. weil mir klar war, dass das zumindest bei den usern nicht angezeigt werden wird, bei denen danach noch ein anderes template mit farewell aufgerufen wird (also denen, die eine Sprachsteuerung im Einsatz haben), habe ich die Doppelung nach comment gemacht. Es ist aber auch so, dass man allgemein eine Rückmeldung eher wegklickt und/oder dann irgendwann deren Inhalt vergessen hat, wenn es denn später mal drauf ankäme...

Oder war mit "doppelt" noch was anders gemeint und ich habe wieder irgendwo was übersehen?
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

ZitatNa ja, irgendwie muss man es halt lösen, wenn man was dialogisches haben will. Ist mal ein Vorschlag, bin da offen, sobald jemand was noch besseres einfällt...

Vorschlag für "vorübergehend", aber bei jedem Parameter ( der erste lange fällt einfach weg):

Zitatdefault brightness in brightness-command (numeric, 0-255, e.g. 120)
default ct value in on-command (numeric, 0-370, e.g. 320)
default ct value in warm-command (e.g. 320)   
default ct value in white-command (e.g. 250)

Das mit dem ? kann nicht so bleiben, das verwirrt mMn. .

Eher an einen anderen Adressaten, wäre es viel Aufwand den einen Satz  Specify the unknown parameters for MQTT2_zigbee_Lager_Decke_1test/zigbee2mqtt_light_rgbcct_rgb: je nach gewählter Sprache in global auch dann entsprechend in dem Dialogfeld anzuzeigen ?

ZitatOder war mit "doppelt" noch was anders gemeint und ich habe wieder irgendwo was übersehen?

Nö.


TomLee

Hey, ich hab das nicht mitbekommen das du das Template meinem letzten Wunsch angepasst hast (und ich denke die ganze Zeit wann meldet der sich mal), Danke

Hier passt doch aber was nicht ?

par:BRIGHTNESS;default brightness in <b>brightness</b>-command (numeric, 0-255, e.g. 120);undef


->

par:BRIGHTNESS;default brightness in <b>on</b>-command (numeric, 0-255, e.g. 120);undef


und hier :

par:CTVALUE;default color temp (ct) value in <b>on</b>-command (numeric, 0-370, e.g. 320);undef

fänd ich besser:

par:CTVALUE;default ct value in <b>on</b>-command (numeric, 0-370, e.g. 320);undef

wie in der "Abfrage" zum warm/white-command ?

Schreibt man in allen "Abfragen" besser ct value mit Bindestrich -> ct-value ?