Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. azamir

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    A
    • Profile
    • Following 0
    • Followers 0
    • Topics 4
    • Posts 15
    • Best 0
    • Groups 1

    azamir

    @azamir

    Starter

    0
    Reputation
    27
    Profile views
    15
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    azamir Follow
    Starter

    Latest posts made by azamir

    • RE: Modulare Skripe

      Ich habe ein bisschen rumprobiert und folgendes getan:

      • Verzeichnis /opt/iobroker/node_modules/ioBroker.javascript/node_modules/mymodules angelegt
      • npm init darin ausgeführt
      • Folgendes in die index.js geschrieben
      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;
      }
      
      • mymodules in 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 require in 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!

      posted in JavaScript
      A
      azamir
    • RE: Modulare Skripe

      @Nahasapee Vielen Dank, ich schaue mir das mal genauer an und poste dann hier meine Erkenntnisse und was ich daraus gemacht habe.

      posted in JavaScript
      A
      azamir
    • RE: Modulare Skripe

      @zerraxys Bedeutet das dann aber nicht, dass der loadCache in jeden Skript einzeln gefüllt wird?

      posted in JavaScript
      A
      azamir
    • RE: Modulare Skripe

      @paul53 Vielen Dank für den schnellen Test. Ich habe selber noch keine Node-Module geschrieben. Hätte ich gewusst dass das so einfach ist, hätte ich es auch selber tun können 😊 Sorry

      Vielleicht wird getState ja von irgendeinem Modul zur Verfügung gestellt, das man wiederum in seinem Modul per require einbinden muss (und hoffentlich kann)?

      posted in JavaScript
      A
      azamir
    • Modulare Skripe

      Hallo alle!

      Meine Skriptsammlung ist mittlerweile recht groß und ich würde sie gerne in Modulen verwalten. Ein Modul soll hierbei folgendes können

      • Persistenten Zustand haben (zumindest bis zum Adapter-Neustart)
      • Interne Datenstrukturen kapseln und vor dem "Nutzer" verstecken
      • Nur bestimmte Funktionalität für andere Module und Skripte anbieten
      • Eigene subscriptions/schedules für die interne Funktionalität haben

      Ein Modul sieht bei mir so aus:

      const someModule = function() {
        const internaldata1 = {
        };
        
        // ...
      
        doSomeFancyInitialization();
        on("x", ...)
        on("x", ...)
      
        // ...
      
        return {
          function1() {
          },
          function2() {
          }
        }
      }();
      

      Nun habe ich die Möglichkeit, dieses Modul entweder Global oder als normales Skript zu speichern und beides ist mit Problemen behaftet:

      • Als normales Skript sind someModule.function1 und someModule.function2 nicht von anderen Skripten erreichbar
      • Als globales Skript hat jedes normale Skript eine eigene Instanz des Moduls (Code wird einfach "davor" gehangen) und ich habe keinen zentralen State

      Folgendes kam mir in den Sinn, ich hätte hier aber gerne die Meinung der Experten:

      • Alle internen Daten als Datenpunkte speichern und alle Modulinstanzen subscriben sich darauf um ihren internen Zustand synchron zu halten
        • Bekommt man dann alles synchron? Ich könnte mir vorstellen dass das eine komplexe Aufgabe ist
      • Alle Module als echte node-Module direkt in node_modules speichern
        • Kann ich dann aus meinen Modulen heraus die ioBroker-Funktionen getState etc. nutzen?

      Für Input bin ich sehr dankbar!

      posted in JavaScript
      A
      azamir
    • RE: WiFi Türgong gesucht

      @el_malto

      Keine Angst, es klingt schlimmer als es tatsächlich ist 😉 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 😄

      Ist der Google Mini denn laut genug? Das Ganze hängt dann im EG-Flur und soll auch im Keller und OG hörbar sein bzw. würde ich dann mehrere Gongs besorgen und verteilen. An der Stelle im EG-Flur hängt auch schon das Tablet und das hört man gerade so im Wohnzimmer wenn die Tür offen ist.

      Ich glaube beinahe, dass es auf eine Selbstbaulösung mit Homematic-Empfänger und Piezo o.Ä. hinausläuft.

      posted in Hardware
      A
      azamir
    • WiFi Türgong gesucht

      Hallo!

      Ich möchte gerne meine Türklingel nach ioBroker portieren. Momentan nutze ich eine einfache Funkklingel und einen dazu passenden Steckdosengong. Es sind keinerlei Kabel von draussen nach drinnen vorhanden.

      Ich würde jetzt gerne einen Homematic Klingeltaster draussen anbringen (Homematic CCU2 ist vorhanden und eingebunden, funktioniert einwandfrei) und auf Tastendruck dann gerne drinnen "gongen".

      Folgendes an "Reaktion" auf einen Klingeldruck ist bereits implementiert:

      • Sprachausgabe auf Tablet im Flur
      • Telegram an alle anwesenden Familienmitglieder
      • Popup auf alles Kodi-Instanzen und auf der Dreambox
      • Blinken der Deckenbeleuchtung in den Räumen in denen sich Personen aufhalten

      Zu meinem Glück fehlt mir also nur noch ein möglichst günstiges, einfach einzubindendes Stück Hardware, das einfach nur recht laut "DINGDONG" macht 😉

      Hat hier jemand Erfahrungen? Der Ring Chime sieht gut aus, benötigt - so wie viele andere Geräte - aber wahrscheinlich die entsprechende Klingel draussen.

      posted in Hardware
      A
      azamir
    • RE: Externe Skriptverwaltung -> API-Call für Skript-Upload?

      Ich hatte noch 3.6.4 des JS-Adapters installiert - nach einem Update auf die neueste Version funktioniert das uploaden von Zipfiles nicht mehr. Auch nicht mit den direkt vorher mit der neuen Version generierten. Ist das so gewollt? Was erwartet der Upload-Dialog?

      posted in Skripten / Logik
      A
      azamir
    • RE: Externe Skriptverwaltung -> API-Call für Skript-Upload?

      Das klingt durchaus interessant, vielleicht ist damit dann auch ein privates Repository einbindbar. Ich kann mir durchaus vorstellen, auch Skripte zu veröffentlichen aber für meine interne Verwaltung nutze ich dann doch lieber ein privates Repository.

      posted in Skripten / Logik
      A
      azamir
    • Externe Skriptverwaltung -> API-Call für Skript-Upload?

      Hallo alle!

      Ich habe mittlerweile eine recht große Bibliothek von Javascript-Modulen in ioBroker. Da die Web-IDE bei mir recht schnell sehr langsam wird und ich gerne Versionsverwaltung, eine bessere IDE und eine vorhersehbare Reihenfolge meiner globalen Skripte haben wollte, habe ich meine Verwaltung nach aussen gezogen und verwalte sie in einem GIT Repository.

      Hier das Gerüst meiner Lösung (darf gerne genutzt werden): script.zip

      Man kann im Hauptordner .js Dateien anlegen, die dann korrekt umbenannt werden. Die Module im global Ordner werden nach Anweisung der index.txt zusammengesteckt. build.sh (sorry, Linux only ...) packt dann alles so zusammen dass man es einfach über "Upload" im Skripte-Modul hochladen kann. Hier meine Fragen:

      • Gibt es einen API-Call, den man evtl. direkt aus dem Skript heraus aufrufen könnte um nicht immer über die Web-IDE gehen zu müssen?
      • Gibt es die Möglichkeit, dem Upload mitzuteilen dass er alle Skripte vorher löschen soll?
      • Ist der Header, der für die Ordner gebraucht wird, immer gleich? Es scheint da eine ID zu geben

      Cheers
      azamir

      posted in Skripten / Logik
      A
      azamir
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo