Ich habe ein bisschen rumprobiert und folgendes getan:
- Verzeichnis
/opt/iobroker/node_modules/ioBroker.javascript/node_modules/mymodulesangelegt npm initdarin ausgeführt- Folgendes in die
index.jsgeschrieben
let modules = {};
let instance = null;
let initialized = null;
// above only boilerplate code
modules.inspect = function() {
return {
initialized() {
return initialized;
},
instance() {
return instance;
}
}
}()
// below only boilerplate code
module.exports = function(js_instance) {
if (!instance) {
console.log("Initializing modules");
initialized = new Date();
instance = js_instance;
}
return modules;
}
mymodulesin der Adapterkonfiguration zu den benötigten Modulen hinzugefügt- Um zu prüfen, ob meine Datenstrukturen auch wirklich nur einmal initialisiert werden, habe ich zwei identische Skripte mit folgendem Inhalt angelegt:
const mymodules = require('mymodules')(this);
console.log(mymodules.inspect.initialized());
Beide Skripte geben den gleichen Zeitstempel aus, wodurch ich davon ausgehe dass die Initialisierung tatsächlich nur einmal stattgefunden hat. Ich kann nun (und man möge mich bitte korrigieren wenn ich einen Denkfehler gemacht habe!) an beliebigen Stellen in meinen Skripten - vorzugsweise am Anfang wo this noch ganz eindeutig definiert ist - mit einem
const mymodules = require('mymodules')(this);
auf meine Module zugreifen
Nächste Schritte:
- Module selber auch wieder per
requirein das "Obermodul" einbinden - Irgendwie so hosten, dass ich bequeme Versionsverwaltung habe aber es trotzdem nicht öffentlich machen muss (Hat jemand eine Idee?)
Danke für eure guten Ideen und ich bin immer offen für Verbesserungsvorschläge!
Sorry
Es ist ein zeitgleiches "Ping" bzw. "Jemand ist an der Tür" auf allen Geräten die aktiv sind. Das mit dem Licht soll später auch aus wenn der Gong gongt 