Template / setlist für Shelly Plus RGBW PM

Begonnen von roedert, 14 Juli 2024, 08:33:35

Vorheriges Thema - Nächstes Thema

roedert

Ich habe o.a. neuen Shelly. Für MQTT gibt es dafür jedoch noch kein Template. Daher habe ich versucht selbst die MQTT-setList zu erstellen, bisher jedoch ohne Erfolg.
Die Plus-Geräte unterscheiden sind vom MQTT-Syntax ja deutlich von den Vorgängern.

Hat hier schon jemand Erfahrungen machen können?

enno

Moin Roedert,

Ich habe auch drei der Teile hier liegen und bin ungefähr so weit wie du :P Welche Einstellungen hast du im Shelly bei MQTT aktiviert?

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

rico5588

Hallo Ihr beiden,

wollte mal fragen ob ihr zufällig schon etwas erreicht habt. Besitze jetzt auch einen solchen Shelly und steh total auf dem Schlauch... :o
Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly

rico5588

#3
Hallo,

ich würde gern beim erstellen des Template unterstützen. Leider weicht die neue Serie von Shelly stark von den alten ab.
Bis jetzt habe ich folgendes hinbekommen.
on, off, toggle,white , pct (helligkeit),trans...(Zeit zum wechsel Farbe/Helligkeit), rot (zum Test),

on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true}}\
off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":false}}\
toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Toggle","params": {"id":0}}\
white:colorpicker,BRI,0,5,255 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":$EVTPART1}}\
pct:colorpicker,BRI,0,5,100 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"brightness":$EVTPART1}}\
transition_duration:colorpicker,BRI,1,1,10 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"transition_duration":$EVTPART1}}\
rot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[255,0,0]}}\

mit dem colorpicker habe ich so meine Probleme da ich nicht das richtige Verständiss für Perl habe.
die 3 Versuche gehen nicht!
# rgb:colorpicker,RGB {return '$DEVICETOPIC/rpc' if $EVTPART1 eq '000000';  return '$DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[$EVTPART1]}}'; $EVTPART1=~/(..),(..),(..)/;  '$DEVICETOPIC/rpc {"turn":"on","mode":"color","red":'.hex($1).',"green":'.hex($2).',"blue":'.hex($3).'}'}
# rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;'$DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":['.hex($1).',"green":'.hex($2).',"blue":'.hex($3).']}}'}
  rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;if($1 ne $2 || $2 ne $3) {"$DEVICETOPIC/rpc {\"id\":0,\"src\":\"fhem\",\"method\":\"RGBW.Set\",\"params\": {\"id\":0,\"on\":true,\"rgb\":[.hex($1),.hex($2),.hex($3)]}}"}else{"$DEVICETOPIC/rpc {\"turn\":\"on\",\"mode\":\"white\",\"brightness\":".int(hex($1)/2.55)."}"}}

die letzte Zeile macht fast alles was Sie soll aus der hex Teil welcher nicht funktioniert.
rpc = {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[{.hex(29)},.hex($2),.hex($3)]}}
wenn mir jemand unter Arme greifen möchte...nur zu.
Sobald die Setliste fertig ist könnte man es in ein Template stecken.
Gruß Rico

 
Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly

Beta-User

Cool! Schau mal in der template-file nach was, das den Rückgabestring mit "qq" zusammen setzt, dann wird es einfacher zu lesen und zu coden.
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

rico5588

noch habe ich das manuell ins Device geschrieben...es gibt aktuell noch kein Template.
Im Teil rgb... wird die Wandlung vom Farbcode nicht richtig aufgelösst.
[.hex($1),.hex($2),.hex($3)]Es sollte das -> [255,0,0] ankommen, aber es kommt so [hex(ff),.hex(00),.hex(00)] an. Vermutlich ein Klammer oder Sonderzeichen Problem 🤷�♂️.
im ganzen sieht es so aus. ↓
rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;if($1 ne $2 || $2 ne $3) {"$DEVICETOPIC/rpc {\"id\":0,\"src\":\"fhem\",\"method\":\"RGBW.Set\",\"params\": {\"id\":0,\"on\":true,\"rgb\":[.hex($1),.hex($2),.hex($3)]}}"}else{"$DEVICETOPIC/rpc {\"turn\":\"on\",\"mode\":\"white\",\"brightness\":".int(hex($1)/2.55)."}"}}
Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly

