DevIo: Verbesserungsvorschläge für Beispiel-Code

Begonnen von pizmus, 27 Juli 2018, 00:04:26

Vorheriges Thema - Nächstes Thema

pizmus

Hallo zusammen,
danke für die tolle Doku zu DevIo! Mit den Beispielen konnte ich in kurzer Zeit die Kommunikation zu einer für mich neuen Hardware ausprobieren. Dabei sind mir noch Kleinigkeiten aufgefallen, die man verbessern könnte:


  • Im Beispiel Code zum Buffering (MY_MODULE_Read) wird der Inhalt von "PARTIAL" in $buffer kopiert. Dann wird auf $buffer weitergearbeitet (angefügt, Zeilenumbruch gesucht, usw.). Wenn aber kein Zeilenumbruch gefunden wird, geht der neue Inhalt von $buffer verloren. Das kann man vermeiden, wenn man das "$hash->{PARTIAL} = $buffer;" hinter die while Schleife verschiebt.
  • Am Ende der Modul-Beispiel-Implementierungen fehlt das "1;". Das kann man schnell verstehen, wenn man die Modul-Entwickler-Doku gelesen hat. Man könnte dem Leser diese Falle aber auch ersparen indem man das "1;" auch noch hinschreibt.
  • Im Beispiel Code von MY_MODULE_Set ist "my $name = $hash->{NAME};" überflüssig und führt zu einer Warnung. $name kollidiert mit $name aus der Zeile drüber.

Gruß,
pizmus

Markus Bloch

Vielen Dank für die Hinweise. Habe ich im Wiki übernommen.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

pizmus

Hallo Markus,
hier noch ein kleiner Nachtrag: Die Callback-Funktion, die DevIo_OpenDev(...) übergeben werden kann, ist in dem Beispiel-Code nicht ganz korrekt. Ich habe beobachtet, dass die Funktion immer wieder auch mit $error=undef oder $error="" aufgerufen wird. In einer anderen Implementierung (72_FB_CALLMONITOR) habe ich gesehen, dass $error vor der Ausgabe als String noch auf "true" geprüft wird. Für mich scheint das auch zu funktionieren. Der Beispiel-Code könnte also so aussehen:

sub MY_MODULE_Callback($$)
{
    my ($hash, $error) = @_;
    my $name = $hash->{NAME};

    if ($error) {
        # create a log entry with the error message
        Log3 $name, 5, "MY_MODULE ($name) - error while connecting: $error";
    }
   
    return undef;
}


Optimal wäre es, wenn die Aufrufe der Callback-Funktion mit $error=false im Wiki erklärt würden.

Viele Grüße,
pizmus