hallo martin,
in CUL_HM_parseCommon() wird $hash{helper}{prt}{try} nach dem schreiben von registern gesetzt:
if ( $devHlpr->{prt}{mmcS}
&& $devHlpr->{prt}{mmcS} == 3){
# after write device might need a break
# allow for wake types only - and if commands are pending
$devHlpr->{prt}{try} = 1 if(CUL_HM_getRxType($mhp->{devH}) & 0x08 #wakeup
&& $mhp->{devH}{cmdStack});
if ($success eq 'yes'){
delete $devHlpr->{prt}{mmcA};
delete $devHlpr->{prt}{mmcS};
}
};
ausgewertet wird der key
nur in CUL_HM_respPendTout(), also bei einem "fehler":
elsif ($pHash->{try}){ #send try failed - revert, wait for wakeup
# device might still be busy with writing flash or similar
# we have to wait for next wakeup
unshift (@{$hash->{cmdStack}}, "++".substr($pHash->{rspWait}{cmd},6));
delete $pHash->{try};
CUL_HM_respPendRm($hash);# do not count problems with wakeup try, just wait
CUL_HM_protState($hash,"CMDs_pending");
}
dadurch bleibt der key weiterhin gesetzt, auch wenn der "try" erfolgreich ist.
irgendwann beim nächsten timeout, eventuell tage später, "stört" dann dieser code das "reguläre" timeout-handling.
ein erfolgreiches regset plus automatischem getconfig bei einem hm-cc-vd/virtueller-tc führt dann zb beim nächsten miss zum einschlafen des vd.
Zitat# after write device might need a break
ich habe jetzt versucht diesen kommentar umzusetzen, so dass der nächste erfolgreiche cmd ebenfalls den key {helper}{prt}{try} löscht. dazu habe ich 2 zusätzliche zeilen in CUL_HM_Parse eingefügt:
1. vor dem aufruf von CUL_HM_parseCommon:
#----------start valid messages parsing ---------
my $oldTry = ($mh{devH}->{helper}{prt}{try})? 1: 0;# frank: save old setting
my $parse = CUL_HM_parseCommon($iohash,\%mh);
2. beim auswerten des returnwertes von CUL_HM_parseCommon:
if ($parse eq "ACK" ||
$parse eq "done" ){# remember - ACKinfo will be passed on
delete $mh{devH}->{helper}{prt}{try} if($oldTry && $mh{devH}->{helper}{prt}{try});# frank: delete if the try cmd is successful
push @evtEt,[$mh{devH},1,""];
}
edit: eine hiermit gepatchte 10_cul_hm.pm befindet sich hier:
https://forum.fhem.de/index.php/topic,125667.msg1207217.html#msg1207217 (https://forum.fhem.de/index.php/topic,125667.msg1207217.html#msg1207217)