NEWS
Bahnalarm/Bahnmonitor - Mein erster eigener Adapter
-
Nach langer "rumprobiererei" und vielen, teilweise verzweifelten "Try & error" Versuchen kann ich heute (nicht ganz ohne Stolz) meinen ersten eigenen Adapter vorstellen.
Langzeittests hat er noch nicht durchlaufen, aber die ersten Ergebnisse stimmen mich positiv.
Aber nun ein wenig zur Motivation und zu der Funktionalität des Adapters.
Eines noch vorab, geplant war einen Adapter "myhouse" zu entwickeln, daher auch der Adaptername. Als eine von mehreren Funktionalitäten sollte darin auch der Bahnalarm/Bahnmonitor enthalten sein. Weiter waren/sind eine Heizungsteuerung, Rollladensteuerung, Lichtsteuerung und Anbindung Bose Soundtouch geplant. Mal sehen ob ich mich dazu noch aufraffen kann.
<u>Motivation</u>
Meine Frau und ich sind Bahnpendler. Wir Pendeln täglich mit der Deutschen Bahn zur Arbeit und nutzen dabei in aller Regel morgens immer die gleiche Verbindung.
Da die Bahn zwar in der Regel pünktlich ist, es aber nichts blöderes gibt als morgens am Bahnsteig zu stehen und die Durchsage zu hören "Der Zug fährt heute vorraussichtlich 10 Minuten später",
Wir nutzen seit einigen Jahren die App DB Navigator auf einem Androiden. Vor kurzen fühlte sich die Bahn aber befleissigt Ihre App zu modernisieren und hat bei der Gelegenheit gleich mal das schöne Widget "gekillt" (wer weiß, vielleicht kommt es ja noch mal wieder).
Der erste Schritt war ein Javascript welches morgens die aktuelle Verspätung für eben diese eine Verbindung ermittelt und auch dem Tablet angezeigt hat. Da ich gerne "probiere" habe ich mir gedacht, ein guter Anlass einen eigenen Adapter zu beginnen.
<u>Was soll der Bahnalarm können?</u>
Der große Vorteil eines Adapters gegenüber eines Scripts sind die Möglichkeiten der Einstellung über die Adapterkonfiguration.
Es sollen möglichst die kommenden 3 Verbindungen mit den jeweiligen Verspätungen ermittelt werden. Diese Werte sollen in eigenen Datenpunkten abgelegt und somit über VIS zu visualisieren sein.
Es soll eine Standardverbindung "markierbar" sein.
Die erforderlichen Parameter sollen einstellbar und jederzeit an zentraler Stelle änderbar sein.
Der Aktualisierungsintervall soll einstellbar sein.
Es soll über VIS zu starten und zu stoppen sein.
kurzfristige Ermittlung soll jederzeit (auch bei nicht laufenden Adapter) möglich sein.
<u>Welche Einstellungen/Konfiguration ist vorhanden?</u>
Da die Ermittlung über das Parsen einer Webseite realisiert werden musste (eine API der deutschen Bahn gibt es meines Wissens nicht) müssen die Parameter zum "Zusammenbau" der URL einstellbar sein. Dafür gibt es in der Konfig 4 Parameterfelder.
Weiter soll generell einstellbar sein ob der Adapter "aktiv" ist. (Wobei "aktiv" bedeutet, dass Werte ermittelt werden) der Adapter selber muss immer laufen.
Der Startbahnhof und der Zielbahnhof ist zu hinterlegen und kann jederzeit in der Adapterkonfig geändert werden.
Eine "Standardverbindung" (meine reguläre Verbindung um morgens zur Arbeit zu gelangen) ist zu hinterlegen.
Der Updateinterval (wie oft werden die Werte geholt) ist einstellbar.
<u>Welche Datenpunkte werden ermittelt?</u>
Abfahrt 1-3 (also die nächsten 3 fahrplanmäßigen Abfahrtszeiten im Format [hh:mm]
Ankunft 1-3 (ebenfalls im Format [hh:mm]
Verspätung 1-3 (normale Verspätung < 5 Minuten als Text z. B. [+3] oder [+0]
Verspätung viel 1-3 (alles was über 5 Minuten hinaus geht)
Verspätung der "Standardverbindung" (wenn diese in den 3 Zeiten enthalten ist)
und noch ein paar technische Datenpunkte die zur Aktualisierung bzw. Initialisierung benötigt werden.
<u>Was ist noch offen/geplant?</u>
Die Index.html muss noch "aufgehübscht" werden. Derzeit ist sie lieblos "zusammengezimmert" was auch meinen mangelnden HTML-Fähigkeiten geschuldet ist.
Einbau der Möglichkeit den Adapter zu einer bestimmten Uhrzeit zu aktivieren (also das Daten sammeln beginnen - laufen muss der Adapter immer) und zu deaktivieren. (z. B. Starte morgens um 06:00 Uhr bis 07:00 Uhr, danach schalte dich wieder inaktiv)
usw… mir wird schon noch was einfallen.
Wie gesagt. es handelt sich um einen lokalen Adapter. Um die Veröffentlichung muss ich mich noch kümmern, da fehlt mir noch jegliche Kenntnis und da werde ich auch sicher noch Hilfe von dem ein oder anderen benötigen.
Wie gesagt, eigentlich war das ganze als Spielerei angefangen, einfach mal probieren wie einfach das entwickeln eines Adapters ist.
Fazit: Ja, es ist einfach wenn man (gerade als Anfänger) viel Zeit hat und sich nicht scheut zu probieren (und zu klauen).
Edit: Das schwierigste an der ganzen Javascript-Entwicklerei sind die dusseligen asychronen Programmdurchläufe. Da hol ich mir mühseelig die Daten zusammen nur um dann festzustellen das der Code schon mal weitergelaufen ist und ihm irgendwann auffällt: Ups, ich hab ja meine Daten unterwegs vergessen - da lass ich den Adapter doch gleich mal mit Code 8 abstürzen und ich schweiß ein unmotiviertes "undefined" ins log. Das hat mich die meiste Zeit gekostet. Und dann versuch mal mit der dusseligen Forumssuche was passendes zu finden. Zum Glück hatte ruhr70 die gleichen Probleme
-
Herzlichen Glückwunsch zum eigenen Adapter. Das motiviert mich, vielleicht doch selbst mal einen ganz einfachen zu basteln.
Mit ist nur aufgefallen, dass deine ID zum Teil Leerzeichen enthalten. Das würde ich in unterstriche ändern.
Gruß
Pix
Gesendet von meinem iPhone mit Tapatalk
-
Wow!!!
-
Super!
-
> Mit ist nur aufgefallen, dass deine ID zum Teil Leerzeichen enthalten. Das würde ich in unterstriche ändern.
Spricht da wirklich etwas dagegen? Dann ersetze ich natürlich, aber selbst in Windows dürfen Ordner und Dateinamen jetzt Blank enthalten.
4746_x1.jpg -
> Mit ist nur aufgefallen, dass deine ID zum Teil Leerzeichen enthalten. Das würde ich in unterstriche ändern.
Spricht da wirklich etwas dagegen? Dann ersetze ich natürlich, aber selbst in Windows dürfen Ordner und Dateinamen jetzt Blank enthalten. `
Ich würde auch empfehlen Lehrzeichen zu entfernen.Windows ist nämlich mehr als 20 Jahre alt. Nach 19 Jahre wird ioBroker auch Lehrzeichen unterstützen. :lol:
1187_iobroker.2018-01-08.log
1187_iobroker.2018-01-07.log -
Ich dachte da an Url-Aufrufe. Man weiß ja nie, wan man das mal braucht.
Gesendet von meinem iPhone mit Tapatalk
-
Dann mache ich mich mal wieder an die Arbeit.
Eine generelle Frage hätte ich aber noch.
Eigentlich sollte das ja ein Adapter mit mehreren Funktionen werden (Heizungssteuerung, Licht, Bose etc.)
Macht es Sinn das in einem Adapter abzubilden oder lieber für jede Funktion einen.
Nachteil bei nur einem Adapter, wenn der mal steht, dann steht alles.
Ich weiß aber nicht wie belastend ein Adapter für den Rechner ist.
Vielleicht hat jemand einen Tipp?
-
Für jedes eigenständige Thema sollte meiner Meinung nach ein eigener Adapter geschrieben werden.
-
Die Idee von iobroker ist eben, dass für jeden Adapter ein eigener Prozess läuft. Vorteil ist, dass alle anderen weiterlaufen, wenn es mit einem Probleme gibt.
HQ hat irgendwo mal erwähnt, wie groß so ein footprint eines Adapters in etwa ist.
Der limitierende Faktor wird dann auch irgendwann das RAM.
Ich hatte bei der Bezeichnung myhome schon geahnt, dass da mehr geplant ist.
Aber was spricht dagegen mehrere Adapter zu bauen? Allein wegen der Übersicht für die Funktionen.
So benötige ich z.b. keine Bahn info, habe Fußbodenheizung und besitze kein Bose. Aber ein Licht-Adapter (wofür auch immer) wäre vielleicht etwas. Bei anderen kann das Ähnlichkeit aber mit anderen Prioritäten sein.
Gruß
Rainer
Gesendet von meinem LIFETAB_S785X mit Tapatalk
-
meine Tendenz geht auch zu einzelnen Adaptern.
Ich glaube, ich mache diesen neu und benenne ihn dabei um. Dann kann ich mich auch gleich an die Änderung der ID's machen.
Dann kann ich ja mal schauen wie sich die Last auf dem System verändert wenn ich einzelne Adapter zuschalte.
Eine Frage hab ich allerdings doch noch:
Wenn ich mir die Konfigurationsseite des Beispieladapters ansehe, so sind da die Felder Test1 und Test2 mit Werten vorbelegt. Wo sind diese Daten gespeichert? Zunächst hatte ich die io.package.json im Verdacht. Die hab ich dann um meine Felder erweitert und Vorgabewerte eingetragen, aber das führte nicht zum Erfolg.
-
meine Tendenz geht auch zu einzelnen Adaptern.
Ich glaube, ich mache diesen neu und benenne ihn dabei um. Dann kann ich mich auch gleich an die Änderung der ID's machen.
Dann kann ich ja mal schauen wie sich die Last auf dem System verändert wenn ich einzelne Adapter zuschalte.
Eine Frage hab ich allerdings doch noch:
Wenn ich mir die Konfigurationsseite des Beispieladapters ansehe, so sind da die Felder Test1 und Test2 mit Werten vorbelegt. Wo sind diese Daten gespeichert? Zunächst hatte ich die io.package.json im Verdacht. Die hab ich dann um meine Felder erweitert und Vorgabewerte eingetragen, aber das führte nicht zum Erfolg. `
Ich wollte auch schreiben, dass 5 einzelne Adapter ist besser als ein globaler.Aber die Leute haben das hier schon längst sich geäußert.
-
> Wenn ich mir die Konfigurationsseite des Beispieladapters ansehe, so sind da die Felder Test1 und Test2 mit Werten vorbelegt. Wo sind diese Daten gespeichert? Zunächst hatte ich die io.package.json im Verdacht. Die hab ich dann um meine Felder erweitert und Vorgabewerte eingetragen, aber das führte nicht zum Erfolg.
Die Felder sind in system.adapter.ADAPTERNAME.0 Objekt gespeichert.Falls man die Adapterinstanz deinstalliert, dann sind die Datenpunkte immer noch in "system.adapter.ADAPTERNAME" (Achtung ohne 0) gespeichert.
Um die neue Datenpunkte hinzufügen mache ich eins von beides:
-
"iobroker del ADAPTERNAME". Achtung Adapter wird aus node_modules/iobroker.ADAPTERNAME gelöscht. Die Änderungen können verloren gehen. Dann Adapter wieder reinkopieren und "iobroker add ADAPTERNAME" schreiben.
-
Instanz löschen: "iobroker del ADAPTERNAME.0". Und Dann manuell das Objekt "system.adapter.ADAPTERNAME" löschen. Und "iobroker add ADAPTERNAME" schreiben.
-
-
Hallo
gibt es den Adapter schon zum Installieren ?