diff --git a/fhem/contrib/HMCCU/FHEM/88_HMCCU.pm b/fhem/contrib/HMCCU/FHEM/88_HMCCU.pm index 6ebe5e147..eae7a7cfb 100644 --- a/fhem/contrib/HMCCU/FHEM/88_HMCCU.pm +++ b/fhem/contrib/HMCCU/FHEM/88_HMCCU.pm @@ -4,7 +4,7 @@ # # $Id: 88_HMCCU.pm 18745 2019-02-26 17:33:23Z zap $ # -# Version 4.4.065 +# Version 4.4.066 # # Module for communication between FHEM and Homematic CCU2/3. # @@ -58,7 +58,7 @@ my %HMCCU_CUST_CHN_DEFAULTS; my %HMCCU_CUST_DEV_DEFAULTS; # HMCCU version -my $HMCCU_VERSION = '4.4.065'; +my $HMCCU_VERSION = '4.4.066'; # Timeout for CCU requests (seconds) my $HMCCU_TIMEOUT_REQUEST = 4; @@ -263,6 +263,7 @@ sub HMCCU_GetAffectedAddresses ($); sub HMCCU_GetCCUDeviceParam ($$); sub HMCCU_GetChannelName ($$;$); sub HMCCU_GetChannelRole ($;$); +sub HMCCU_GetDeviceRoles ($$$;$); sub HMCCU_GetClientDeviceModel ($;$); sub HMCCU_GetDefaultInterface ($); sub HMCCU_GetDeviceAddresses ($;$$); @@ -308,6 +309,7 @@ sub HMCCU_SetSCDatapoints ($$;$$); sub HMCCU_GetStateValues ($;$$); sub HMCCU_GetValidDatapoints ($$$$;$); sub HMCCU_IsValidDatapoint ($$$$$); +sub HMCCU_SetInitialAttributes ($$); sub HMCCU_SetDefaultAttributes ($;$); sub HMCCU_SetMultipleDatapoints ($$); sub HMCCU_SetMultipleParameters ($$$;$); @@ -375,7 +377,7 @@ sub HMCCU_Initialize ($) ' ccudefaults'. ' ccudef-hmstatevals:textField-long ccudef-substitute:textField-long'. ' ccudef-readingformat:name,namelc,address,addresslc,datapoint,datapointlc'. - ' ccudef-stripnumber ccuReadingPrefix'. + ' ccudef-stripnumber ccudef-attributes ccuReadingPrefix'. ' ccuflags:multiple-strict,procrpc,dptnocheck,logCommand,noagg,nohmstate,updGroupMembers,'. 'logEvents,noEvents,noInitialUpdate,noReadings,nonBlocking,reconnect,logPong,trace,logEnhanced'. ' ccuReqTimeout ccuGetVars rpcPingCCU'. @@ -1678,15 +1680,19 @@ sub HMCCU_Get ($@) } elsif ($opt eq 'ccudevices') { my $devTable = ''. - ''; + ''; foreach my $di (sort keys %{$hash->{hmccu}{device}}) { foreach my $da (sort keys %{$hash->{hmccu}{device}{$di}}) { next if ($hash->{hmccu}{device}{$di}{$da}{_addtype} ne 'dev'); my $chn = exists($hash->{hmccu}{dev}{$da}) ? $hash->{hmccu}{dev}{$da}{channels} : '?'; + my @roles = HMCCU_GetDeviceRoles ($hash, $di, $da, 1); + my %suppRoles; + $suppRoles{$_}++ for @roles; $devTable .= "". "". "". "". + "". "\n"; } } @@ -3186,6 +3192,7 @@ sub HMCCU_CreateDevice ($$$$$$$$) $cs->{defSuccess}{$devName} = "$defAdd [$ccuName]"; # Set device attributes + HMCCU_SetInitialAttributes ($hash, $devName); foreach my $da (keys %$ah) { $ret = CommandAttr (undef, "$devName $da ".$ah->{$da}); if ($ret) { @@ -3452,7 +3459,7 @@ sub HMCCU_SetSCAttributes ($$;$) my $ccuType = $clHash->{ccutype} // return; my $ccuAddr = $clHash->{ccuaddr} // return; my $ccuIf = $clHash->{ccuif} // return; - $detect = HMCCU_DetectDevice ($ioHash, $ccuAddr, $ccuIf) if ($detect == -1); + $detect //= HMCCU_DetectDevice ($ioHash, $ccuAddr, $ccuIf); # Get readable and writeable datapoints my @dpWrite = (); @@ -3522,6 +3529,36 @@ sub HMCCU_GetChannelRole ($;$) return ''; } +###################################################################### +# Return role(s) of a device or a channel identified by address +# Parameters: +# $mode: 0 = All roles, 1 = Only supported roles +###################################################################### + +sub HMCCU_GetDeviceRoles ($$$;$) +{ + my ($ioHash, $iface, $address, $mode) = @_; + $mode //= 0; # By default get all roles + my @roles = (); + + if (exists($ioHash->{hmccu}{device}{$iface}{$address})) { + if ($ioHash->{hmccu}{device}{$iface}{$address}{_addtype} eq 'dev') { + foreach my $chAddress (split(',', $ioHash->{hmccu}{device}{$iface}{$address}{CHILDREN})) { + my $r = $ioHash->{hmccu}{device}{$iface}{$chAddress}{TYPE}; + push @roles, $r if (exists($ioHash->{hmccu}{device}{$iface}{$chAddress}) && + $ioHash->{hmccu}{device}{$iface}{$chAddress}{_addtype} eq 'chn' && + ($mode == 0 || ($mode == 1 && exists($HMCCU_STATECONTROL->{$r})))); + } + } + elsif ($ioHash->{hmccu}{device}{$iface}{$address}{_addtype} eq 'chn') { + my $r = $ioHash->{hmccu}{device}{$iface}{$address}{TYPE}; + push @roles, $r if ($mode == 0 || ($mode == 1 && exists($HMCCU_STATECONTROL->{$r}))); + } + } + + return @roles; +} + ###################################################################### # Get device configuration for all interfaces from CCU # Currently binary interfaces like CUxD are not supported @@ -3591,7 +3628,7 @@ sub HMCCU_GetDeviceConfig ($) foreach my $d (@devList) { my $clHash = $defs{$d}; - HMCCU_SetSCAttributes ($ioHash, $clHash, -1); + HMCCU_SetSCAttributes ($ioHash, $clHash); HMCCU_UpdateDevice ($ioHash, $clHash); HMCCU_UpdateDeviceRoles ($ioHash, $clHash); @@ -3763,11 +3800,11 @@ sub HMCCU_DeviceDescToStr ($$) my $channelType = $devDesc->{TYPE}; my $status = exists($HMCCU_STATECONTROL->{$channelType}) ? ' known' : ''; $result .= $a eq $devAddr ? "Device $a" : "Channel $a"; - $result .= " $devDesc->{_name} [$channelType]$status\n"; + $result .= " $devDesc->{_name} [$channelType]$status
"; foreach my $n (sort keys %{$devDesc}) { next if ($n =~ /^_/ || $n =~ /^(ADDRESS|TYPE|INDEX|VERSION)$/ || !defined($devDesc->{$n}) || $devDesc->{$n} eq ''); - $result .= " $n: ".HMCCU_FlagsToStr ('device', $n, $devDesc->{$n}, ',', '')."\n"; + $result .= "  $n: ".HMCCU_FlagsToStr ('device', $n, $devDesc->{$n}, ',', '')."
"; } } @@ -3783,7 +3820,7 @@ sub HMCCU_ParamsetDescToStr ($$) { my ($ioHash, $object) = @_; - my $result = ''; + my $result = ''; my $address; my $iface; @@ -3814,11 +3851,11 @@ sub HMCCU_ParamsetDescToStr ($$) } foreach my $c (@chnList) { - $result .= $c eq 'd' ? "Device\n" : "Channel $c\n"; + $result .= $c eq 'd' ? "Device
" : "Channel $c
"; foreach my $ps (sort keys %{$model->{$c}}) { - $result .= " Paramset $ps\n"; - $result .= join ("\n", map { - " ".$_.": ". + $result .= "  Paramset $ps
"; + $result .= join ("
", map { + "    ".$_.": ". $model->{$c}{$ps}{$_}{TYPE}. " [".HMCCU_FlagsToStr ('model', 'OPERATIONS', $model->{$c}{$ps}{$_}{OPERATIONS}, ',', '')."]". " [".HMCCU_FlagsToStr ('model', 'FLAGS', $model->{$c}{$ps}{$_}{FLAGS}, ',', '')."]". @@ -3827,10 +3864,12 @@ sub HMCCU_ParamsetDescToStr ($$) " DFLT=".HMCCU_StripNumber ($model->{$c}{$ps}{$_}{DEFAULT}, 2). HMCCU_ISO2UTF (HMCCU_DefStr ($model->{$c}{$ps}{$_}{UNIT}, " UNIT=")). HMCCU_DefStr ($model->{$c}{$ps}{$_}{VALUE_LIST}, " VALUES=") - } sort keys %{$model->{$c}{$ps}})."\n"; + } sort keys %{$model->{$c}{$ps}})."
"; } } + $result .= ''; + return $result; } @@ -4992,16 +5031,17 @@ sub HMCCU_FormatDeviceInfo ($) foreach my $dpspec (split ("\n", $devinfo)) { if ($dpspec =~ /^D/) { my ($t, $d_iface, $d_addr, $d_name, $d_type) = split (';', $dpspec); - $result .= "DEV $d_name $d_addr interface=$d_iface type=$d_type\n"; + $result .= "DEV $d_name $d_addr interface=$d_iface type=$d_type
"; } else { my ($t, $c_addr, $c_name, $d_name, $d_type, $d_value, $d_flags) = split (';', $dpspec); + $d_name =~ s/^[^:]+:(.+)$/$1/; if ($c_addr ne $c_oaddr) { - $result .= "CHN $c_addr $c_name\n"; + $result .= "CHN $c_addr $c_name
"; $c_oaddr = $c_addr; } my $dt = exists($vtypes{$d_type}) ? $vtypes{$d_type} : $d_type; - $result .= " DPT {$dt} $d_name = $d_value [$d_flags]\n"; + $result .= "   $d_name = $d_value {$dt} [$d_flags]
"; } } @@ -6299,6 +6339,21 @@ sub HMCCU_GetAttribute ($$$$) return $value; } +###################################################################### +# Set initial attributes after device definition +###################################################################### + +sub HMCCU_SetInitialAttributes ($$) +{ + my ($ioHash, $clName) = @_; + + my $ccudefAttributes = AttrVal ($ioHash->{NAME}, 'ccudef-attributes', 'room=Homematic'); + foreach my $a (split(',', $ccudefAttributes)) { + my ($an, $av) = split('=', $a); + CommandAttr (undef, "$clName $an $av") if (defined($av)); + } +} + ###################################################################### # Set default attributes for client device. # Optionally delete obsolete attributes. @@ -6494,11 +6549,11 @@ sub HMCCU_UpdateRoleCommands ($$;$) } if (defined($par) && $par ne '') { - if ($par =~ /^#(.+)$/) { + if ($par =~ /^#([^=]+)/) { # Parameter list my $argList = ''; $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{parname} = $1; - $pt = 1; # Enum + $pt = 1; # Enum / List of fixed values if ($paramDef->{TYPE} eq 'ENUM' && defined($paramDef->{VALUE_LIST})) { $argList = $paramDef->{VALUE_LIST}; @@ -6506,8 +6561,14 @@ sub HMCCU_UpdateRoleCommands ($$;$) else { my ($pn, $pv) = split('=', $par); $argList = $pv // ''; - foreach my $e (split(',', $argList)) { - $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{look}{$e} = $e; + my %valList; + foreach my $cv (split(',', $HMCCU_STATECONTROL->{$role}{V})) { + my ($vn, $vv) = split(':', $cv); + $valList{$vn} = $vv // $vn; + } + my @el = split(',', $argList); + while (my ($i, $e) = each @el) { + $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{look}{$e} = $valList{$e} // $i; } } @@ -6538,9 +6599,16 @@ sub HMCCU_UpdateRoleCommands ($$;$) } else { # Fix value. Command has no argument + my ($pn, $pv) = split('=', $par); $pt = 3; - $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{parname} = $dpt; - $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{args} = $par; + if (defined($pv)) { + $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{parname} = $pn; + $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{args} = $pv; + } + else { + $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{parname} = $dpt; + $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{subcmd}{$scn}{args} = $par; + } } } @@ -6559,6 +6627,8 @@ sub HMCCU_UpdateRoleCommands ($$;$) } if (exists($clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{channel})) { + # Same command in multiple channels. + # Channel number will be set to control channel during command execution $clHash->{hmccu}{roleCmds}{$cmdType}{$cmd}{channel} = '?'; } else { @@ -6973,7 +7043,7 @@ sub HMCCU_ExecuteGetDeviceInfoCommand ($@) my $iface = HMCCU_GetDeviceInterface ($ioHash, $address); my $result = HMCCU_GetDeviceInfo ($clHash, $address); return HMCCU_SetError ($clHash, -2) if ($result eq ''); - my $devInfo = 'Device channels and datapoints

