OK, dann muss der Timer auch an der Stelle wieder in Gang gesetzt werden. Ergo sollte das hier helfen:
sub onSetMessage {
my $hash = shift;
my $msg = shift // return;
my $name = $hash->{NAME};
if (defined $msg->{payload}) {
readingsBeginUpdate($hash);
eval {
my ($reading,$value) = rawToMappedReading($hash,$msg->{subType},$msg->{childId},$msg->{payload});
readingsBulkUpdate($hash, $reading, $value);
if ( defined ($hash->{setcommands}->{$value}) && $hash->{setcommands}->{$value}->{var} eq $reading ) { #$msg->{childId}
if ($hash->{SetExtensionsCommand} && AttrVal($name, "setExtensionsEvent", undef)) {
readingsBulkUpdate($hash,"state",$hash->{SetExtensionsCommand}) ;
} else {
readingsBulkUpdate($hash,"state","$value");
SetExtensionsCancel($hash) if !$msg->{ack};
}
}
};
if ($msg->{ack} && ReadingsVal($name,"heartbeat","dead") eq "NACK" and @{$hash->{IODev}->{messagesForRadioId}->{$hash->{radioId}}->{messages}} == 0) {
readingsBulkUpdate($hash,"heartbeat","alive") ;
refreshInternalMySTimer($hash,"Alive") if $hash->{timeoutAlive};
}
readingsEndUpdate( $hash, 1 );
Log3 ($hash, 4, "MYSENSORS_DEVICE $name: ignoring C_SET-message ".GP_Catch($@)) if $@;
} else {
Log3 ($hash, 5, "MYSENSORS_DEVICE $name: ignoring C_SET-message without payload");
}
return;
}