TomLee

#6
Zitat... wird die Wandlung vom Farbcode nicht richtig aufgelösst.

Hallo,

wenn Du die Funktionsaufrufe zuvor in Variablen schreibst und diese in der Rückgabe angibst, dann werden diese aufgelöst:

...my $h1=hex($1);my $h2=hex($2);my $h3=hex($3);if($1 ne $2 || $2 ne $3) {qq($DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[$h1,$h2,$h3]}})}...
Gruß Thomas

edit:
statt drei Variablen könnte man auch ein Array verwenden:
... my @a=(hex($1),hex($2),hex($3));if($1 ne $2 || $2 ne $3) {qq($DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[$a[0],$a[1],$a[2]]}})}...

rico5588

Hallo,
Dank TomLee konnte ich den ColorPicker nun fertigstellen.
Das Template habe ich angefangen. Hier komme ich beim Regex für das Topic wieder nicht weiter.
Aus dem DEVICE (MQTT2_shellyplusrgbwpm_d8132addb75c) könnte man den Topic ableiden.
Dazu müsste "MQTT2_" abgeschnitten und der Unterstrich in ein - geändert werden.
par:DEV_TPC;Shelly name in the topic;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m<(shellies/[^/]+|shellyp(lus|ro4pm)[^/:_]{4,}+)> ? $1 : undef }freiwillige vor ;-)


Anbei mein Device
defmod MQTT2_shellyplusrgbwpm_d8132addb75c MQTT2_DEVICE shellyplusrgbwpm_d8132addb75c
attr MQTT2_shellyplusrgbwpm_d8132addb75c devicetopic shellyplusrgbwpm-d8132addb75c
attr MQTT2_shellyplusrgbwpm_d8132addb75c icon light_control
attr MQTT2_shellyplusrgbwpm_d8132addb75c jsonMap brightness:pct
attr MQTT2_shellyplusrgbwpm_d8132addb75c model shellyplusrgbwpm
attr MQTT2_shellyplusrgbwpm_d8132addb75c readingList shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/events/rpc:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/rgbw_0:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/debug/log:.* log\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/online:.* online\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/ws:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/ble:.* ble\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/wifi:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/cloud:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/input_0:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/input_1:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/input_2:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/input_3:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/mqtt:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/plusrgbwpm:.* plusrgbwpm\
shellyplusrgbwpm_d8132addb75c:shellyplusrgbwpm-d8132addb75c/status/sys:.* { json2nameValue($EVENT) }\
shellyplusrgbwpm_d8132addb75c:fhem/rpc:.* { json2nameValue($EVENT) }
attr MQTT2_shellyplusrgbwpm_d8132addb75c room MQTT2_DEVICE
attr MQTT2_shellyplusrgbwpm_d8132addb75c setList on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true}}\
  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":false}}\
  toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Toggle","params": {"id":0}}\
  white:colorpicker,BRI,0,5,255 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":$EVTPART1}}\
  pct:colorpicker,BRI,0,5,100 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"brightness":$EVTPART1}}\
  transition_duration:colorpicker,BRI,1,1,10 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"transition_duration":$EVTPART1}}\
  toggle_after:colorpicker,BRI,1,1,10 $MQTT2_shellyplusrgbwpm_d8132addb75cTOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\
  rot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[0,255,0]}}\
  status:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":255}}\
  rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;;my @a=(hex($1),hex($2),hex($3));;if($1 ne $2 || $2 ne $3) {qq($DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":0,"rgb":[$a[0],$a[1],$a[2]]}})}else{qq($DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":255,"rgb":[$a[0],$a[1],$a[2]]}})}}
