NEWS
Konfiguration für eigene Scripts
-
Hallo miteinander,
ich bin zur Zeit dabei die Lichtsteuerung für meine Wohnung zu überarbeiten. Ich habe deCONZ im Einsatz und das funktioniert gut, es ist aber noch sehr nah dran an Zigbee selbst. In Sachen Home-Automation habe ich vor allem die Möglichkeit vermisst, eine Szene für die gesamte Beleuchtung auszuwählen, die dann aber erst beim Betätigen eines Taster für den jeweiligen Raum angeschaltet wird. Mit einem ioBroker Script konnte ich das und mehr ohne weiteres umsetzen, die Kommunikation mit deCONZ funktioniert reibungslos!
Ich verwalte meinen Code generell in git, d.h. ich würde von der "Mirror scripts to file path" Funktion im JavaScript Adapter gebrauch machen. Nun habe ich mich aber gefragt was die gängige Lösung ist um eine Art Konfiguration (z.B. als JSON) für die eigenen Skripte zu realisieren. Im Prinzip gibt es wohl drei Möglichkeiten:
- Konfiguration direkt im JavaScript File. So mache ich es im Moment und das gefällt mir nicht.
- Konfiguration in einer separaten Datei irgendwo im File-System. Man setzt in ioBroker dann eine Variable / "State", die den Pfad angibt. Das JavaScript schaut in den State und lädt mit fs.readFileSync von dem hinterlegten Pfad.
- Gesamte Konfiguration gespeichert in einer Baumstruktur aus ioBroker Objekten. Vorteil hier wäre, dass man die Baumansicht der ioBroker Objekte nutzen könnte um das Skript zu konfigurieren.
Wie macht ihr das normalerweise? Interessant wäre z.B. auch zu wissen wo Adapter in der Regel ihr Konfiguration speichern. Hat jemand die eine oder andere Lösung schonmal ausprobiert?
Viele Grüße
Krueml -
@misterkrueml sagte in Konfiguration für eigene Scripts:
Konfiguration direkt im JavaScript File
was meinst du mit Konfiguration ??
-
@arteck said in Konfiguration für eigene Scripts:
@misterkrueml sagte in Konfiguration für eigene Scripts:
Konfiguration direkt im JavaScript File
was meinst du mit Konfiguration ??
Ich habe das Script recht generisch geschrieben, so dass es im Prinzip für beliebige Wohnungen oder Häuser funktionieren würde - solange die Konfiguration auf die jeweilige Wohnung / Haus angepasst wird. Damit assoziiere ich z.B. Schalter mit Räumen oder die States in ioBroker, die die Szene für den Raum angeben und so weiter. Ein Beispiel für das Wohnzimmer mit Kommentaren:
const living_room = { groupName: '[Living Room] All', /* deCONZ Gruppe */ buttons: [ {name: '[Living Room] Remote', id: 1}, /* deCONZ Taster */ ], sceneId: 'living_room', /* Variable in ioBroker, die die Szene für das Wohnzimmer angibt */ switchId: 'living_room.main', /* Variable in ioBroker, die als "virtuellen Switch" für Homekit fungiert */ }
Das kann ich ja alles ohne weiteres auslagern, so dass das Skript selbst unabhängig von einem konkreten Setup bleibt. Die Frage ist nur, wohin damit?
-
@misterkrueml ahh jetzt ja... hmm..
über generische Steuerung habe ich mir nie gedanken gemacht zumindest nicht so wie du es schreibst .. da man hierfür den scenen oder in Scripten Rules verwenden kann.mein Haus hat in jedem Zimmer eine einzelne Steuerung da überschneidet sich nix..
das einzig generische ist "Haus verlassen" -> alles aus..und guten nacht -
@misterkrueml ich nutze das zwar nicht selbst, aber mit require() kannst du zB eine Konfiguration laden. Der Pfad ist relativ zu
/opt/iobroker/node_modules/
anzugeben. Wenn Du deinen Config ordner also in/opt/iobroker/configs/
hast, dann kansst du eine Datei myConfig.json so laden// { // "baseID":"0_userdata.0.TestDP", // "reset":"0_userdata.0.TestDP.Reset" // } const myConfig = require('../configs/myConfig.json'); log(myConfig.baseID); log(myConfig.reset);
-
@fastfoot said in Konfiguration für eigene Scripts:
@misterkrueml ich nutze das zwar nicht selbst, aber mit require() kannst du zB eine Konfiguration laden. Der Pfad ist relativ zu
/opt/iobroker/node_modules/iobroker.javascript/lib/
anzugeben. Wenn Du deinen Config ordner also in/opt/iobroker/configs/
hast, dann kansst du eine Datei myConfig.json so laden// { // "baseID":"0_userdata.0.TestDP", // "reset":"0_userdata.0.TestDP.Reset" // } const myConfig = require('../../../configs/myConfig.json'); log(myConfig.baseID); log(myConfig.reset);
Ja genau, an sowas hatte ich gedacht. Ich habe überlegt fs zu nutzen, um zu vermeiden, dass der Pfad relativ sein muss:
const fs = require('fs') const raw = fs.readFileSync('/absolute/path/to/file') const config = JSON.parse(raw)
Ich denke das könnte beides eine gute Lösung sein, da so die Config auch direkt in einem git Repo liegen kann.
-
@misterkrueml mich hat halt gestört, für ein Skript 2 Dateien zu haben, meist sind meine Projekte recht klein. Gefallen hat mir bei require() der Einzeiler