############################################## # $Id$ # # packages #################################################################### package FHEM::attrT_ZWave_Utils; ## no critic 'Package declaration' use strict; use warnings; use GPUtils qw(GP_Import); ## Import der FHEM Funktionen #-- Run before package compilation BEGIN { # Import from main context GP_Import( qw( InternalVal readingsSingleUpdate readingsBulkUpdate ReadingsVal ReadingsNum ReadingsAge devspec2array FW_makeImage defs Log3 ) ); } sub main::attrT_ZWave_Utils_Initialize { goto &Initialize } # initialize ################################################################## sub Initialize { my $hash = shift; return; } 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 =''; my $slatlevel = 0; my $slatcommand_string = 'dim '; my $moving = 0; if ($model eq 'FGR223') { if ($mode eq 'venetian') { $slatname = identify_channel_devices($levelname,2); $slatlevel= ReadingsNum($slatname,'state',0); } $moving = 1 if ReadingsNum($levelname,'power',0) > 0; } if ($model eq 'FGRM222') { if ($mode eq 'venetian') { $slatlevel= ReadingsNum($slatname,'positionSlat',0); $slatcommand_string = 'positionSlat '; } $moving = 1 if ReadingsNum($levelname,'power',0) > 0; } #levelicon my $symbol_string = 'fts_shutter_'; my $command_string = 'dim 99'; $command_string = 'dim 0' if $dimlevel > 50; $symbol_string .= int ((109 - $dimlevel)/10)*10; $ret .= $moving ? "" . FW_makeImage('edit_settings','edit_settings') . " " : "" . FW_makeImage($symbol_string,'fts_shutter_10') . " "; #slat 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_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)}
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)}
attr ZWave_SWITCH_MULTILEVEL_8.02 userReadings state:swmStatus.* {ReadingsNum($name,"swmStatus",0)}