MySensors: add disable option, forum #114657

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@23202 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User 2020-11-21 05:38:03 +00:00
parent 1cf2b68808
commit 07f3731ba5
2 changed files with 23 additions and 2 deletions

View File

@ -75,6 +75,7 @@ sub Initialize {
last-sensorid last-sensorid
stateFormat stateFormat
OTA_firmwareConfig OTA_firmwareConfig
disable:0,1
); );
$hash->{AttrList} = $hash->{AttrList} = join(" ", @attrList); $hash->{AttrList} = $hash->{AttrList} = join(" ", @attrList);
return; return;
@ -98,6 +99,7 @@ BEGIN {GP_Import(qw(
AttrVal AttrVal
Log3 Log3
FileRead FileRead
IsDisabled
))}; ))};
my %sensorAttr = ( my %sensorAttr = (
@ -466,6 +468,11 @@ sub Attr {
if ($attribute eq "OTA_firmwareConfig") { if ($attribute eq "OTA_firmwareConfig") {
return; return;
} }
if ($attribute eq "disable") {
return Stop($hash) if $command eq "set" && $value;
InternalTimer(time(), "MYSENSORS::Start", $hash,0);
return;
}
return; return;
} }
@ -476,6 +483,7 @@ sub Start {
if (!AttrVal($hash->{NAME},"stateFormat",0)) { if (!AttrVal($hash->{NAME},"stateFormat",0)) {
CommandAttr(undef, "$hash->{NAME} stateFormat connection") CommandAttr(undef, "$hash->{NAME} stateFormat connection")
} }
return if IsDisabled( $hash->{NAME} );
DevIo_CloseDev($hash); DevIo_CloseDev($hash);
return DevIo_OpenDev($hash, 0, "MYSENSORS::Init"); return DevIo_OpenDev($hash, 0, "MYSENSORS::Init");
} }
@ -532,7 +540,7 @@ sub Init {
sub GetConnectStatus { sub GetConnectStatus {
my $hash = shift // return; my $hash = shift // return;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log3 $name, 4, "MySensors: GetConnectStatus called ..."; Log3( $name, 4, "MySensors: GetConnectStatus called ..." );
# neuen Timer starten in einem konfigurierten Interval. # neuen Timer starten in einem konfigurierten Interval.
InternalTimer(gettimeofday()+300, "MYSENSORS::GetConnectStatus", $hash);# Restart check in 5 mins again InternalTimer(gettimeofday()+300, "MYSENSORS::GetConnectStatus", $hash);# Restart check in 5 mins again
@ -627,12 +635,14 @@ sub onPresentationMsg {
return; return;
} }
} }
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onPresentationMessage($client,$msg); return MYSENSORS::DEVICE::onPresentationMessage($client,$msg);
}; };
sub onSetMsg { sub onSetMsg {
my ($hash,$msg) = @_; my ($hash,$msg) = @_;
if (my $client = matchClient($hash,$msg)) { if (my $client = matchClient($hash,$msg)) {
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onSetMessage($client,$msg); return MYSENSORS::DEVICE::onSetMessage($client,$msg);
} }
Log3($hash->{NAME},3,"MYSENSORS: ignoring set-msg from unknown radioId $msg->{radioId}, childId $msg->{childId} for ".variableTypeToStr($msg->{subType})); Log3($hash->{NAME},3,"MYSENSORS: ignoring set-msg from unknown radioId $msg->{radioId}, childId $msg->{childId} for ".variableTypeToStr($msg->{subType}));
@ -642,6 +652,7 @@ sub onSetMsg {
sub onRequestMsg { sub onRequestMsg {
my ($hash,$msg) = @_; my ($hash,$msg) = @_;
if (my $client = matchClient($hash,$msg)) { if (my $client = matchClient($hash,$msg)) {
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onRequestMessage($client,$msg); return MYSENSORS::DEVICE::onRequestMessage($client,$msg);
} }
Log3($hash->{NAME},3,"MYSENSORS: ignoring req-msg from unknown radioId $msg->{radioId}, childId $msg->{childId} for ".variableTypeToStr($msg->{subType})); Log3($hash->{NAME},3,"MYSENSORS: ignoring req-msg from unknown radioId $msg->{radioId}, childId $msg->{childId} for ".variableTypeToStr($msg->{subType}));
@ -684,7 +695,10 @@ sub onInternalMsg {
if ($type == I_HEARTBEAT_RESPONSE) { if ($type == I_HEARTBEAT_RESPONSE) {
RemoveInternalTimer($hash,"MYSENSORS::Start"); ## Reset reconnect because timeout was not reached RemoveInternalTimer($hash,"MYSENSORS::Start"); ## Reset reconnect because timeout was not reached
readingsSingleUpdate($hash, "heartbeat", "alive", 0); readingsSingleUpdate($hash, "heartbeat", "alive", 0);
if ($client = matchClient($hash,$msg)){ MYSENSORS::DEVICE::onInternalMessage($client,$msg) }; if ($client = matchClient($hash,$msg)){
return if IsDisabled( $client->{NAME} );
MYSENSORS::DEVICE::onInternalMessage($client,$msg)
};
return; return;
} }
@ -718,12 +732,14 @@ sub onInternalMsg {
if ($type == I_TIME) { if ($type == I_TIME) {
if ($client = matchClient($hash,$msg)){ if ($client = matchClient($hash,$msg)){
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onInternalMessage($client,$msg) return MYSENSORS::DEVICE::onInternalMessage($client,$msg)
} }
} }
} }
if ($client = matchClient($hash,$msg)) { if ($client = matchClient($hash,$msg)) {
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onInternalMessage($client,$msg); return MYSENSORS::DEVICE::onInternalMessage($client,$msg);
} }
if ($client = matchChan76GWClient($hash,$msg)) { if ($client = matchChan76GWClient($hash,$msg)) {
@ -739,10 +755,12 @@ sub onStreamMsg {
my $client; my $client;
if ($client = matchClient($hash, $msg)) { if ($client = matchClient($hash, $msg)) {
Log3($hash->{NAME}, 4, "$hash->{NAME}: received stream message for $client - regular IODev"); Log3($hash->{NAME}, 4, "$hash->{NAME}: received stream message for $client - regular IODev");
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onStreamMessage($client, $msg); return MYSENSORS::DEVICE::onStreamMessage($client, $msg);
} }
if ($client = matchChan76GWClient($hash,$msg)) { if ($client = matchChan76GWClient($hash,$msg)) {
Log3($hash->{NAME}, 4, "$hash->{NAME}: received stream message for $client - Chan76-IODev"); Log3($hash->{NAME}, 4, "$hash->{NAME}: received stream message for $client - Chan76-IODev");
return if IsDisabled( $client->{NAME} );
return MYSENSORS::DEVICE::onStreamMessage($client,$msg); return MYSENSORS::DEVICE::onStreamMessage($client,$msg);
} }
Log3($hash->{NAME},3,"MYSENSORS: ignoring stream-msg from unknown radioId $msg->{radioId}, childId $msg->{childId} for ".datastreamTypeToStr($msg->{subType}).". IO: $hash->{NAME}"); Log3($hash->{NAME},3,"MYSENSORS: ignoring stream-msg from unknown radioId $msg->{radioId}, childId $msg->{childId} for ".datastreamTypeToStr($msg->{subType}).". IO: $hash->{NAME}");

View File

@ -63,6 +63,7 @@ BEGIN {
RemoveInternalTimer RemoveInternalTimer
asyncOutput asyncOutput
readingFnAttributes readingFnAttributes
IsDisabled
)) ))
}; };
@ -95,6 +96,7 @@ sub Initialize {
OTA_Chan76_IODev OTA_Chan76_IODev
streamFilePatterns streamFilePatterns
model model
disable:0,1
); );
use warnings 'qw'; use warnings 'qw';
$hash->{AttrList} = join(" ", @attrList)." ".$readingFnAttributes; $hash->{AttrList} = join(" ", @attrList)." ".$readingFnAttributes;
@ -255,6 +257,7 @@ sub UnDefine {
sub Set { sub Set {
my ($hash,$name,$command,@values) = @_; my ($hash,$name,$command,@values) = @_;
return "At least one parameter is needed!" if !defined $command; return "At least one parameter is needed!" if !defined $command;
return "Node is disabled!" if IsDisabled( $hash->{NAME} );
if(!defined($hash->{sets}->{$command})) { if(!defined($hash->{sets}->{$command})) {
$hash->{sets}->{fwType} = join(",", MYSENSORS::getFirmwareTypes($hash->{IODev})); $hash->{sets}->{fwType} = join(",", MYSENSORS::getFirmwareTypes($hash->{IODev}));
my $list = join(" ", map { my $list = join(" ", map {