diff --git a/fhem/CHANGED b/fhem/CHANGED index 90e45d9fc..f5360354f 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,8 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: 10_MYSENSORS_DEVICE: add attrTemplate support + - change: 00_MYSENSORS: enhance support for node functions + when using multiple GW's - feature: 93_DbRep: new aggregation type year - bugfix 73_AMADCommBridge: fix little bug - bugfix: 70_BRAVIA: fix channel presets, fix use of ReadingsAge diff --git a/fhem/FHEM/00_MYSENSORS.pm b/fhem/FHEM/00_MYSENSORS.pm index a00193187..988a3e2d4 100644 --- a/fhem/FHEM/00_MYSENSORS.pm +++ b/fhem/FHEM/00_MYSENSORS.pm @@ -56,15 +56,18 @@ sub MYSENSORS_Initialize($) { $hash->{AttrFn} = "MYSENSORS::Attr"; $hash->{NotifyFn} = "MYSENSORS::Notify"; - $hash->{AttrList} = - "autocreate:1 ". - "requestAck:1 ". - "first-sensorid ". - "last-sensorid ". - "stateFormat ". - "OTA_firmwareConfig"; + my @attrList = qw( + autocreate:1 + requestAck:1 + first-sensorid + last-sensorid + stateFormat + OTA_firmwareConfig + ); + $hash->{AttrList} = $hash->{AttrList} = join(" ", @attrList) } + package MYSENSORS; use Exporter ('import'); @@ -330,7 +333,10 @@ sub onPresentationMsg($$) { unless ($client) { if ($hash->{'inclusion-mode'}) { $clientname = "MYSENSOR_$msg->{radioId}"; + $clientname = "$hash->{NAME}_DEVICE_0"if defined $main::defs{$clientname}; CommandDefine(undef,"$clientname MYSENSORS_DEVICE $msg->{radioId}"); + CommandAttr(undef,"$clientname IODev $hash->{NAME}"); + CommandAttr(undef,"$clientname room MYSENSORS_DEVICE"); $client = $main::defs{$clientname}; return unless ($client); } else { @@ -385,8 +391,9 @@ sub onInternalMsg($$) { last; }; $type == I_HEARTBEAT_RESPONSE and do { - RemoveInternalTimer($hash,"MYSENSORS::Start"); ## Reset reconnect because timeout was not reached - readingsSingleUpdate($hash, "heartbeat", "last", 0); + RemoveInternalTimer($hash,"MYSENSORS::Start"); ## Reset reconnect because timeout was not reached + readingsSingleUpdate($hash, "heartbeat", "alive", 0); + if (my $client = matchClient($hash,$msg)){ MYSENSORS::DEVICE::onInternalMessage($client,$msg) }; }; $type == I_VERSION and do { $hash->{version} = $msg->{payload}; diff --git a/fhem/FHEM/10_MYSENSORS_DEVICE.pm b/fhem/FHEM/10_MYSENSORS_DEVICE.pm index 35eb422c2..651b510dc 100755 --- a/fhem/FHEM/10_MYSENSORS_DEVICE.pm +++ b/fhem/FHEM/10_MYSENSORS_DEVICE.pm @@ -55,6 +55,7 @@ sub MYSENSORS_DEVICE_Initialize($) { OTA_autoUpdate:0,1 OTA_BL_Type:Optiboot,MYSBootloader OTA_Chan76_IODev + model ); use warnings 'qw'; $hash->{AttrList} = join(" ", @attrList)." ".$readingFnAttributes; @@ -250,7 +251,7 @@ sub Set($@) { $hash->{sets}->{fwType} = join(",", MYSENSORS::getFirmwareTypes($hash->{IODev})); my $list = join(" ", map {$hash->{sets}->{$_} ne "" ? "$_:$hash->{sets}->{$_}" : $_} sort keys %{$hash->{sets}}); $hash->{sets}->{fwType} = ""; - return grep (/(^on$)|(^off$)/,keys %{$hash->{sets}}) == 2 ? SetExtensions($hash, $list, $name, $command, @values) : "Unknown argument $command, choose one of $list"; + return SetExtensions($hash, $list, $name, $command, @values); } COMMAND_HANDLER: { @@ -1163,24 +1164,39 @@ sub sendRetainedMessages($) {

Set