[Neuer Adapter] Poolcontroller

Wie man einen Adapter entwickelt, oder wie man debuggen kann.
Antworten
sucht
Beiträge: 2
Registriert: 17.12.2017, 10:13

[Neuer Adapter] Poolcontroller

Beitrag von sucht » 18.05.2018, 10:18

Hallo zusammen,

ich habe einen Adapter entwickelt mit dem man die Daten vom Poolcontroller auslesen kann.
Nähers über den Poolcontroller erfahrt ihr unter www.pooldigital.de.
Eine Demo findet ihr unter http://demo.poolcontroller.de/gui/phase2/index.htm.
Alle Werte die der Controller liefert, kann man damit im ioBroker anzeigen lassen.
der Adapter in in Anlehnung eines Scriptes von Sven aus dem Poolcontroller Forum entstanden.
auf Github unter https://github.com/sucht3371/ioBroker.poolcontroller.
Viel Spass beim testen.

Benutzeravatar
apollon77
guru
Beiträge: 5729
Registriert: 10.04.2015, 12:27

Re: [Neuer Adapter] Poolcontroller

Beitrag von apollon77 » 18.05.2018, 11:54

Cool,

habe mal rein geschaut. Hier ein bissl Feedback:
* in der iopackage.json sind noch "test1" und "test2" als Konfigparameter eingetragen. Sollte vllt eher raus, oder ?! Statt dessen fehlen die Werte die du eigentlich konfigurierst (host/port und so). Bitte hier die io-package fixen!
* wenn du keine messages empfängst kannst du auch die "OnMessage Methode und so wegmachen.
* die ganzen sysinfo Objekts musst DU nicht im code anlegen und auch nicht bei jedem durchlauf. Die können in der io-package.json unter "common.Instanceobjects" angegeben werden. dann macht ioBroker das beim Install von selbst
* warum du die Daten als Array nimmst in JSON umwandelst und dann direkt wieder zurück in ein Objekt/Array verstehe ich nicht.
* Bitte bei den State-Namen (vor allem bei denen die ohne weitere behandlung aus dem CSV kommen bitte auf erlaubte Zeichen für Objekt-IDs aufpassen (siehe https://github.com/ioBroker/ioBroker.js ... issues/198)
* VERSION ist auch eine Nummer laut Objektdefinitoon wird aber nicht explizit in eine Nummer umgewandelt
* Der gesamte Code-Ablauf ist synchron, wobei aber die ganzen Objektanlagen und das setzen der State-Werte immer asynchron erfolgen. Und am Ende wird der Adapter nach 10 Sekunden danach hart beendet. Es kann vorkommen das es werte gibt die noch nicht geschrieben wurden und damit fehlen. Hier wäre der korrekte Ansatz die Objekt und Werte in "Callback-Schleifen" zu setzen und anzulegen. (Beispiel z.B. https://github.com/ioBroker/ioBroker.mo ... in.js#L838)

Ingo
How-to:
* Debug-Log für einen Adapter/Instanz einschalten? -> Instanzen -> Expertenomodus -> Spalte Loglevel

sucht
Beiträge: 2
Registriert: 17.12.2017, 10:13

Re: [Neuer Adapter] Poolcontroller

Beitrag von sucht » 18.05.2018, 12:38

Hallo

danke für das Feedback das ist super wenn man nicht so tief in dere Materie drin steckt.

die meisten Sachen die du angsprochen hast verstehe ich und kann sie auch umsetzen.

den letzten Punkt mit dem synchron und asynchron verstehe ich nicht. Kannst du mir das erklären.

die 10 sekunden habe ich eingebaut weil sich der Prozess nicht beendet hat.

Danke

Benutzeravatar
apollon77
guru
Beiträge: 5729
Registriert: 10.04.2015, 12:27

Re: [Neuer Adapter] Poolcontroller

Beitrag von apollon77 » 18.05.2018, 13:29

sucht hat geschrieben:
18.05.2018, 12:38
den letzten Punkt mit dem synchron und asynchron verstehe ich nicht. Kannst du mir das erklären.
JavaScript ist eine Eventgesteuerte Sprache und macht davon an vielen Stellen Gebrauch. Alle Aktionen die länger dauern können oder "Kommunikation oder I/O" benötigen werden asynchron ausgeführt. Das bedeutet das der Status gesichert wird und dann sobald keine weitere Arbeit anliegt diese "gemerkten Aktionen" ausgeführt werden. Danach wenn etwas fertig ist gibt es dann meistens callbacks die dann mit dem Ergebnis aufgerufen werden wenn die Aktion abgeschlossen ist. Das nutzt Du schon bei dem "request"-Aufruf.

Alle "setObjectNotExists" oder "setState" aufrufe arbeiten exakt so.

Das bedeutet, dass wenn dein Code fertig ist das er faktisch 41 setObjectNotExist-Calls hat die noch verarbeitet werden und auch 41 setState calls hat die noch nicht abgearbeitet/bestätigt sind.

Am besten Google mal ein bissl nach JavaScript und asynchronous und callbacks.

Da Du 10s wartest und dann den Prozess hart beendest kann es sein das ggf irgendwas von den 82 calls immer noch nicht abgeschlossen ist ... das musst Du wissen.

Wenn Du sicherstellen willst das alles passt dann musst Du die schleifen in "callback-Schleifen" (siehe oben mit Beispiel) umbauen. Die werden dann so abgearbeitet das am Ende einer Aktion erst die nächste angestossen wird. Wenn Du dann "fertig" bist weisst Du das nichts mehr offen ist und kann den Prozess sogar zu sofort beenden.
How-to:
* Debug-Log für einen Adapter/Instanz einschalten? -> Instanzen -> Expertenomodus -> Spalte Loglevel

Antworten