Best Practices für Adapter

Ein Adapter läuft auf fremden Systemen, jahrelang, ohne dass jemand zusieht. Vieles von dem, was hier steht, merkt man deshalb erst dann, wenn es fehlt. Die Punkte sind nach dem Ärger sortiert, den sie ersparen.

Nicht bei null anfangen

Der Adapter Creator erzeugt ein Gerüst mit der üblichen Verzeichnisstruktur, Tests und Übersetzungsdateien. Das ist kein Anfängerwerkzeug, sondern der schnellste Weg zu einer Struktur, die andere wiedererkennen. Weitere Werkzeuge stehen unter Eigener Adapter.

Für den Zugriff auf ioBroker immer @iobroker/adapter-core verwenden, nie direkt die Datenbanken.

Aufräumen beim Beenden

Jeder Zeitgeber, jedes Abonnement und jede offene Verbindung wird beim Beenden der Instanz wieder abgeräumt. Wird das versäumt, lässt sich die Instanz nicht sauber neu starten, sie verbraucht bei jedem Neustart mehr Speicher, und irgendwann steht das System des Anwenders.

Das ist der häufigste Fehler in Adaptern und der, den Anwender am schwersten selbst finden können.

Sparsam mit Zugriffen umgehen

  • Ein Gerät nur so oft abfragen, wie es sich tatsächlich ändert. Ein Zählerstand braucht keine Sekundenauflösung.
  • Werte nur schreiben, wenn sie sich geändert haben. Jeder Schreibvorgang kostet Last und, bei aktivierter Aufzeichnung, Speicherplatz.
  • Objekte einmal anlegen, nicht bei jedem Durchlauf neu schreiben. Objekt und Zustand sind zwei Dinge, siehe JS-Controller.

Der Anwender merkt einen verschwenderischen Adapter daran, dass sein Raspberry Pi warm wird und die SD-Karte stirbt.

Rollen und Einheiten richtig setzen

Die Rolle eines Datenpunkts entscheidet darüber, ob Visualisierungen, Sprachassistenten und die automatische Geräteerkennung damit etwas anfangen können. state ist erlaubt, aber es ist die Antwort für den Fall, dass man es nicht besser weiß.

Ebenso gehören type, unit, min, max, read und write gepflegt. Ein Datenpunkt ohne Einheit ist eine Zahl ohne Bedeutung.

Geheimnisse schützen

Passwörter und Zugangsschlüssel gehören verschlüsselt in die Konfiguration und über protectedNative vor anderen Adaptern geschützt. Wie das geht, steht unter Sicherheit.

!> Zugangsdaten niemals ins Protokoll schreiben, auch nicht auf der Stufe debug. Protokollauszüge landen in Forenbeiträgen.

Vernünftig protokollieren

info ist für den Normalbetrieb: Start, Stopp, Verbindung aufgebaut oder verloren. Alles Weitere gehört nach debug. Ein Adapter, der im Normalbetrieb jede Sekunde eine Zeile schreibt, macht das Protokoll für alle anderen unbrauchbar. Einzelheiten unter Logging.

Fehlermeldungen sollen sagen, was zu tun ist. Error: undefined hilft niemandem.

Dateien an der richtigen Stelle ablegen

Eigene Dateien gehören in den Dateispeicher von ioBroker, nicht in ein selbst angelegtes Verzeichnis unter /opt/iobroker. Nur so sind sie in einer Datensicherung enthalten und überstehen ein Update.

Übersetzen

Die Texte der Konfigurationsoberfläche und die Namen der Objekte werden übersetzt. Der Translator nimmt einen englischen Text und liefert die übrigen Sprachen. Einzelheiten unter Übersetzungen.

Testen lassen

Automatische Tests fangen genau die Fehler ab, die man beim eigenen Ausprobieren nicht sieht, weil das eigene Gerät antwortet und die eigene Konfiguration stimmt. Siehe Adapter testen.

Bevor der Adapter veröffentlicht wird

Die Bedingungen für die Aufnahme in das offizielle Repository, samt Kategorie, Verbindungstyp und den Angaben in der io-package.json, stehen unter Adapter veröffentlichen. Eine Liste gewünschter Adapter führt das Projekt unter AdapterRequests.