'; + my $devInfo = 'Device channels and datapoints

'; $devInfo .= HMCCU_FormatDeviceInfo ($result); my $detect = HMCCU_DetectDevice ($ioHash, $address, $iface); if (defined($detect)) { @@ -7004,11 +7074,12 @@ sub HMCCU_ExecuteGetDeviceInfoCommand ($@) $devInfo .= "
Current control datapoint = $cc.$cd
" if ($cc ne '?'); $devInfo .= '
Device description

'; $result = HMCCU_DeviceDescToStr ($ioHash, $clHash->{TYPE} eq 'HMCCU' ? $address : $clHash); - $devInfo .= defined($result) ? $result : "Can't get device description"; + $devInfo .= defined($result) ? $result : "Can't get device description
"; if ($clHash->{TYPE} ne 'HMCCU') { $devInfo .= '
Defaults

'; $devInfo .= HMCCU_GetDefaults ($clHash); } + $devInfo .= ''; return $devInfo; } @@ -7626,14 +7697,14 @@ sub HMCCU_DetectDevice ($$$) # Determine parameters for device definition if ($stateRoleCnt == 1 && $ctrlRoleCnt == 0) { - # One channel with statedatapoint => HMCCUCHN + # One channel with statedatapoint, but no controldatapoint (read only) => HMCCUCHN $di{defSCh} = $stateRoles[0]->{channel}; $di{defMod} = 'HMCCUCHN'; $di{defAdd} = "$devAdd:$di{defSCh}"; $di{level} = 1; } elsif ($stateRoleCnt == 0 && $ctrlRoleCnt == 1) { - # One channel with controldatapoint => HMCCUCHN + # One channel with controldatapoint, but no statedatapoint (write only) => HMCCUCHN $di{defCCh} = $controlRoles[0]->{channel}; $di{defMod} = 'HMCCUCHN'; $di{defAdd} = "$devAdd:$di{defCCh}"; @@ -7643,13 +7714,13 @@ sub HMCCU_DetectDevice ($$$) $di{defSCh} = $stateRoles[0]->{channel}; $di{defCCh} = $controlRoles[0]->{channel}; if ($stateRoles[0]->{channel} == $controlRoles[0]->{channel}) { - # One channel with controldatapoint and statedatapoint => HMCCUCHN + # One channel with controldatapoint and statedatapoint (read + write)=> HMCCUCHN $di{defMod} = 'HMCCUCHN'; $di{defAdd} = "$devAdd:$di{defCCh}"; $di{level} = 1; } else { - # Two different channels for controldatapoint and statedatapoint => HMCCUDEV + # Two different channels for controldatapoint and statedatapoint (read + write) => HMCCUDEV $di{defMod} = 'HMCCUDEV'; $di{defAdd} = $devAdd; $di{level} = 4; @@ -7658,7 +7729,8 @@ sub HMCCU_DetectDevice ($$$) elsif ($stateRoleCnt > 1 || $ctrlRoleCnt > 1) { # Multiple channels found if ($cntUniqStateRoles == 1 && $cntUniqCtrlRoles == 0 || - $cntUniqStateRoles == 0 && $cntUniqCtrlRoles == 1 || ( + $cntUniqStateRoles == 0 && $cntUniqCtrlRoles == 1 || + $cntUniqCtrlRoles > 1 || ( $cntUniqStateRoles == 1 && $cntUniqCtrlRoles == 1 && $stateRoles[0]->{role} eq $controlRoles[0]->{role} ) ) { @@ -9651,7 +9723,7 @@ sub HMCCU_MaxHashEntries ($$) which reacts with execution of command 'get ccuConfig' on these events.
  • get <name> ccuDevices
    - Show table of CCU devices. + Show table of CCU devices including channel roles supported by HMCCU auto detection.

  • get <name> ccumsg {service|alarm}
    Query active service or alarm messages from CCU. Generate FHEM event for each message. @@ -9770,6 +9842,12 @@ sub HMCCU_MaxHashEntries ($$) Example: Find devices with low batteries. Generate reading in HTML format.
    name=battery,filter:name=.*,read:(LOWBAT|LOW_BAT),if:any=yes,else:no,prefix:batt_,coll:NAME!All batteries OK,html:/home/battery.cfg

  • +
  • ccudef-attributes {<attrName>=<attrValue>[;...] | none}
    + Define attributes which are assigned to newly defined HMCCUDEV or HMCCUCHN devices. By default the following + attributes will be assigned:
    + room=Homematic
    + If attribute is set to 'none', no attributes will be assigned to new devices. +

  • ccudef-hmstatevals <subst-rule[;...]>
    Set global rules for calculation of reading hmstate.

  • diff --git a/fhem/contrib/HMCCU/FHEM/88_HMCCUCHN.pm b/fhem/contrib/HMCCU/FHEM/88_HMCCUCHN.pm index 2a26d6b57..e82ea835a 100644 --- a/fhem/contrib/HMCCU/FHEM/88_HMCCUCHN.pm +++ b/fhem/contrib/HMCCU/FHEM/88_HMCCUCHN.pm @@ -4,7 +4,7 @@ # # $Id: 88_HMCCUCHN.pm 18552 2019-02-10 11:52:28Z zap $ # -# Version 4.4.037 +# Version 4.4.038 # # (c) 2021 zap (zap01 t-online de) # @@ -117,7 +117,7 @@ sub HMCCUCHN_Define ($@) else { # CCU not ready during FHEM start if (!defined($ioHash) || $ioHash->{ccustate} ne 'active') { - HMCCU_Log ($hash, 2, 'Cannot detect IO device, maybe CCU not ready. Trying later ...'); + HMCCU_Log ($hash, 3, 'Cannot detect IO device, maybe CCU not ready. Trying later ...'); $hash->{ccudevstate} = 'pending'; return undef; } @@ -142,6 +142,7 @@ sub HMCCUCHN_Define ($@) sub HMCCUCHN_InitDevice ($$) { my ($ioHash, $devHash) = @_; + my $name = $devHash->{NAME}; my $devspec = $devHash->{hmccu}{devspec}; return 1 if (!HMCCU_IsValidChannel ($ioHash, $devspec, 7)); @@ -173,6 +174,8 @@ sub HMCCUCHN_InitDevice ($$) HMCCU_Log ($devHash, 2, "Cannot set default state- and control datapoints"); } + HMCCU_SetInitialAttributes ($ioHash, $name); + if (!exists($devHash->{hmccu}{nodefaults}) || $devHash->{hmccu}{nodefaults} == 0) { if (!HMCCU_SetDefaultAttributes ($devHash)) { HMCCU_SetDefaults ($devHash); diff --git a/fhem/contrib/HMCCU/FHEM/88_HMCCUDEV.pm b/fhem/contrib/HMCCU/FHEM/88_HMCCUDEV.pm index 2942f0389..14c6f8d1e 100644 --- a/fhem/contrib/HMCCU/FHEM/88_HMCCUDEV.pm +++ b/fhem/contrib/HMCCU/FHEM/88_HMCCUDEV.pm @@ -4,7 +4,7 @@ # # $Id: 88_HMCCUDEV.pm 18552 2019-02-10 11:52:28Z zap $ # -# Version 4.4.045 +# Version 4.4.046 # # (c) 2021 zap (zap01 t-online de) # @@ -139,7 +139,7 @@ sub HMCCUDEV_Define ($@) else { # CCU not ready during FHEM start if (!defined($ioHash) || $ioHash->{ccustate} ne 'active') { - HMCCU_Log ($hash, 2, 'Cannot detect IO device, maybe CCU not ready. Trying later ...'); + HMCCU_Log ($hash, 3, 'Cannot detect IO device, maybe CCU not ready. Trying later ...'); $hash->{ccudevstate} = 'pending'; return undef; } @@ -215,6 +215,8 @@ sub HMCCUDEV_InitDevice ($$) HMCCU_Log ($devHash, 2, "Cannot set default state- and control datapoints"); } + HMCCU_SetInitialAttributes ($ioHash, $name); + if (!exists($devHash->{hmccu}{nodefaults}) || $devHash->{hmccu}{nodefaults} == 0) { my $chn = $detect->{defCCh} != -1 ? $detect->{defCCh} : $detect->{defSCh}; if (!HMCCU_SetDefaultAttributes ($devHash, { diff --git a/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm b/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm index 298ee2adf..5a912b3fd 100644 --- a/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm +++ b/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm @@ -4,7 +4,7 @@ # # $Id: HMCCUConf.pm 18552 2019-02-10 11:52:28Z zap $ # -# Version 4.8.025 +# Version 4.8.027 # # Configuration parameters for HomeMatic devices. # @@ -28,7 +28,7 @@ use vars qw(%HMCCU_CHN_DEFAULTS); use vars qw(%HMCCU_DEV_DEFAULTS); use vars qw(%HMCCU_SCRIPTS); -$HMCCU_CONFIG_VERSION = '4.8.025'; +$HMCCU_CONFIG_VERSION = '4.8.027'; ###################################################################### # Map subtype to default role. Subtype is only available for HMIP @@ -67,11 +67,14 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; 'ALARM_SWITCH_VIRTUAL_RECEIVER' => { F => 3, S => 'ACOUSTIC_ALARM_ACTIVE', C => 'ACOUSTIC_ALARM_SELECTION', V => '', P => 2 }, + 'MOTION_DETECTOR' => { + F => 3, S => 'MOTION', C => '', V => '', P => 1 + }, 'MOTIONDETECTOR_TRANSCEIVER' => { - F => 3, S => 'MOTION', C => 'MOTION_DETECTION_ACTIVE', V => 'on:1,off:0', P => 2 + F => 3, S => 'MOTION', C => 'MOTION_DETECTION_ACTIVE', V => 'active:1,inactive:0', P => 2 }, 'PRESENCEDETECTOR_TRANSCEIVER' => { - F => 3, S => 'PRESENCE_DETECTION_STATE', C => 'PRESENCE_DETECTION_ACTIVE', V => 'on:1,off:0', P => 2 + F => 3, S => 'PRESENCE_DETECTION_STATE', C => 'PRESENCE_DETECTION_ACTIVE', V => 'active:1,inactive:0', P => 2 }, 'SMOKE_DETECTOR' => { F => 3, S => 'BidCos-RF:STATE,SMOKE_DETECTOR_ALARM_STATUS', C => 'HmIP-RF:SMOKE_DETECTOR_COMMAND', V => '', P => 2 @@ -141,6 +144,9 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; }, 'CLIMATECONTROL_REGULATOR' => { F => 3, S => 'LEVEL', C => 'SETPOINT', V => 'on:30.5,off:4.5', P => 2 + }, + 'CLIMATECONTROL_VENT_DRIVE' => { + F => 3, S => 'VALVE_STATE', C => '', V => '', P => 2 } ); @@ -162,8 +168,12 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; '(C#\.)?LEVEL$:+pct', 'DIMMER_VIRTUAL_RECEIVER' => '(C#\.)?LEVEL$:+pct', + 'MOTION_DETECTOR' => + '^(C#\.)?BRIGHTNESS$:brightness;(C#\.)?MOTION:motion', + 'MOTIONDETECTOR_TRANSCEIVER' => + '^(C#\.)?ILLUMINATION$:brightness;^(C#\.)?MOTION$:motion;(C#\.)?MOTION_DETECTION_ACTIVE$:detection', 'PRESENCEDETECTOR_TRANSCEIVER' => - '(C#\.)?ILLUMINATION:brightness;(C#\.)?PRESENCE_DETECTION_STATE:presence', + '^(C#\.)?ILLUMINATION$:brightness;(C#\.)?PRESENCE_DETECTION_STATE:presence;(C#\.)?PRESENCE_DETECTION_ACTIVE:detection', 'WEATHER' => '(C#\.)?TEMPERATURE$:+measured-temp;'. '(C#\.)?HUMIDITY$:+humidity', @@ -203,17 +213,18 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; # Function: # A Perl function name # Datapoint-Definition: -# Paramset:Datapoint:[Parameter=]FixedValue[,FixedValue] +# Paramset:Datapoint:[Parameter=]FixedValue # Paramset:Datapoint:?Parameter # Paramset:Datapoint:?Parameter=Default-Value -# Paramset:Datapoint:#Parameter +# Paramset:Datapoint:#Parameter[=FixedValue,[...]] # Paramset:Datapoint:*Parameter=Default-Value # Paramset: # V=VALUES, M=MASTER (channel), D=MASTER (device), I=INTERNAL # Parameter characters: # ? = any value is accepted -# # = datapoint must have type ENUM. Valid values are taken from -# parameter set description. +# # = If datapoint is of type ENUM, values are taken from +# parameter set description. Otherwise a list of values must +# be specified. # * = internal value $hash->{hmccu}{values}{parameterName} # If Default-Value is preceeded by + or -, value is added to or # subtracted from current datapoint value @@ -221,12 +232,11 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; %HMCCU_ROLECMDS = ( 'MOTIONDETECTOR_TRANSCEIVER' => { - 'on' => 'V:MOTION_DETECTION_ACTIVE:1', - 'off' => 'V:MOTION_DETECTION_ACTIVE:0' + 'detection' => 'V:MOTION_DETECTION_ACTIVE:#detection=inactive,active', + 'reset' => 'V:RESET_MOTION:1' }, 'PRESENCEDETECTOR_TRANSCEIVER' => { - 'on' => 'V:PRESENCE_DETECTION_ACTIVE:1', - 'off' => 'V:PRESENCE_DETECTION_ACTIVE:0', + 'detection' => 'V:PRESENCE_DETECTION_ACTIVE:#detection=inactive,active', 'reset' => 'V:RESET_PRESENCE:1' }, 'SMOKE_DETECTOR' => { @@ -351,11 +361,16 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; 'SHUTTER_CONTACT_TRANSCEIVER' => { '_none_' => '' }, + 'MOTION_DETECTOR' => { + '_none_' => '' + }, 'MOTIONDETECTOR_TRANSCEIVER' => { - 'cmdIcon' => 'on:general_an off:general_aus' + 'cmdIcon' => 'reset:rc_BACK', + 'webCmd' => 'detection:reset' }, 'PRESENCEDETECTOR_TRANSCEIVER' => { - 'cmdIcon' => 'on:general_an off:general_aus' + 'cmdIcon' => 'reset:rc_BACK', + 'webCmd' => 'detection:reset' }, 'KEY' => { 'event-on-update-reading' => 'PRESS.*', @@ -426,6 +441,9 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; 'cmdIcon' => 'on:general_an off:general_aus', 'webCmd' => 'desired-temp:on:off', 'widgetOverride' => 'desired-temp:slider,4.5,0.5,30.5,1' + }, + 'CLIMATECONTROL_VENT_DRIVE' => { + '_none_' => '' } ); @@ -438,12 +456,16 @@ $HMCCU_CONFIG_VERSION = '4.8.025'; ###################################################################### %HMCCU_CONVERSIONS = ( + 'MOTION_DETECTOR' => { + 'MOTION' => { '0' => 'noMotion', 'false' => 'noMotion', '1' => 'motion', 'true' => 'motion' } + }, 'MOTIONDETECTOR_TRANSCEIVER' => { 'MOTION' => { '0' => 'noMotion', 'false' => 'noMotion', '1' => 'motion', 'true' => 'motion' }, + 'MOTION_DETECTION_ACTIVE' => { '0' => 'inactive', 'false' => 'inactive', '1' => 'active', 'true', 'active' } }, 'PRESENCEDETECTOR_TRANSCEIVER' => { 'PRESENCE_DETECTION_STATE' => { '0' => 'noPresence', 'false' => 'noPresence', '1' => 'presence', 'true' => 'presence' }, - 'PRESENCE_DETECTION_ACTIVE' => { '0' => 'off', 'false' => 'off', '1' => 'on', 'true', 'on' } + 'PRESENCE_DETECTION_ACTIVE' => { '0' => 'inactive', 'false' => 'inactive', '1' => 'active', 'true', 'active' } }, 'KEY' => { 'PRESS_SHORT' => { '1' => 'pressed', 'true' => 'pressed' }, diff --git a/fhem/contrib/HMCCU/controls_HMCCU.txt b/fhem/contrib/HMCCU/controls_HMCCU.txt index 3f30ee2f3..a9cfa12b7 100644 --- a/fhem/contrib/HMCCU/controls_HMCCU.txt +++ b/fhem/contrib/HMCCU/controls_HMCCU.txt @@ -1,5 +1,5 @@ -UPD 2021-04-09_14:16:13 102657 FHEM/88_HMCCURPCPROC.pm -UPD 2021-04-09_14:16:13 80676 FHEM/HMCCUConf.pm -UPD 2021-04-09_14:16:13 42605 FHEM/88_HMCCUCHN.pm -UPD 2021-04-09_14:16:13 331948 FHEM/88_HMCCU.pm -UPD 2021-04-09_14:16:13 31582 FHEM/88_HMCCUDEV.pm +UPD 2021-04-16_11:55:59 102657 FHEM/88_HMCCURPCPROC.pm +UPD 2021-04-16_11:55:50 81576 FHEM/HMCCUConf.pm +UPD 2021-04-16_11:55:30 42683 FHEM/88_HMCCUCHN.pm +UPD 2021-04-16_11:55:22 335317 FHEM/88_HMCCU.pm +UPD 2021-04-16_11:55:38 31630 FHEM/88_HMCCUDEV.pm
    NameModelInterfaceAddressChannels
    NameModelInterfaceAddressChannelsSupported roles
    $hash->{hmccu}{device}{$di}{$da}{_name}$hash->{hmccu}{device}{$di}{$da}{_model}$di$da$chn".join('
    ', map { "$_ [$suppRoles{$_}x]" } sort keys %suppRoles)."