NEWS
Probleme mit js2fs adapter: Skripte werden doppelt gestartet und ausgeführt
-
Hallo Zusammen,
für Backup Zwecke probiere ich gerade den js2fs Adapter aus.
Funktional perfekt - macht genau das, was ich will.
Leider gibt es einen Seiteneffekt: Im Debug log habe ich schon gesehen, dass alle Nachrichten zweimal kommen (so, als ob das Skript zweimal durchlaufen würde).
Ich bin davon ausgegangen, dass alle Schedules und Events durch den zweiten Aufruf des Skripts zurückgesetzt werden. Dem ist aber nicht so.
Zu Debugzwecken lasse ich mir z.B. per Telegram Adapter eine Botschaft zu einer festen Uhrzeit schicken - diese kommt nun zweimal.
Ob ein Rollo nun zweimal das Kommando zum Hochfahren bekommt, wäre ja egal. Da ich bald auch einen Wecker damit Triggern möchte, wäre dies aber unglücklich.
Hier meine Konfiguration vom Adapter:
Hat jemand Ähnliches beobachtet und wie kann ich dieses Verhalten abstellen?
Danke
Christof
-
Ich habe das Problem auch wenn man Skripte im ioBroker-Admin editiert und speichert. Dann passiert genau das. In wirklichkeit werden die Skripte vom Admin nach dem Speichern neu gestartet, dann mach der js2fs aber noch eine Änderung am Skript-Objekt und damit werden die Skripte beendet und nochmals gestartet. Manchmal geht das schieff und die Skripte laufen doppelt.
Ich bin schon dran das zu ändern (sobald ich mal die nötige Ruhe finde) da geht es ab js-controller 1.2.4 ohne das doppelte.
Workarounds:
1.) Skript stoppen, dann editieren/speichern, dann manuell starten
2.) Nur die Files editieren und alleine per js2fs (Filesystem) arbeiten
-
Hi,
Workaround 1 verstehe ich.
Nr. 2 finde ich eleganter, ich verstehe nur eine Sache nicht.
Bisher dachte ich, der js2fs Adapter arbeitet nur in eine Richtung: Editieren im admin erzeugt synchrone Kopien im filesystem.
Verstehe ich Dich richtig, dass Änderungen im Filesystem (also Arbeiten auf den exportierten Skripten) auch wieder zurück zum admin hochsynchronisiert werden?
Danke und bis bald
Christof
-
Der Adapter arbeitet bidirektional … ich editiere nur noch im filesystem. Ist cool
-
Klingt ja super…..dann noch eine letzte Fragen zum Handling:
-Gibt es hier eine IDE/Editor, welcher sich am besten dafür eignet?
Danke nochmals
Christof
-
Klingt ja super…..dann noch eine letzte Fragen zum Handling:
-Gibt es hier eine IDE/Editor, welcher sich am besten dafür eignet?
Danke nochmals
Christof `
ich nutze PSPad für.. aber du kansnt auch jeden beliebeigen Editor nehmen
-
Ich nehme atom.io. Ein Editor der JavaScript code highlighting kann hilft
-
<== großer Fan von VSCode
-
<== großer Fan von VSCode
Vor allem kann es mit https://github.com/ioBroker/ioBroker.javascript/blob/master/lib/javascript.d.ts Autovervollständigung und Typüberprüfung für die Funktionen der ioBroker-Schnittstelle, wenn du am Anfang deines Skripts diesen Kommentar einfügst:
/// <reference path="javascript.d.ts"> // @ts-check</reference>
-
<== großer Fan von VSCode `
Muss VSCode dann auf der gleichen Maschine installiert sein auf der auch ioBroker läuft?
Bei mir läuft ioBroker auf einem IntelNuc unter Windows 10. Der Rechner ist jedoch nur per RDP erreichbar.
Jetzt würde ich VSCode gerne auf meinem normalen PC ausführen. Würde das auch funktionieren?
-
Muss VSCode dann auf der gleichen Maschine installiert sein auf der auch ioBroker läuft? `
Wenns nur um die Entwicklung geht und du nachher eh js2fs verwendet, dann nicht. Brauchst aber die verlinkte Datei in deinem Arbeitsverzeichnis. -
Ich hab per Atom.io ein scp Plugin womit ich die files auf den iobroker Host übertrage mach Änderungen.
Sowas gibt’s für vscode auch
-
Ich habe auch das Szenario, dass meine iobroker auf einem Raspberry installiert ist und ich auf Macs editieren möchte.
Jetzt muss ich wohl, die Datei 'javascript.d.ts' ins Arbeitsverzeichnis des Editors kopieren.
Wo finde ich die denn auf dem Raspberry?
-
Ich habe auch das Szenario, dass meine iobroker auf einem Raspberry installiert ist und ich auf Macs editieren möchte.
Jetzt muss ich wohl, die Datei 'javascript.d.ts' ins Arbeitsverzeichnis des Editors kopieren.
Wo finde ich die denn auf dem Raspberry? `
Ich hab oben nen Link gepostet. Dort auf Raw-Ansicht wechseln und die im Arbeitsverzeichnis speichern. -
Danke!
Alles klar. Ich hatte den Link übersehen.
Funktioniert super!
-
Ich wollte mich auch nur kurz für die Tipps bedanken - VSCode ist echt super - speziell mit der Erweiterung, dass die ioBroker Funktionen bekannt gemacht werden können.
Also danke nochmal
Christof
-
<== großer Fan von VSCode
Vor allem kann es mit https://github.com/ioBroker/ioBroker.javascript/blob/master/lib/javascript.d.ts Autovervollständigung und Typüberprüfung für die Funktionen der ioBroker-Schnittstelle, wenn du am Anfang deines Skripts diesen Kommentar einfügst:
/// <reference path="javascript.d.ts"> // @ts-check</reference> ```` `
Gerade mal probiert und ich bin ziemlich begeistert.
Einen angezeigten Fehler kann ich nicht nachvollziehen:
Die Funktion wird doch üblicherweise so genutzt?
createState() "erkennt doch die Anzahl und Art der Parameter, sprich die Parameter zur Stelle lässt sich doch nicht genau bestimmen oder?
Die Datei meckert das fehlende "forceCreation" an, welches ich laut Dokumentation auch weglassen kann.
-
Danke für den Hinweis, müsste ich checken. Kann durchaus sein, dass ich eine der Funktionssignaturen nicht korrekt abgebildet habe.
-
Danke für den Hinweis, müsste ich checken. Kann durchaus sein, dass ich eine der Funktionssignaturen nicht korrekt abgebildet habe. `
kann man das denn überhaupt abbilden?
Ich habe so verstanden, dass die Funktion schaut, welche Werte übergeben werden, sie interpretiert und erst zuordned. Also Werte weggelassen werden können und die Definition dann "eine Stelle aufrutscht".
Ist so etwas in einer Definitionsdatei machbar?
Da steckt doch Programmlogik hinter.
-
Ist so etwas in einer Definitionsdatei machbar? `
Ja, indem du alle Möglichkeiten auflistest. Als letztes muss dann die allgemeine Form stehen, die zu allen aufgelisteten Varianten kompatibel ist.Siehe getForeignObjects hier: https://github.com/AlCalzone/ioBroker.t … d.ts#L1031