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. Error/Bug
  4. Neue Datenpunkte ersten beim zweiten Skriptstart verfügbar?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    968

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    693

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Neue Datenpunkte ersten beim zweiten Skriptstart verfügbar?

Geplant Angeheftet Gesperrt Verschoben Error/Bug
10 Beiträge 3 Kommentatoren 921 Aufrufe
  • Ä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.
  • J Offline
    J Offline
    Jayvee
    schrieb am zuletzt editiert von
    #1

    Hallo,

    kenn jemand den Effekt, dass Datenpunkte im Skript zwar mit create State angelegt werden, aber erst beim zweiten Skriptstart verfügbar sind?

    Beispiel: Beim ersten Skriptstart wird die Schleife 10 mal durchlaufen, respektive endlos.

    Beim zweiten Start gar nicht.

    Es spielt keine Rolle, ob man auf getObject oder getState().netExist abfrägt.

    Wo ist mein Fehler?

    -JJ

    console.error("Start: ");
    const dp_Alive = "javascript.1.Alive.0x-Test"; // Javascript 1; für Instanz 0 entsprechend ändern. Datenpunkt nach zweitem Skriptstart manull löschen.
    for (i = 1; i < 10; i++) {
        if (!getObject(dp_Alive)) {
            console.warn("Loop: " + i);
            createState(dp_Alive, true);
            console.warn(getState(dp_Alive).val);
        }
    } 
    console.error("Ende.");
    stopScript();
    
    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Funktionen, die eine Callback-Funktion enthalten können wie z.B. createState(), setState() usw., werden nur angeschubst, deren vollständige Ausführung aber nicht abgewartet. Wenn man das Ergebnis dieser Funktionen auswerten will, muss man das in der Callback-Funktion machen.

      console.error("Start: ");
      const dp_Alive = "Alive.0x-Test"; // Datenpunkt nach zweitem Skriptstart manull löschen.
      const id_Alive = "javascript.1." + dp_Alive;
      
      if (!getObject(id_Alive)) {
          createState(dp_Alive, true, function() {
              console.warn(getState(dp_Alive).val);
          });
      } 
      console.error("Ende.");
      

      Das Error-Log "Ende." wird vor dem Warning-Log mit dem Wert kommen

      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

      1 Antwort Letzte Antwort
      0
      • J Offline
        J Offline
        Jayvee
        schrieb am zuletzt editiert von
        #3

        Vielen Dank für die schnelle und kompetente Antwort.

        Wie "warte" ich an dieser Stelle am elegantesten darauf, dass die Datenpunkte beschrieben oder gelesen werden können, um Fehler durch verfrühte getState oder setState zu umgehen?

        Die Datenpunkte werden als Trigger zum Start weiterer Aktionen verwendet. Wenn ich 12 Datenpunkte brauche, muss ich dann einen 13. anlegen, mit FALSE initieren, warten bis der Callback kommt und dann mit TRUE eine Subscription auslösen oder gibt es noch was eleganteres?

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @JJJ:

          Die Datenpunkte werden als Trigger zum Start weiterer Aktionen verwendet `
          Jeden Datenpunkt auf change: 'any' triggern, was die default Einstellung bei dem on-Muster als Objekt ist. Dann wird sofort nach Erstellen des Datenpunktes das erste Mal getriggert.

          on({id: id_Alive}, function(dp) { // Triggert bei jeder Aktualisierung des Zeitstempels
             hier das Datenpunkt-Objekt (dp) auswerten
          });
          

          Ein Triggern erfolgt immer erst dann, wenn der Trigger-Datenpunkt verfügbar ist (auch für getState() und setState()).

          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

          1 Antwort Letzte Antwort
          0
          • J Offline
            J Offline
            Jayvee
            schrieb am zuletzt editiert von
            #5

            Alles klar, danke.

            1 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #6

              @paul53:

              Funktionen, die eine Callback-Funktion enthalten können wie z.B. createState(), setState() usw., werden nur angeschubst, deren vollständige Ausführung aber nicht abgewartet. Wenn man das Ergebnis dieser Funktionen auswerten will, muss man das in der Callback-Funktion machen.

              console.error("Start: ");
              const dp_Alive = "Alive.0x-Test"; // Datenpunkt nach zweitem Skriptstart manull löschen.
              const id_Alive = "javascript.1." + dp_Alive;
              
              if (!getObject(id_Alive)) {
                  createState(dp_Alive, true, function() {
                      console.warn(getState(dp_Alive).val);
                  });
              } 
              console.error("Ende.");
              

              Das Error-Log "Ende." wird vor dem Warning-Log mit dem Wert kommen `

              Man muss gar nicht prüfen ob die variable existiert. CreateState macht das auch.

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                Richtig ist````

                createState(dp_Alive, () =>{
                // hier schreibe ich immer meine Logik.

                });
                
                1 Antwort Letzte Antwort
                0
                • J Offline
                  J Offline
                  Jayvee
                  schrieb am zuletzt editiert von
                  #8

                  Danke Bluefox.

                  Und wenn mehrere Datenpunkte anzulegen sind?

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    @JJJ:

                    Und wenn mehrere Datenpunkte anzulegen sind? `
                    Vorschlag:

                    const dp1 = '...';
                    ...
                    const dpN = '...';
                    const anzahlDP = N;  // für N die tatsächliche Datenpunkt-Anzahl einsetzen
                    
                    var cnt = 0;
                    
                    function auswertung() {
                       cnt++;
                       if(cnt == anzahlDP) {
                          // Hier erfolgt die Auswertung
                       }
                    } 
                    
                    createState(dp1, true, auswertung);
                    ...
                    createState(dpN, true, auswertung);
                    
                    

                    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

                    1 Antwort Letzte Antwort
                    0
                    • J Offline
                      J Offline
                      Jayvee
                      schrieb am zuletzt editiert von
                      #10

                      Ist etwas gewöhnungsbedürftig aber passt. Vielen Dank.

                      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

                      868

                      Online

                      32.6k

                      Benutzer

                      82.0k

                      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