NEWS
Neuer Adapter: wie sinnvoll konfigurieren?
-
Ich baue gerade an einem Adapter, der Daten von verschiedenen Arduino-Nano-based Sensoren empfängt. Das funktioniert schon soweit. Die Daten (hauptsächlich Temperatur, Luftdruck, Luftfeuchtigkeit, Helligkeit,…) können mit vis visualisiert werden. Der gleiche Adapter kann Daten aber auch versenden. Dies Möglichkeit nutze ich für eine kleine 1.8 '' - Anzeige auch Arduino-Nano-based.
Mein Problem ist, wie konfiguriere ich den Adpater am sinnvollsten. im Moment lese ich die Datenpunkte, welche ich zur Anzeige sende, hardcoded mittels
adapter.getForeignState('weatherunderground.0.forecast_day.0d.icon', function (err, obj)
oder
adapter.getForeignState('hm-rpc.0.KEQ0766678.1.HUMIDITY', function (err, obj)
aus.
Sinnvollerweise sollte dies aber außerhalb des Quellcodes konfigurierbar werden.
Was ist da best practice?
Nutze ich die Konfigurationsseite des Adapters? Dann müsste ich alle Datenpunkte dort zur Auswahl (evtl. drop down) anbieten. Oder nutze ich besser den Objekte-Tab im admin? Da sind die Datenpunkte ja schon alle vorhanden…
Für Vorschläge wäre ich dankbar...
-
Wenn ich richtig verstanden hab was du willst dann gar nicht.
Das was du beschreibst löst man in iobroker mit JS oder Blockly in form eines Skripts.
Ein Adapter soll nur die Daten und Funktionen bereit stellen die in Verbindung mit dem Gerät stehen.
Wann und wie die Daten mit anderen Adaptern ausgetauscht werden entscheidet jeder Nutzer selber. Wenn du jetzt aber hier was in der Konfiguration vorgibst und das auch noch auf eine Art und weise die von dem Standard in ioBroker komplett abweicht ist das ganze System gefährdet. Da es dann nicht mehr Konsistent ist.
Korrekter weg:
Du musst auf Änderungen deiner Objekte reagieren und dann die Daten an das Gerät senden, je nach Struktur deiner Objekte kannst du die nötigen Informationen (port, IP, etc) in den Natives deiner Objekte ablegen oder in der Konfiguration eine Geräte Liste anlegen. So eine Liste gibt es zum Beispiel beim Sonos Adapter. Ziel ist es das man deine Objekte beschreiben kann mit den Informationen die man z.B. an ein Display senden möchte. Und den Rest muss dann dein Adapter machen.
Gesendet von meinem m8 mit Tapatalk
-
Ich habe das ganze nun wie folgt gelöst:
-
Das Display meldet sich ja von sich aus. Mit dieser Meldung lege ich ein neues device an.
-
Darunter lege ich die notwendigen Datenpunkte an (write=true)
-
jedes Mal, wenn das Display "I'm there" sendet, erhält es den aktuellen Wert dieser Datenpunkte gesendet.
-
in einem zusätzlichem script warte ich nun auf Änderung von z.Bsp. dem Wettersymbol. Bei Änderung schreibt dieses script auf die oben genannten Datenpunkte des entsprechenden Displays.
on('weatherunderground.0.forecast_day.0d.icon', function (obj) { var icon = obj.newState.val; setState('myhomecontrol.0.98EF82180000.WeatherIcon2Display', icon); });
-
-
Hi Rene,
genau so wäre auch meine Empfehlung gewesen
Das ist der Weg der die größte Flexibilität für die Nutzer bietet.
Im Adapter aufpassen das Du für die "Schreibaktionen" nur die mit "ack=false" beachtest und dann nach dem senden mit "ack=true" quasi bestätigst.
Das ist Teil des Grundkonzepts: Finale Werte werden mit "ack=true" geschrieben.
Eine "Aktion" die ein Adapter ausführen soll wird immer mit "ack=false" an den Adapter gesendet und wenn dieser Sie verarbeitet hat beschreibt er den Datenpunkt dann mit dem aktuellen Wert (im Zweifel bei Dir wohl eher der gleiche Wert) und "ack=true" um es zu bestätigen.
Eine Frage noch: Das sieht mir ein bissl nach "eigenen" Arduino-basierten Geräten aus … stellst Du die Anleitungen wie man die baut mit zur Verfügung? Weil sonst ist das ein Adapter für etwas was nur Du hast ...
Oder was genau sind das für Geräte und was braucht man?
Für alle Deine Adapter habe ich noch eine Bitte: Baue bitte noch mindestens das Basis-Adapter-Testing mit Travis-CI und Appveyor ein. Infos unter http://forum.iobroker.net/viewtopic.php ... ead#unread . Bei Fragen gern an mich. Als Referenz kannst DU viele Adapter ansehen. Mein "nut"-Adapter iobroker.nur z.B. (wobei Du da den Adapter-Spezifischen test-code rausnehmen musst). Auch in den Adapter-Templates ist das drin.
Dann kurz mit dem Github-Account bei Travis-CI und Appveyor anmelden, Projekte da aktivieren und fertig