From 3832fa4e898ddbe495f25f3ee9db0ae50337cddc Mon Sep 17 00:00:00 2001 From: Beta-User <> Date: Tue, 29 Sep 2020 06:32:25 +0000 Subject: [PATCH] zwave.template: add channel identification code + small changes; mqtt2.template: add toggle to 1. chan of 2chan zigbee2mqtt device git-svn-id: https://svn.fhem.de/fhem/trunk@22883 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/lib/AttrTemplate/mqtt2.template | 4 +- fhem/FHEM/lib/AttrTemplate/zwave.template | 14 +++-- .../AttrTemplate/99_attrT_ZWave_Utils.pm | 60 +++++++++++++------ 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/fhem/FHEM/lib/AttrTemplate/mqtt2.template b/fhem/FHEM/lib/AttrTemplate/mqtt2.template index e1930257a..1270819b7 100644 --- a/fhem/FHEM/lib/AttrTemplate/mqtt2.template +++ b/fhem/FHEM/lib/AttrTemplate/mqtt2.template @@ -451,7 +451,7 @@ attr DEVICE setList \ on:noArg $\DEVICETOPIC/l1/set {"state":"ON"}\ off:noArg $\DEVICETOPIC/l1/set {"state":"OFF"}\ toggle:noArg $\DEVICETOPIC/l1/set {"state":"TOGGLE"} -attr DEVICE setStateList on off +attr DEVICE setStateList on off toggle deletereading -q DEVICE (?!associatedWith).* set DEVICE attrTemplate set_associatedWith \CHANNELS=2 \MAKECOPIES=1 attr DEVICE_CH2 setList \ @@ -463,7 +463,7 @@ deletereading -q DEVICE_CH2 (?!associatedWith).* attr DEVICE_CH2 jsonMap state_l1:0 state_l2:state state:0 consumption:0 linkquality:0 power:0 temperature:0 set DEVICE,DEVICE_CH2 attrTemplate speechcontrol_type_switch attr DEVICE,DEVICE_CH2 model zigbee2mqtt_2channel_split -setreading DEVICE,DEVICE_CH2 attrTemplateVersion 20200904 +setreading DEVICE,DEVICE_CH2 attrTemplateVersion 20200929 # zigbee2mqtt 2 channel device with buttons, forum #102866 name:zigbee2mqtt_2channel_split_w_buttons diff --git a/fhem/FHEM/lib/AttrTemplate/zwave.template b/fhem/FHEM/lib/AttrTemplate/zwave.template index 9bb75fdb4..aaae220bb 100644 --- a/fhem/FHEM/lib/AttrTemplate/zwave.template +++ b/fhem/FHEM/lib/AttrTemplate/zwave.template @@ -39,11 +39,12 @@ name:zwave_showcase_show_main_and_channel_devices_2 filter:TYPE=ZWave desc:example template just to identify all main and channel devices for a 2-channel device like Fibaro FGs-223 order:000003 -par:MAINCHANNEL;Main channel of the device - do not proceed if it can't be identified!;{ my $parent = InternalVal("DEVICE","endpointParent",0); return $parent ? $parent : InternalVal("DEVICE","endpointChildren",0) ? "DEVICE" : undef } -#par:CHANNEL01;First channel of the device - do not proceed if it can't be identified!;{ my $parent = InternalVal("DEVICE","endpointParent",0); $parent ne "0" ? $parent : InternalVal("DEVICE","endpointChildren",0) ? "DEVICE" : return undef; my @children = split(",", InternalVal("DEVICE","endpointChildren",0)); return if !$children[0]; $children[0]} -#par:CHANNEL02;Second channel of the device - do not proceed if it can't be identified!;{ my $parent = InternalVal("DEVICE","endpointParent",0); $parent = $parent ? $parent : InternalVal("DEVICE","endpointChildren",0) ? "DEVICE" : return undef; my @children = split(",", InternalVal("DEVICE","endpointChildren",0)); return if !$children[0]; $children[1]} -show MAINCHANNEL -#show MAINCHANNEL,CHANNEL01,CHANNEL02 +par:MAINCHANNEL;Main channel of the device - do not proceed if it can't be identified!;{ FHEM::attrT_ZWave_Utils::identify_channel_devices("DEVICE",0) } +par:CHANNEL01;First channel of the device - do not proceed if it can't be identified!;{ FHEM::attrT_ZWave_Utils::identify_channel_devices("DEVICE",1) } +par:CHANNEL02;Second channel of the device - do not proceed if it can't be identified!;{ FHEM::attrT_ZWave_Utils::identify_channel_devices("DEVICE",2) } +show MAINCHANNEL,CHANNEL01,CHANNEL02 +#{ fhem "trigger $FW_wname JS:location.href='$FW_ME?show=MAINCHANNEL,CHANNEL01,CHANNEL02'" if($cl && $cl->{TYPE} eq "FHEMWEB") } +#http://192.168.2.72:8083/fhem?room=%23devspec%3dZWave%5fSWITCH%5fMULTILEVEL%5f8%2cJalousie%5fWZ%2cZWave%5fSWITCH%5fMULTILEVEL%5f8%2e02&fw_id=15253 name:----Fibaro-devices-section-------- filter:TYPE=ZWave @@ -58,6 +59,7 @@ par:CALLSPEECHRECOGN;Set this to 0 to not set any speech recogn. related attribu par:ICON;ICON as set, defaults to fts_shutter_updown;{ AttrVal("DEVICE","icon","fts_shutter_updown") } attr DEVICE icon ICON deletereading -q DEVICE (?!associatedWith|model.*).* +attr DEVICE devStateIcon { FHEM::attrT_ZWave_Utils::devStateIcon_shutter($name,"FGRM222") } attr DEVICE eventMap { usr=>{'dim.100'=>'dim 99' } } attr DEVICE webCmd dim:stop attr DEVICE cmdIcon stop:fts_shutter_manual @@ -86,7 +88,7 @@ attr DEVICE eventMap { usr=>{'dim.100'=>'dim 99' } } attr DEVICE webCmd dim:stop attr DEVICE cmdIcon stop:fts_shutter_manual attr DEVICE widgetOverride dim:colorpicker,BRI,0,1,99 -attr DEVICE devStateIcon { FHEM::attrT_ZWave_Utils::devStateIcon_venetian_shutter($name,"FGRM222") } +attr DEVICE devStateIcon { FHEM::attrT_ZWave_Utils::devStateIcon_shutter($name,"FGRM222","venetian") } set DEVICE configRollerShutterOperatingModes 2VenetianBlindModeWith2 set DEVICE configReportsType BlindPositionReportsSentToThe1 set DEVICE configSetLamellasBackToPrevious13 0LamellasReturnToPreviouslySet0 diff --git a/fhem/contrib/AttrTemplate/99_attrT_ZWave_Utils.pm b/fhem/contrib/AttrTemplate/99_attrT_ZWave_Utils.pm index b6702d4c6..5f0c5888b 100644 --- a/fhem/contrib/AttrTemplate/99_attrT_ZWave_Utils.pm +++ b/fhem/contrib/AttrTemplate/99_attrT_ZWave_Utils.pm @@ -33,9 +33,22 @@ sub Initialize { return; } -sub devStateIcon_venetian_shutter { +sub identify_channel_devices { + my $devname = shift; + my $wanted = shift // return; + + my $mainId = substr(InternalVal($devname,"nodeIdHex","00"),0,2); + my $wantedId = $mainId; + $wantedId .= "0$wanted" if $wanted; + my @names = devspec2array("TYPE=ZWave:FILTER=nodeIdHex=$wantedId"); + return if !@names; + return $names[0]; +} + +sub devStateIcon_shutter { my $levelname = shift // return; my $model = shift // "FGR223"; + my $mode = shift // "roller"; # or "venetian" my $slatname = $levelname; my $dimlevel= ReadingsNum($levelname,"dim",0); my $ret =""; @@ -44,17 +57,22 @@ sub devStateIcon_venetian_shutter { my $moving = 0; if ($model eq "FGR223") { - my ($def,$defnr) = split(" ", InternalVal($levelname,"DEF",$levelname)); - $defnr++; - my @slatnames = devspec2array("DEF=$def".'.'.$defnr); - $slatname = shift @slatnames; - $slatlevel= ReadingsNum($slatname,"state",0); - $moving = 1 if ReadingsNum($levelname,"power",0) > 0; + if ($mode eq "venetian") { + #my ($def,$defnr) = split(" ", InternalVal($levelname,"DEF",$levelname)); + #$defnr++; + #my @slatnames = devspec2array("DEF=$def".'.'.$defnr); + + $slatname = identify_channel_devices($levelname,2); + $slatlevel= ReadingsNum($slatname,"state",0); + } + $moving = 1 if ReadingsNum($levelname,"power",0) > 0; } if ($model eq "FGRM222") { - $slatlevel= ReadingsNum($levelname,"positionSlat",0); - $slatcommand_string = "positionSlat "; - $moving = 1 if ReadingsNum($levelname,"power",0) > 0; + if ($mode eq "venetian") { + $slatlevel= ReadingsNum($slatname,"positionSlat",0); + $slatcommand_string = "positionSlat "; + } + $moving = 1 if ReadingsNum($levelname,"power",0) > 0; } #levelicon @@ -66,11 +84,13 @@ sub devStateIcon_venetian_shutter { : "" . FW_makeImage($symbol_string,"fts_shutter_10") . " "; #slat - $symbol_string = "fts_blade_arc_close_"; - $slatlevel > 49 ? $symbol_string .= "00" : $slatlevel > 24 ? $symbol_string .= "50" : $slatlevel < 25 ? $symbol_string .= "100" : undef; - $slatlevel > 49 ? $slatcommand_string .= "0" : $slatlevel > 24 ? $slatcommand_string .= "50" : $slatlevel < 25 ? $slatcommand_string .= "25" : undef; - $symbol_string = FW_makeImage($symbol_string,"fts_blade_arc_close_100"); - $ret .= qq($symbol_string $slatlevel %); + if ($mode eq "venetian") { + $symbol_string = "fts_blade_arc_close_"; + $slatlevel > 49 ? $symbol_string .= "00" : $slatlevel > 24 ? $symbol_string .= "50" : $slatlevel < 25 ? $symbol_string .= "100" : undef; + $slatlevel > 49 ? $slatcommand_string .= "0" : $slatlevel > 24 ? $slatcommand_string .= "50" : $slatlevel < 25 ? $slatcommand_string .= "25" : undef; + $symbol_string = FW_makeImage($symbol_string,"fts_blade_arc_close_100"); + $ret .= qq($symbol_string $slatlevel %); + } return "
$ret
attr Jalousie_WZ devStateIcon {{FHEM::attrT::ZWave::devStateIcon_venetian_shutter($name,"FGRM222")}
attr Jalousie_WZ webCmd dim
attr Jalousie_WZ userReadings dim:(dim|reportedState).* {$1 =~ /reportedState/ ? ReadingsNum($name,"reportedState",0):ReadingsNum($name,"state",0)}
+ attr Jalousie_WZ devStateIcon {FHEM::attrT_ZWave_Utils::devStateIcon_shutter($name,"FGRM222")}
attr Jalousie_WZ webCmd dim
attr Jalousie_WZ userReadings dim:(dim|reportedState).* {$1 =~ /reportedState/ ? ReadingsNum($name,"reportedState",0):ReadingsNum($name,"state",0)}
- If slat level is not part of the main device (like Fibaro FGR223, the second FHEM device to control slat level has to have a userReadings attribute for state like this:
+or
+ attr Jalousie_WZ devStateIcon {FHEM::attrT_ZWave_Utils::devStateIcon_shutter($name,"FGR223", "venetian")}
attr Jalousie_WZ webCmd dim
attr Jalousie_WZ userReadings dim:(dim|reportedState).* {$1 =~ /reportedState/ ? ReadingsNum($name,"reportedState",0):ReadingsNum($name,"state",0)}
+
+ Code can be used for blinds with or without venetian blind mode. In cas if and slat level is not part of the main device (like Fibaro FGR223, the second FHEM device to control slat level has to have a userReadings attribute for state like this:
attr ZWave_SWITCH_MULTILEVEL_8.02 userReadings state:swmStatus.* {ReadingsNum($name,"swmStatus",0)}