MQTT und "insufficient message"

Begonnen von Lippie, 12 Juni 2019, 20:22:55

Vorheriges Thema - Nächstes Thema

Lippie

Hallo Zusammen,

bei der Weiterentwicklung des Moduls 42_Roomba980.pm habe ich immer wieder komplette FHEM-Abstürze bekommen, weil MQTT eine "insufficient message" erkannt hat.
Dieser Fehler trat immer beim Herstellen der Verbindung zum Roomba auf.
Die Botschaft enthielt dummerweise zwei Startsequenzen (siehe Screenshot im Anhang).

Diesen Fehler behebe ich im Modul 42_Roomba980.pm jetzt bevor ich die Botschaft an MQTT zur Auswertung übergebe.

Jetzt meine Frage/Anregung:

Gibt es keine Möglichkeit, die "insufficient message" ohne Komplett-Absturz der FHEM-Instanz an die aufrufende Funktion zurückzumelden. Wenn mal eine Botschaft verworfen wird, ist das doch kein Weltuntergang :-)
Besteht die Möglichkeit, eine Alternative zu "croak" einzusetzen?
Oder gibt es die Möglichkeit in der aufrufenden Funktion die Folge von "croak" abzufangen?

Viele Grüße
Sebastian


Lippie

Habe eine Lösung gefunden und im Roomba-Modul umgesetzt:


while (my $mqtt = eval { Net::MQTT::Message->new_from_bytes($hash->{buf},1) } ) {

my $message_type = "ERROR";
if ($@) {
$mqtt->string() = "ERROR";
}else{
$message_type = $mqtt->message_type();
}

Log3($name,5,"MQTT $name message received: ".$mqtt->string());

if($message_type == MQTT_CONNACK) {
...


Mag jemand mal drüber schauen, ob das so korrekt ist?

Viele Grüße
Sebastian