Hallo Klaus!
läuft es immer noch stabil bei dir?
Ja, alles wunderbar hier seit ich vor 11 Tagen quick,dirty&hässlich eine Pseudo-Schleife eingebaut habe:
@@ -504,6 +504,7 @@
$clientmsg->{received} = $rmsg if($rmsg); #Daten als Scalar uebertragen
# } elsif ($clientmsg->{direction} eq "i2cblockread") { #blockweise lesen
} elsif ($clientmsg->{direction} eq "i2cread") { #blockweise lesen
+ for (my $ii = 0; $ii < 2; $ii++) {
my $nbyte = defined($clientmsg->{nbyte}) ? $clientmsg->{nbyte} : 1;
#Log3 $hash, 1, "test Blockweise lese menge: |$nbyte|, reg: |". $clientmsg->{reg} ."|";
my $rmsg = "";
@@ -532,6 +533,7 @@
$rmsg =~ s/(.|\n)/sprintf("%u ",ord($1))/eg;
#Log3 $hash, 1, "test Blockweise lesen ergebnis: |$rmsg|";
$clientmsg->{received} = $rmsg if($rmsg); #Daten als Scalar uebertragen
+ }
}
$hash->{STATE} = $status;
$hash->{ERRORCNT} = defined($hash->{ERRORCNT}) ? $hash->{ERRORCNT} += 1 : 1 if $status ne "Ok";
Ersetze bitte das "last" in den von dir genannten Zeilen durch
return "error";
Dadurch wird aber der STATE nicht korrekt gesetzt, oder? Macht das was? Eine schöne Lösung (abgesehen von goto) ist mir leider auch nicht eingefallen, bin aber auch kein Perl-Experte.
Ich habe den Code auf jeden Fall mal wie von Dir vorgeschlagen angepasst und sage Bescheid, sollte ich wieder einen Hänger sehen!
Nach positiver Rückmeldung werde ich den Fehlerzähler noch an diesen Stellen einbauen und die Korrektur hochladen.
Wirklich positiv rückmelden kann ich erst in ein paar Tagen, da es im Schnitt immer 2-3 Tage gedauert hat, bis der Fehler aufgetreten ist. Ich weiß nicht, ob es Sinn macht, so lange zu warten, der Bug ist ja relativ klar...