attr MQTT2_shellyplusrgbwpm_d8132addb75c userReadings ip { ReadingsVal($name,"sta_ip",0)}
attr MQTT2_shellyplusrgbwpm_d8132addb75c webCmd on:off:rgb:pct:white

und wer will das Template als frühe Beta.


#shellybulb using original firmware
# some modifications by Rico, https://forum.fhem.de/index.php/topic,....
name:shellyplusrgbwpm
filter:TYPE=MQTT2_DEVICE
desc:shellybulb using original firmware <br>Tested with 1.49
order:A_15b
par:DEVNAME;name of this shelly;{ AttrVal('DEVICE','readingList','') =~ m,shellies/([^/]+)/, ? $1 : undef }
par:DEV_TPC;Shelly name in the topic;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m<(shellies/[^/]+|shellyp(lus|ro4pm)[^/:_]{4,}+)> ? $1 : undef }
par:ICON;ICON as set, defaults to light_control;{ AttrVal('DEVICE','icon','light_control') }
attr DEVICE icon ICON
#attr DEVICE devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'true'?'10px-kreis-gruen':'10px-kreis-rot'; my $light = ReadingsVal($name,'state','off'); my $cons = ReadingsVal($name,'light_0_power>','unknown'); '<a href="http://'.ReadingsVal($name,'ip','none').' "target="_blank">'.FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a><div>Verbrauch: $cons</div>"}
attr DEVICE devicetopic DEVICE
attr DEVICE model shellyplusrgbwpm
attr DEVICE comment 1 DEVNAME\
#2 DEV_TPC
#3 DEVICE
attr DEVICE readingList $\DEVICETOPIC/online:.* online\
  $\DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  $\DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }\
  $\DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }\
  $\DEVICETOPIC/status/rgbw_0:.* { $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT, 'switch_', $JSONMAP) }\
  $\DEVICETOPIC/status/cloud:.* {}\
  $\DEVICETOPIC/rpc:.* { json2nameValue($EVENT, 'req_', $JSONMAP, 'in_mode')}\
  $\DEVICETOPIC/status/input_0:.* { json2nameValue($EVENT, 'input_', $JSONMAP) }\
  fhem/rpc:.* {}
attr DEVICE setList\
  on:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true}}\
  off:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":false}}\
  toggle:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Toggle","params": {"id":0}}\
  white:colorpicker,BRI,0,5,255 $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":$EVTPART1}}\
  pct:colorpicker,BRI,0,5,100 $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"brightness":$EVTPART1}}\
  transition_duration:colorpicker,BRI,1,1,10 $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"transition_duration":$EVTPART1}}\
  toggle_after:colorpicker,BRI,1,1,10 $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\
  rot:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"rgb":[0,255,0]}}\
  status:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":255}}\
  rgb:colorpicker,RGB {$EVTPART1=~/(..)(..)(..)/;my @a=(hex($1),hex($2),hex($3));if($1 ne $2 || $2 ne $3) {qq($\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":0,"rgb":[$a[0],$a[1],$a[2]]}})}else{qq($\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"RGBW.Set","params": {"id":0,"on":true,"white":255,"rgb":[$a[0],$a[1],$a[2]]}})}}
deletereading -q DEVICE status_.*
attr DEVICE comment 1 DEVNAME\
2 DEV_TPC
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 $temp = ReadingsVal($name,'temperature','-100'); my $ip = ReadingsVal($name,'ip','none'); my $reb = ReadingsVal($name,'sys_restart_required','false') eq 'true'?'<a href="/fhem?cmd.dummy=set '.$name.' x_reboot&XHR=1"> ... Notwendigen Reboot durchführen</a>':''; qq(<a href="http://$ip" target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a>$reb<div>Temp: $temp °C</div>)}
attr DEVICE userReadings ip { ReadingsVal($name,"sta_ip",0)}
attr DEVICE webCmd on:off:rgb:pct:white
attr DEVICE jsonMap brightness:pct
set DEVICE attrTemplate speechcontrol_type_light
setreading DEVICE attrTemplateVersion 20240915

Gruß Rico
PS: Wie sehen eure Device aus?
Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly