NEWS
js-controller 2 jetzt für alle im Stable
-
Hallo ioBroker-Community,
ioBroker wird mit inzwischen über 32.000 aktiven Installationen von immer mehr Smart-Home-Enthusiasten eingesetzt. Mit dem neuen js-controller 2, welcher ab sofort im Stable-Repository als Version 2.1 verfügbar ist, legen wir die Basis für die Zukunft.
In sehr umfangreichen Beta-Test und ca. 4 Wochen im Latest -Repository, mit großartiger Unterstützung durch die Community, wurde dieses große Update des js-controllers sehr intensiv getestet. Ich bedanke mich bei allen die in den Tests mitgewirkt und Feedback gegeben oder Bugs gemeldet haben. Das war eine super Zusammenarbeit!
Vor allem "unter der Haube" sind einige grundlegende Änderungen eingeflossen, die den Wechsel auf eine neue Hauptrelease-Nummer rechtfertigen.
Dieser Post enthält alle Informationen zur Installation und was hier zu beachten ist. Bitte lest Ihn sorgfältig durch. Der zweite Post enthält eine FAQ und der dritte Post Informationen zu ausgewählten neuen Features.
Zusammenfassung bzw. TL;DR
Um alle Details zu bekommen lest bitte den Post vollständig! Falls dies nicht gewünscht ist und ihr ganz genau, wisst was ihr tut, ist hier in Kurzform:
Linux:
- Mindestanforderung: Node.js 8.x, besser 10.x installieren! Prüfen mit
node -v. Update nötig? -> Bitte im Text lesen! - Reihenfolge: Slave-Systeme zuerst aktualisieren! Master zuletzt!
iobroker update- Repository updaten und schauen ob Update angeboten wird!iobroker stop-ioBroker stoppen. Prüfen das keine Prozesse (auch ggf. Backups o.ä.) mehr laufen/hängen!iobroker upgrade self- Das eigentliche Updateiobroker start- ioBroker wieder starten
Windows:
- Reihenfolge: Slave-Systeme zuerst aktualisieren! Master zuletzt!
- Den neuesten Windows Installer 2.x für ioBroker von https://www.iobroker.net/#de/download herunterladen und dort 'Update/Migration' auswählen.
Bei Fragen oder Problemen oder "Sich wundern über Dinge, die jetzt anders sind" bitte den Text lesen.

Was ist besonders zu beachten?
Der js-controller 2 ist generell kompatibel mit allen bestehenden ioBroker-Systemen. Es kann von jeder früheren Version auf die Version 2.1 aktualisiert werden. Einzig die Node.js-Version muss vor dem Update mindestens auf 8.x, besser noch auf 10.x angehoben werden! Für Node.js 12.x ist es aber noch etwas zu früh, da hier immer noch einige Adapter nicht kompatibel sind!
Falls ihr in diesem Zuge die Node.js-Version aktualisieren wollt, beachtet bitte die Informationen bzw. die Anleitung unter https://forum.iobroker.net/topic/22867/how-to-node-js-für-iobroker-richtig-updatenWeiterhin wird der ioBroker-eigene Dateibereich (im Normalfall bisher unter <ioBroker-Verzeichnis>/iobroker-data/files/...) nun strikter behandelt. Manuell oder per Skript (fs.write) dort direkt abgelegte/hin kopierte Dateien sind ggf. nach dem Update nicht mehr in Visualisierungen anzeigbar!
Skripte müssen angepasst werden (Nutzung von writeFile) bzw. die Dateien müssen in offiziell definierte Adpater-Basisverzeichnisse (z.B. vis.0, iqontrol.meta u.ä.) abgelegt werden. Nutzt am besten auch die offiziellen Uploader von Vis oder iqontrol, damit diese Dateien korrekt registriert sind. Diese Änderung wurde auch zur Erhöhung der Sicherheit umgesetzt! Der positive Nebeneffekt ist auch, dass die Files dann mit im Backup landen, was bisher nicht erfolgte!
Bei der Installation (oder nachträglich periobroker file sync) werden die erlaubten Verzeichnisse geprüft und bisher nicht registrierte Dateien aufgenommen. Wer komplett eigene Verzeichnisse angelegt hat, bekommt dazu eine Fehlermeldung - diese werden nicht automatisch übernommen und müssen manuell korrekt kopiert werden. Siehe dazu auch die Informationen zum Ordner 0_userdata.0 im Post #3 in diesem Thread!
Installation
Vor der Installation
Wie bei jedem Update dieser Art: Bitte macht ein Backup!
iobroker backup, bzw. kopieren desiobroker-dataVerzeichnisses reichen an sich im Zweifel auch aus (ioBroker vorher stoppen natürlich). Bitte nicht das node_modules Verzeichnis einfach kopieren, da sonst symbolische Links kaputtgehen können, was zu größeren Problemen danach führt.Wenn das Update nicht angezeigt wird bitte im Admin unter "Adapter" oben auf das "Neu laden" Icon drücken oder
iobroker updatean der Kommandozeile eingeben.Nötige Adapter-Aktualisierungen
Die folgenden Adapter müssen auf die genannten Minimalversionsnummern aktualisiert werden, da diese sonst nicht mit dem js-controller 2.1 funktionieren. Diese Updates am besten vorher ausführen, weil alle genannten Versionen auch mit den alten js-controller Versionen funktionieren.
- simple-api 2.1.2 oder höher
- email 1.0.5 oder höher
- pushover 1.1.1 oder höher
- hue 1.2.4 oder höher
- node-red 1.10.1 oder höher
- vis 1.2.2 oder höher
- iqontrol 0.2.12 oder höher
- socketio 2.1.2 oder höher
- web 2.4.9 oder höher
- hqwidgets 1.1.3 oder höher
- ble v0.10.1 oder höher
- sonos 2.0.0 oder höher (Breaking change! Kein Webserver mehr enthalten!)
- radar2 1.0.9 (GitHub version 1.2.0 muss manuell angepasst werden, siehe FAQ!)
- broadlink2 2.0.2 oder höher (siehe auch FAQ)
- systeminfo 0.3.1 oder höher
- tr-064 (wenn noch soef Originalversion bei Fehlern community Version von GitHub (!!) installieren)
- mqtt-client 1.2.0 oder höher
Achtung: Slave-Systeme zuerst!
Bei einem Multi-Host-System ist es beim Update auf Version 2 sehr wichtig, die Slave-Systeme zuerst zu aktualisieren. Der Master wird als letztes aktualisiert!
Wenn diese Reihenfolge nicht eingehalten wird, können sich die Slave-Systeme nicht mit dem Master verbinden und das Update muss dann manuell ausgeführt werden (Details dazu siehe FAQ).
Update ausführen
Linux
- ioBroker Repository aktualisieren (
iobroker update) und schauen das die neue Version angeboten wird - ioBroker stoppen (
iobroker stop) - Prüfen, dass keine Prozesse (Adapter, Backups) mehr laufen (
ps auxww|grep iound auchps auxww|grep backup). Es passiert manchmal, dass trotz dem Stoppen noch Zombie-Prozesse zurückbleiben. Diese müssen mitsudo killbeendet werden - Wie üblich wird das Update dann per
iobroker upgrade selfausgeführt. - Wenn ihr von einem js-controller 1.5 updated ist es immer sinnvoll, nach den Installation-Fixer (siehe gleich unten) auszuführen, auch wenn es bei euch keine Permission-Fehler gab!
- ioBroker starten (
iobroker start)
Bei Fehlern:
Wenn bei der Linux-Installation Fehler wegen fehlender Zugriffsrechte auftreten, am besten den Installation-Fixer nutzen und die Installation des Updates danach wiederholen.curl -sL https://iobroker.net/fix.sh | bash -Falls auch danach noch Fehler auftreten, bitte die Installation erneut mittels
cd /opt/iobroker && sudo -H -u iobroker npm install iobroker.js-controller@2.1.0versuchen. Bitte berichtet solche Fälle hier im Thread.Windows
Auf Systemen, die mit dem neuen Windows Installer eingerichtet wurden, darf der js-controller nicht mittels npm aktualisiert werden. Es gibt eine neue Version des Windows Installers, die das Update des js-controllers mit wenigen Mausklicks ermöglicht. Dazu den neuesten Windows Installer 2.x für ioBroker von https://www.iobroker.net/#de/download herunterladen und dort 'Update/Migration' auswählen.
Für alle "alten manuellen" Installationen gilt
- ioBroker-Service muss gestoppt sein.
- Vor dem Update bitte prüfen, dass keine Prozesse mehr laufen
und dann entweder
iobroker upgrade self- ioBroker-Service starten
oder
- Den neuesten Windows Installer 2.x für ioBroker von https://www.iobroker.net/#de/download herunterladen und dort 'Update/Migration' auswählen, um zur neuen Installation mir der Möglichkeit, mehrere Instanzen auf einem Rechner zu verwalten, zu wechseln.
NACH der Installation
Nach der Installation den ioBroker wieder starten (z.B. mittels
iobroker start).Wenn alles klappt merkt ihr außer der höheren Versionsnummer in der Host-Ansicht im Admin keinen Unterschied. Alles funktioniert weiterhin wie vorher. Alle Adapterinstanzen starten und funktionieren. Wenn das so ist, hat alles geklappt. Die großen Änderungen sind alle "unter der Haube" versteckt.
Was jetzt die ganzen Neuerungen bringen, haben wir weiter unten in diesem Text zusammengefasst. Neue Funktionen als Basis für Weiterentwicklungen wurden behutsam integriert und einige bestehende Probleme gezielt behoben.
Mit
iobroker helpwird eine Liste der möglichen Kommandozeilen-Kommandos angezeigt, die mit Version 2 um einige Befehle länger geworden ist.
Was hat sich denn geändert?
Eine der größeren Änderungen ist, dass die ioBroker-eigenen States- und Objects-Datenbanken vollständig neu geschrieben wurden. Im ioBroker-System wird zur Kommunikation jetzt ein TCP-basiertes und mit Redis-kompatibles Protokoll verwendet. Vor allem "Reconnection from DB"-Fehler sollten dadurch jetzt der Vergangenheit angehören. Auf Basis dieser Änderungen planen wir für die Zukunft noch einige interessante Neuerungen.
Durch diese Änderung steht jetzt in Logs teilweise "connected to redis" obwohl gar kein Redis im Einsatz ist. Man kann allerdings weiterhin am Port erkennen ob es die ioBroker-eigene Datenbank ist (normalerweise Ports 9000 und 9001) oder ein echter Redis genutzt wird (Port 6379). Erste Tests haben gezeigt das die CPU Belastung der Adapter-Prozesse und des js-controller geringer ist als in der alten Version, da das neue Protokoll deutlich schlanker ist. Es ist weiterhin flexibler und robuster - so lange die Netzwerkverbindung nicht abreißt. Aber selbst in solch einem Fall sollte ein automatischer Reconnect stattfinden und, wenn der Abbruch nicht zu lang ist, alle Änderungen aus der Zeit ohne Verbindungen nochmals gesendet werden.
Also falls ihr in der Vergangenheit von "Reconnect to DB" Meldungen und Effekten geplagt wart ist euer Bericht für uns sehr interessannt.Erst nach ca. 90s ohne Verbindung zur Datenbank beenden sich Adapter und das System und ein automatischer Restart findet statt, wonach der js-controller wartet bis die Verbindung wieder da ist. Um ggf. Netzwerk-Effekte abzufangen gibt es alle 30s einen Restart des Controllers.
Ebenso wurde der berühmt berüchtigte "Error 7", welcher im Log erscheint, wenn ein Adapterprozess bereits läuft, aber ein neuer gestartet werden soll, verbessert. Wenn ein neuer Prozess gestartet werden soll, sollten sich nun ggf. noch laufende Prozesse automatisch selbst beenden und eine einmalige Meldung im Log erzeugen.
Wie bereits gesagt, viele Änderungen fanden hinter den Kulissen statt. Hier für Interessierte als Spoiler eine Zusammenfassung:
Weitere Details zu den Änderungen und Bugfixes sind im Changelog einzusehen.
Im dritten Post dieses Threads stellen wir einige neue Features im Detail etwas "weniger technisch" vor.

