Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Objekt IDs in Skripten auf Konsistenz prüfen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Objekt IDs in Skripten auf Konsistenz prüfen

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 4 Kommentatoren 375 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Offline
    C Offline
    centrofly
    schrieb am zuletzt editiert von
    #1

    Moin,

    ich habe es schon öfter gehabt, dass Skripte bei mir unbemerkt nicht mehr funktioniert haben, weil sich die IDs von Objekten geändert haben (bspw. weil ein Adapter seine Datenpunkte umbenannt hat, oder weil ich bei meinen eigenen Datenpunkten irgendwas umgebaut habe). Wahrscheinlich sollte man am Besten mit Aliasen arbeiten um das zu verhindern, aber das ist ein anderes Thema...

    Jetzt wäre es ja cool, wenn es einen Möglichkeit gäbe, sowas zu monitoren. Also eine Funktion, die bemerkt, wenn in einem Skirpt (oder Blockly) eine Objekt ID angesprochen wird, die es gar nicht (mehr) gibt.

    Gibt es soetwas schon, hat vielleicht irgendwer mal ein Skipt dafür gebaut...?

    Falls es das noch nicht gibt, wäre die Frage: Wie könnte ich am einfachsten auf den Code meiner Skripte zugreifen, um diesen dann zu parsen? Liegt der Skript-Code im Klartext auch in irgendwelchen Datenpunkten...?

    Viele Grüße
    Jan

    AlCalzoneA paul53P 2 Antworten Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #2

      @centrofly sagte in Objekt IDs in Skripten auf Konsistenz prüfen:

      Gibt es soetwas schon,

      im Prinzip ja, aber ich habe es noch nicht selbst getestet.

      in einem solchen Fall kommt nämlich ein Fehler im log.
      mit dem Adapter log-parser müsste so etwas zu finden sein.

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • C centrofly

        Moin,

        ich habe es schon öfter gehabt, dass Skripte bei mir unbemerkt nicht mehr funktioniert haben, weil sich die IDs von Objekten geändert haben (bspw. weil ein Adapter seine Datenpunkte umbenannt hat, oder weil ich bei meinen eigenen Datenpunkten irgendwas umgebaut habe). Wahrscheinlich sollte man am Besten mit Aliasen arbeiten um das zu verhindern, aber das ist ein anderes Thema...

        Jetzt wäre es ja cool, wenn es einen Möglichkeit gäbe, sowas zu monitoren. Also eine Funktion, die bemerkt, wenn in einem Skirpt (oder Blockly) eine Objekt ID angesprochen wird, die es gar nicht (mehr) gibt.

        Gibt es soetwas schon, hat vielleicht irgendwer mal ein Skipt dafür gebaut...?

        Falls es das noch nicht gibt, wäre die Frage: Wie könnte ich am einfachsten auf den Code meiner Skripte zugreifen, um diesen dann zu parsen? Liegt der Skript-Code im Klartext auch in irgendwelchen Datenpunkten...?

        Viele Grüße
        Jan

        AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        schrieb am zuletzt editiert von
        #3

        @centrofly sagte in Objekt IDs in Skripten auf Konsistenz prüfen:

        Wie könnte ich am einfachsten auf den Code meiner Skripte zugreifen, um diesen dann zu parsen?

        Du könntest die Skripte mit der Adapter-Option auf Festplatte spiegeln und dann mit einem Texteditor bearbeiten.

        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

        1 Antwort Letzte Antwort
        0
        • C centrofly

          Moin,

          ich habe es schon öfter gehabt, dass Skripte bei mir unbemerkt nicht mehr funktioniert haben, weil sich die IDs von Objekten geändert haben (bspw. weil ein Adapter seine Datenpunkte umbenannt hat, oder weil ich bei meinen eigenen Datenpunkten irgendwas umgebaut habe). Wahrscheinlich sollte man am Besten mit Aliasen arbeiten um das zu verhindern, aber das ist ein anderes Thema...

          Jetzt wäre es ja cool, wenn es einen Möglichkeit gäbe, sowas zu monitoren. Also eine Funktion, die bemerkt, wenn in einem Skirpt (oder Blockly) eine Objekt ID angesprochen wird, die es gar nicht (mehr) gibt.

          Gibt es soetwas schon, hat vielleicht irgendwer mal ein Skipt dafür gebaut...?

          Falls es das noch nicht gibt, wäre die Frage: Wie könnte ich am einfachsten auf den Code meiner Skripte zugreifen, um diesen dann zu parsen? Liegt der Skript-Code im Klartext auch in irgendwelchen Datenpunkten...?

          Viele Grüße
          Jan

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @centrofly sagte: Liegt der Skript-Code im Klartext auch in irgendwelchen Datenpunkten...?

          Nicht in Datenpunkten, sondern im Objekt "script.js.scriptname" unter common.source.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          C 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @centrofly sagte: Liegt der Skript-Code im Klartext auch in irgendwelchen Datenpunkten...?

            Nicht in Datenpunkten, sondern im Objekt "script.js.scriptname" unter common.source.

            C Offline
            C Offline
            centrofly
            schrieb am zuletzt editiert von
            #5

            @paul53 Ok super, lesen des source codes eines Skripts klappt schon mal so:

            var source = getObject('script.js.common.04_Monitor.myScript').common.source;
            log( source );
            

            Jetzt will ich ja über alle Skripte iterieren. Da stehe ich aber auf dem Schlauch. Ich dachte ich mache es mit einem Selektor, bspw. so:

            var selektor = $('script[id=script.js.common.*]');
            oder
            var selektor = $('state[id=script.js.common.*]');
            

            Aber das klappt irgendwie nicht. Hat jemand eine Idee wie ich alle Skripte zu fassen bekomme?

            Oder generell: Wie kann ich eigentlich alle Childs eines Channels selektieren...? Ich kenne nur den umgekehrten Weg, also den übergeordneten Knoten zu ermitteln (also mit split, slice etc.).

            paul53P 1 Antwort Letzte Antwort
            0
            • C centrofly

              @paul53 Ok super, lesen des source codes eines Skripts klappt schon mal so:

              var source = getObject('script.js.common.04_Monitor.myScript').common.source;
              log( source );
              

              Jetzt will ich ja über alle Skripte iterieren. Da stehe ich aber auf dem Schlauch. Ich dachte ich mache es mit einem Selektor, bspw. so:

              var selektor = $('script[id=script.js.common.*]');
              oder
              var selektor = $('state[id=script.js.common.*]');
              

              Aber das klappt irgendwie nicht. Hat jemand eine Idee wie ich alle Skripte zu fassen bekomme?

              Oder generell: Wie kann ich eigentlich alle Childs eines Channels selektieren...? Ich kenne nur den umgekehrten Weg, also den übergeordneten Knoten zu ermitteln (also mit split, slice etc.).

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

              @centrofly sagte: Aber das klappt irgendwie nicht.

              Der $Selector kann nur Datenpunkte.
              Jedes Skript hat auch einen Aktivierungs-Datenpunkt.

              const scriptsCommon = $('javascript.0.scriptEnabled.common.*');
              

              Damit lässt sich in einer Schleife "javascript.0.scriptEnabled" durch "script.js" ersetzen und so auf die Objekte zugreifen.

              EDIT:

              const scripts = $('javascript.0.scriptEnabled.*');
              
              scripts.each(function(id, i) {
                  id = id.replace('javascript.0.scriptEnabled', 'script.js');
                  if(existsObject(id) && getObject(id).type == 'script') {
                      // Auswertung von getObject(id).common.source
                  }
              });
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              C 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @centrofly sagte: Aber das klappt irgendwie nicht.

                Der $Selector kann nur Datenpunkte.
                Jedes Skript hat auch einen Aktivierungs-Datenpunkt.

                const scriptsCommon = $('javascript.0.scriptEnabled.common.*');
                

                Damit lässt sich in einer Schleife "javascript.0.scriptEnabled" durch "script.js" ersetzen und so auf die Objekte zugreifen.

                EDIT:

                const scripts = $('javascript.0.scriptEnabled.*');
                
                scripts.each(function(id, i) {
                    id = id.replace('javascript.0.scriptEnabled', 'script.js');
                    if(existsObject(id) && getObject(id).type == 'script') {
                        // Auswertung von getObject(id).common.source
                    }
                });
                
                C Offline
                C Offline
                centrofly
                schrieb am zuletzt editiert von centrofly
                #7

                @paul53 Perfekt, das hat mir schon mal ordentlich weitergeholfen!

                Folgendes gibt jetzt die Skripte mit den zugehörigen Objekt IDs aus (wenn diese im Code mit einem Hochkomma eingeschlossen sind):

                const regex = new RegExp(`'[a-z]*\.0\.[a-zA-Z0-9.]*'`, `g`);
                const scripts = $('javascript.0.scriptEnabled.*');
                 
                scripts.each(function(id) 
                {
                    id = id.replace('javascript.0.scriptEnabled', 'script.js');
                    
                    if(existsObject(id) && getObject(id).type == 'script') 
                    {
                        var source = getObject(id).common.source;
                        var matches = source.match(regex);
                
                        if (matches != null)
                        {
                            matches.forEach(function (element)
                            {
                                log(id + ' --> ' + element);
                
                            });
                        }
                    }
                });
                

                Gibt mir noch ein paar falsche Treffer, da muss sich noch ein wenig Feintuning betreiben, aber grob passt das so.

                Vielen Dank für Eure Hilfe!
                Jan

                1 Antwort Letzte Antwort
                0
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                731

                Online

                32.4k

                Benutzer

                81.5k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe