diff --git a/fhem/FHEM/10_MQTT2_DEVICE.pm b/fhem/FHEM/10_MQTT2_DEVICE.pm index d088282b6..0e8f15378 100644 --- a/fhem/FHEM/10_MQTT2_DEVICE.pm +++ b/fhem/FHEM/10_MQTT2_DEVICE.pm @@ -419,6 +419,29 @@ MQTT2_DEVICE_Undef($$) return undef; } +##################################### +# Utility functions for the AttrTemplates +sub +zigbee2mqtt_RGB2JSON($) +{ + my $rgb = shift(@_); + $rgb =~ m/^(..)(..)(..)/; + my( $r, $g, $b ) = (hex($1)/255.0, hex($2)/255.0, hex($3)/255.0); + my %color_hash = (r => $r, g => $g, b => $b); + my %set_hash = ('transition' => 1, 'color' => \%color_hash); + return toJSON(\%set_hash); +} + +sub +zigbee2mqtt_devStateIcon255($) +{ + my ($name) = @_; + return ".*:off:toggle" if(lc(ReadingsVal($name,"state","ON")) eq "off" ); + my $pct = ReadingsVal($name,"brightness","255"); + my $s = $pct > 253 ? "on" : sprintf("dim%02d%%",int((1+int($pct/18))*6.25)); + return ".*:$s:off"; +} + 1; =pod diff --git a/fhem/FHEM/lib/AttrTemplate/mqtt2.template b/fhem/FHEM/lib/AttrTemplate/mqtt2.template index ad4b22f01..c31bd58d2 100644 --- a/fhem/FHEM/lib/AttrTemplate/mqtt2.template +++ b/fhem/FHEM/lib/AttrTemplate/mqtt2.template @@ -48,13 +48,13 @@ filter:TYPE=MQTT2_DEVICE par:NAMEINTHEBRIDGE;name of this device in the bridge;{ AttrVal("DEVICE","readingList","") =~ m,zigbee2mqtt/(.*):, ? $1 : undef } attr DEVICE icon hue_filled_white_and_color_e27_b22 attr DEVICE stateFormat {lc ReadingsVal("$name","state",0)} -attr DEVICE devStateIcon {devStateIcon255($name)} +attr DEVICE devStateIcon {zigbee2mqtt_devStateIcon255($name)} attr DEVICE webCmd toggle:on:off:brightness:color attr DEVICE setList \ on:noArg zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"ON"}\ off:noArg zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"OFF"}\ brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/NAMEINTHEBRIDGE/set {"state":"on","$EVTPART0":"$EVTPART1"}\ - color:colorpicker,RGB {"zigbee2mqtt/NAMEINTHEBRIDGE/set " . encode_json(convertRGBtoR_G_B($EVTPART1))} + color:colorpicker,RGB {"zigbee2mqtt/NAMEINTHEBRIDGE/set " . zigbee2mqtt_RGB2JSON($EVTPART1))} name:zigbee2mqtt_smokeDetector filter:TYPE=MQTT2_DEVICE