Wie Fehler melden?
Wer sich unsicher ist, ob ein Fehler vorliegt, sollte am besten hier im Thread das Problem beschreiben. So können wir alle versuchen, das Problem nachzuvollziehen und ggf. einzugrenzen.
Sobald ein Fehler auftritt der in einer Fehlermeldung oder einen Crash mit Fehlerdetails im Log oder auf Kommandozeile endet, dann dazu am besten direkt ein GitHub-Issue im js-controller Projekt öffnen und zusätzlich hier im Thread posten. Je detaillierter die Angaben im Issue sind (genaue Fehlermeldungen/Logs, Info zur verwendeten DB-Konstellation (file(file, file/redis, redis/redis ...), Infos zur OS- und Node.js-Umgebung sowie genaue Schritte zur Reproduktion des Problems), umso schneller können wir Fehler einkreisen und beheben.
Falls ein Adapter nicht mehr korrekt funktioniert, bitte prüfen ob es für den Adapter ein Update gibt. Falls nicht, bitte auch hier im Thread gern melden oder beim Adapter ein Issue öffnen.
Ingo
@apollon77
Vielen Dank, läuft problemlos auf 5 Clients und dem Host. Konnte alle problemlos updaten, ohne Fehlermeldungen.
71 Instanzen ohne Probleme... - Mindestanforderung: Node.js 8.x, besser 10.x installieren! Prüfen mit
-
@apollon77 ja das habe ich ja gesagt, ich finde nur diesen einen und nicht 2.
Ich habe diesen auch schon gekillt, hat aber nichts geändert, beim start von Radar wieder das selbe Problem.@marcuskl ALso ich kann es auch bei mir mit dem radar2 nachstellen. Irgendwie hängt der beim beenden und reagiert nicht auf einen kill. Andere Adapter machen das wie Sie sollen. Leg bitte dazu mal ein issue beim Adapter an. Muss sich der Dev ansehen
-
@apollon77 Habe jetzt das 2.1.0 Update gemacht.
Was mir schon bei 2.0.43 aufgefallen ist das der "Tuya" Adapter nicht mehr richtig arbeitet:host.ioBroker 2019-11-15 21:18:54.422 info "system.adapter.tuya.0" disabled tuya.0 2019-11-15 21:18:27.143 error (5662) 5303504684f3eb21724b: Error: connection timed out host.ioBroker 2019-11-15 21:18:19.403 info instance system.adapter.tuya.0 started with pid 5662Aber ich habe noch keine Gelegenheit gehabt um den Fehler näher einzugrenzen.
-
Bei mir hing gerade der radar2 Adapter und ein Skripte welches auf das Objekt system.adapter.radar2.0.connected hört warf den Fehler dass das Objekt nicht existiert.
2019-11-15 21:24:00.014 - [33mwarn[39m: javascript.0 (27906) getState "system.adapter.radar2.0.connected" not found (3)Es ist zwar da war aber wertelos. Bis JS-Controller 1.5 waren alive und connected immer ausnahmslos entweder true oder fase, aber nicht leer. Und wieso sagt das Log not found obwohl das Objekt vorhanden ist?

Edit: Es gab einen Zombiprozess der mit pkill nicht zu töten war.
diginix@host:/opt/iobroker/log$ sudo pkill -f io.radar2.0 diginix@host:/opt/iobroker/log$ ps aux | grep radar iobroker 457 0.0 2.1 824208 85064 ? Sl 19:34 0:06 io.radar2.0Nur mit kill -9 457 konnte ich ihn beenden.
-
Bei mir hing gerade der radar2 Adapter und ein Skripte welches auf das Objekt system.adapter.radar2.0.connected hört warf den Fehler dass das Objekt nicht existiert.
2019-11-15 21:24:00.014 - [33mwarn[39m: javascript.0 (27906) getState "system.adapter.radar2.0.connected" not found (3)Es ist zwar da war aber wertelos. Bis JS-Controller 1.5 waren alive und connected immer ausnahmslos entweder true oder fase, aber nicht leer. Und wieso sagt das Log not found obwohl das Objekt vorhanden ist?

Edit: Es gab einen Zombiprozess der mit pkill nicht zu töten war.
diginix@host:/opt/iobroker/log$ sudo pkill -f io.radar2.0 diginix@host:/opt/iobroker/log$ ps aux | grep radar iobroker 457 0.0 2.1 824208 85064 ? Sl 19:34 0:06 io.radar2.0Nur mit kill -9 457 konnte ich ihn beenden.
@Diginix alive und connected werden mit einem "expire" von glaube ca. 30s auf "true" gesetzt während der Adapter läuft. Normalerweise wird der Wert alle 15s neu gesetzt und damit bleibt er "true". Wenn Adapter gestoppt setzt der Controller auf false ohne expire.
Falls der Adapter jetzt hängenbleibt und damit der Wert "expired" wird der State auf null gesetzt und ist Wert-los ... genau das meckert JavaScript in dem Fall ggf an.
In controller 1.5 wurde bei einem expire (und file DB) nicht der State gelöscht sondern der Wert auf "null" (für dich dann auch false) gesetzt. Bei redis DB aber gelöscht wie jetzt. Mit js.controller 2 ziehen wir das gleich.
-
Hm, ok dann muss ich mal schauen was ich am Skript ändern kann.
Aktuell habe ich andauern ein Zombie vom radar2 v1.2.0 (mit gepatchter myAdapter.js).
Lief mit JS-Controller 1.5.14 monatelang stabil. Hoffe das fängt sich wieder mit 2.x.@Diginix Es kann sehr gut sein das in der myAdapter Lib von Frank noch irgendwo was drin steckt was bisher keinen Fehler wirft aber solche hänger verursacht ... Hoffen wir mal das Frank bald wieder zeit findet. leg doch bitte ein Issue an mit so vielen Infos wie es geht
-
@marcuskl ALso ich kann es auch bei mir mit dem radar2 nachstellen. Irgendwie hängt der beim beenden und reagiert nicht auf einen kill. Andere Adapter machen das wie Sie sollen. Leg bitte dazu mal ein issue beim Adapter an. Muss sich der Dev ansehen
@apollon77 Ok habe ich gemacht.
-
Aarg!
simple-api wirft nun einen {"error":"permissionError"} bei den Aufrufen die bis vor dem Update problemlos funktionierten.
Was hat sich da denn geändert? -
Bei mir lief die Installation ohne Fehler durch.
Jetzt komme ich bis zur Anmeldeseite und kann mich mit meinem Namen und Passwort nicht mehr anmelden.
Muss ich etwa was anderes eingeben? -
-
-
@apollon77
Habe der Gruppe jetzt alle Haken gegeben. Fehler bleibt der selbe.
Aufruf ist dieser:http://ip:port/set/javascript.0.Objects.Door_Window.Gate_Switch?value=true&user=apiuser&pass=******Selbst das Lesen schlägt fehl:
http://ip:port/getPlainValue/javascript.0.Objects.Door_Window.Gate_Switch?user=apiuser&pass=******Habe dem Objekt jetzt noch zusätzlich den apiuser als Besitzer gegeben, statt admin. Aber nützt auch nichts.
Nur mit admin user/pw in der URL funktioniert aktuell das Lesen/Schreiben per simple-api. -
kann ja kein neues Passwort setzen, da ich ja keinen Login machen kann.
Es kommt keine Fehlermeldung.
Nur wenn ich den Benutzer oder das Passwort ändere, dann kommt eine Fehlermeldung. -
Update wird wieder nicht links im Reiter angezeigt, obwohl vorhanden.
Bei den letzten beiden Versionen hatte die Anzeige wieder funktioniert. Die aktuelle Version wieder nicht.
Issue hatte ich ja schon erstellt. -
kann ja kein neues Passwort setzen, da ich ja keinen Login machen kann.
Es kommt keine Fehlermeldung.
Nur wenn ich den Benutzer oder das Passwort ändere, dann kommt eine Fehlermeldung. -
@apollon77
Habe der Gruppe jetzt alle Haken gegeben. Fehler bleibt der selbe.
Aufruf ist dieser:http://ip:port/set/javascript.0.Objects.Door_Window.Gate_Switch?value=true&user=apiuser&pass=******Selbst das Lesen schlägt fehl:
http://ip:port/getPlainValue/javascript.0.Objects.Door_Window.Gate_Switch?user=apiuser&pass=******Habe dem Objekt jetzt noch zusätzlich den apiuser als Besitzer gegeben, statt admin. Aber nützt auch nichts.
Nur mit admin user/pw in der URL funktioniert aktuell das Lesen/Schreiben per simple-api. -
Update wird wieder nicht links im Reiter angezeigt, obwohl vorhanden.
Bei den letzten beiden Versionen hatte die Anzeige wieder funktioniert. Die aktuelle Version wieder nicht.
Issue hatte ich ja schon erstellt.


SO lange versuch mal den User in die Administrator Gruppe zu schieben