2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-14 05:46:35 +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"}\ on:noArg $\DEVICETOPIC/l1/set {"state":"ON"}\
off:noArg $\DEVICETOPIC/l1/set {"state":"OFF"}\ off:noArg $\DEVICETOPIC/l1/set {"state":"OFF"}\
toggle:noArg $\DEVICETOPIC/l1/set {"state":"TOGGLE"} toggle:noArg $\DEVICETOPIC/l1/set {"state":"TOGGLE"}
attr DEVICE setStateList on off attr DEVICE setStateList on off toggle
deletereading -q DEVICE (?!associatedWith).* deletereading -q DEVICE (?!associatedWith).*
set DEVICE attrTemplate set_associatedWith \CHANNELS=2 \MAKECOPIES=1 set DEVICE attrTemplate set_associatedWith \CHANNELS=2 \MAKECOPIES=1
attr DEVICE_CH2 setList \ 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 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 set DEVICE,DEVICE_CH2 attrTemplate speechcontrol_type_switch
attr DEVICE,DEVICE_CH2 model zigbee2mqtt_2channel_split 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 # zigbee2mqtt 2 channel device with buttons, forum #102866
name:zigbee2mqtt_2channel_split_w_buttons name:zigbee2mqtt_2channel_split_w_buttons

View File

@ -39,11 +39,12 @@ name:zwave_showcase_show_main_and_channel_devices_2
filter:TYPE=ZWave filter:TYPE=ZWave
desc:example template just to identify all main and channel devices for a 2-channel device like Fibaro FGs-223 desc:example template just to identify all main and channel devices for a 2-channel device like Fibaro FGs-223
order:000003 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: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!;{ 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: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!;{ 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]} 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 show MAINCHANNEL,CHANNEL01,CHANNEL02
#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-------- name:----Fibaro-devices-section--------
filter:TYPE=ZWave 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") } par:ICON;ICON as set, defaults to fts_shutter_updown;{ AttrVal("DEVICE","icon","fts_shutter_updown") }
attr DEVICE icon ICON attr DEVICE icon ICON
deletereading -q DEVICE (?!associatedWith|model.*).* 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 eventMap { usr=>{'dim.100'=>'dim 99' } }
attr DEVICE webCmd dim:stop attr DEVICE webCmd dim:stop
attr DEVICE cmdIcon stop:fts_shutter_manual 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 webCmd dim:stop
attr DEVICE cmdIcon stop:fts_shutter_manual attr DEVICE cmdIcon stop:fts_shutter_manual
attr DEVICE widgetOverride dim:colorpicker,BRI,0,1,99 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 configRollerShutterOperatingModes 2VenetianBlindModeWith2
set DEVICE configReportsType BlindPositionReportsSentToThe1 set DEVICE configReportsType BlindPositionReportsSentToThe1
set DEVICE configSetLamellasBackToPrevious13 0LamellasReturnToPreviouslySet0 set DEVICE configSetLamellasBackToPrevious13 0LamellasReturnToPreviouslySet0

View File

@ -33,9 +33,22 @@ sub Initialize {
return; 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 $levelname = shift // return;
my $model = shift // "FGR223"; my $model = shift // "FGR223";
my $mode = shift // "roller"; # or "venetian"
my $slatname = $levelname; my $slatname = $levelname;
my $dimlevel= ReadingsNum($levelname,"dim",0); my $dimlevel= ReadingsNum($levelname,"dim",0);
my $ret =""; my $ret ="";
@ -44,17 +57,22 @@ sub devStateIcon_venetian_shutter {
my $moving = 0; my $moving = 0;
if ($model eq "FGR223") { if ($model eq "FGR223") {
my ($def,$defnr) = split(" ", InternalVal($levelname,"DEF",$levelname)); if ($mode eq "venetian") {
$defnr++; #my ($def,$defnr) = split(" ", InternalVal($levelname,"DEF",$levelname));
my @slatnames = devspec2array("DEF=$def".'.'.$defnr); #$defnr++;
$slatname = shift @slatnames; #my @slatnames = devspec2array("DEF=$def".'.'.$defnr);
$slatlevel= ReadingsNum($slatname,"state",0);
$moving = 1 if ReadingsNum($levelname,"power",0) > 0; $slatname = identify_channel_devices($levelname,2);
$slatlevel= ReadingsNum($slatname,"state",0);
}
$moving = 1 if ReadingsNum($levelname,"power",0) > 0;
} }
if ($model eq "FGRM222") { if ($model eq "FGRM222") {
$slatlevel= ReadingsNum($levelname,"positionSlat",0); if ($mode eq "venetian") {
$slatcommand_string = "positionSlat "; $slatlevel= ReadingsNum($slatname,"positionSlat",0);
$moving = 1 if ReadingsNum($levelname,"power",0) > 0; $slatcommand_string = "positionSlat ";
}
$moving = 1 if ReadingsNum($levelname,"power",0) > 0;
} }
#levelicon #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> "; : "<a href=\"/fhem?cmd.dummy=set $levelname $command_string&XHR=1\">" . FW_makeImage($symbol_string,"fts_shutter_10") . "</a> ";
#slat #slat
$symbol_string = "fts_blade_arc_close_"; if ($mode eq "venetian") {
$slatlevel > 49 ? $symbol_string .= "00" : $slatlevel > 24 ? $symbol_string .= "50" : $slatlevel < 25 ? $symbol_string .= "100" : undef; $symbol_string = "fts_blade_arc_close_";
$slatlevel > 49 ? $slatcommand_string .= "0" : $slatlevel > 24 ? $slatcommand_string .= "50" : $slatlevel < 25 ? $slatcommand_string .= "25" : undef; $slatlevel > 49 ? $symbol_string .= "00" : $slatlevel > 24 ? $symbol_string .= "50" : $slatlevel < 25 ? $symbol_string .= "100" : undef;
$symbol_string = FW_makeImage($symbol_string,"fts_blade_arc_close_100"); $slatlevel > 49 ? $slatcommand_string .= "0" : $slatlevel > 24 ? $slatcommand_string .= "50" : $slatlevel < 25 ? $slatcommand_string .= "25" : undef;
$ret .= qq(<a href="/fhem?cmd.dummy=set $slatname $slatcommand_string&XHR=1">$symbol_string $slatlevel %</a>); $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>"; return "<div><p style=\"text-align:right\">$ret</p></div>";
@ -81,21 +101,23 @@ sub devStateIcon_venetian_shutter {
1; 1;
__END__ __END__
=pod =pod
=begin html =begin html
<a name="attrT_ZWave_Utils"></a> <a name="attrT_ZWave_Utils"></a>
<h3>attrT_ZWave_Utils</h3> <h3>attrT_ZWave_Utils</h3>
<ul> <ul>
<b>devStateIcon_venetian_shutter</b> <b>devStateIcon_shutter</b>
<br> <br>
Use this to get a multifunctional iconset to control shutter devices like Fibaro FGRM222 devices in venetian blind mode<br> Use this to get a multifunctional iconset to control shutter devices like Fibaro FGRM222 devices in venetian blind mode<br>
Examples: Examples:
<ul> <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> </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> <code>attr ZWave_SWITCH_MULTILEVEL_8.02 userReadings state:swmStatus.* {ReadingsNum($name,"swmStatus",0)}</code>
</ul> </ul>
</ul> </ul>