2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-12 22:56:34 +00:00

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
This commit is contained in:
Beta-User 2020-09-29 06:32:25 +00:00
parent 1ef8b79a64
commit 3832fa4e89
3 changed files with 51 additions and 27 deletions

View File

@ -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

View File

@ -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

View File

@ -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 {
: "<a href=\"/fhem?cmd.dummy=set $levelname $command_string&XHR=1\">" . FW_makeImage($symbol_string,"fts_shutter_10") . "</a> ";
#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(<a href="/fhem?cmd.dummy=set $slatname $slatcommand_string&XHR=1">$symbol_string $slatlevel %</a>);
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(<a href="/fhem?cmd.dummy=set $slatname $slatcommand_string&XHR=1">$symbol_string $slatlevel %</a>);
}
return "<div><p style=\"text-align:right\">$ret</p></div>";
@ -81,21 +101,23 @@ sub devStateIcon_venetian_shutter {
1;
__END__
=pod
=begin html
<a name="attrT_ZWave_Utils"></a>
<h3>attrT_ZWave_Utils</h3>
<ul>
<b>devStateIcon_venetian_shutter</b>
<b>devStateIcon_shutter</b>
<br>
Use this to get a multifunctional iconset to control shutter devices like Fibaro FGRM222 devices in venetian blind mode<br>
Examples:
<ul>
<code>attr Jalousie_WZ devStateIcon {{FHEM::attrT::ZWave::devStateIcon_venetian_shutter($name,"FGRM222")}<br> attr Jalousie_WZ webCmd dim<br>attr Jalousie_WZ userReadings dim:(dim|reportedState).* {$1 =~ /reportedState/ ? ReadingsNum($name,"reportedState",0):ReadingsNum($name,"state",0)}
<code>attr Jalousie_WZ devStateIcon {FHEM::attrT_ZWave_Utils::devStateIcon_shutter($name,"FGRM222")}<br> attr Jalousie_WZ webCmd dim<br>attr Jalousie_WZ userReadings dim:(dim|reportedState).* {$1 =~ /reportedState/ ? ReadingsNum($name,"reportedState",0):ReadingsNum($name,"state",0)}
</code><br>
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:<br>
or <br>
<code>attr Jalousie_WZ devStateIcon {FHEM::attrT_ZWave_Utils::devStateIcon_shutter($name,"FGR223", "venetian")}<br> attr Jalousie_WZ webCmd dim<br>attr Jalousie_WZ userReadings dim:(dim|reportedState).* {$1 =~ /reportedState/ ? ReadingsNum($name,"reportedState",0):ReadingsNum($name,"state",0)}
</code><br>
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:<br>
<code>attr ZWave_SWITCH_MULTILEVEL_8.02 userReadings state:swmStatus.* {ReadingsNum($name,"swmStatus",0)}</code>
</ul>
</ul>