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. [gelöst]Timingprobleme bei createState und setState im selben Skript

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

[gelöst]Timingprobleme bei createState und setState im selben Skript

Geplant Angeheftet Gesperrt Verschoben JavaScript
37 Beiträge 6 Kommentatoren 5.2k Aufrufe 5 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.
  • AlCalzoneA AlCalzone

    @CruziX sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

    In einem Global Skript erweiter ich die Klasse Date um eine function.

    Ok, noch ein Spezialfall. Dazu müsste man auch die Definition der Klasse ergänzen, damit die Typprüfung das versteht.

    C Offline
    C Offline
    CruziX
    schrieb am zuletzt editiert von
    #25

    @AlCalzone Was genau ist daran ein Spezialfall, dass sich die Funktion im global Skript befindet?

    AlCalzoneA 1 Antwort Letzte Antwort
    0
    • C CruziX

      @AlCalzone Was genau ist daran ein Spezialfall, dass sich die Funktion im global Skript befindet?

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

      @CruziX Ne, dass du eingebaute Funktionalität erweiterst. Unter der Haube verwendet die Typprüfung TypeScript und weiß, was die eingebauten Sachen (z.B. die Date-Klasse) normalerweise kann.
      Der Typprüfung beizubringen, dass du diese Funktionalität erweitert hast, ist tricky. Da ist es IMO einfacher, mit dem Fehler zu leben.
      Alternativ kannst du auch einfach nur neue Funktionen definieren, anstatt bestehendes zu erweitern. Das wird nämlich verstanden und nicht angemeckert.

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

      1 Antwort Letzte Antwort
      0
      • P Pittini

        @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

        Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

        2020-03-06 08_36_34-javascript - ioBroker.png

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

        @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

        2020-03-06 08_36_34-javascript - ioBroker.png

        Ich muss hier nochmal drauf zurück kommen. Welche Version hast du denn? Mit der aktuellen bekomme ich es nicht reproduziert:
        61242702-a3ca-4239-86a6-132061f08486-grafik.png

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

        P 1 Antwort Letzte Antwort
        0
        • AlCalzoneA AlCalzone

          @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

          2020-03-06 08_36_34-javascript - ioBroker.png

          Ich muss hier nochmal drauf zurück kommen. Welche Version hast du denn? Mit der aktuellen bekomme ich es nicht reproduziert:
          61242702-a3ca-4239-86a6-132061f08486-grafik.png

          P Offline
          P Offline
          Pittini
          Developer
          schrieb am zuletzt editiert von
          #28

          @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

          Welche Version hast du denn?

          ScriptEngine is 4.4.2. Und es ist bei mir reproduzierbar und in jedem Script wo ich das einsetze.

          Der Aufbau ist von Dir sogar, hier. Hier mal ein Testcode der hier den Fehler produziert:

          // Einmalig beim Programmstart alle States erzeugen, sofern nicht schon geschehen
          let states = [];
          states[0] = { id: "stateID1", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test0", type: "string", def: "Test0" } }
          states[1] = { id: "stateID2", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test1", type: "string", def: "Test1" } }
          
          let numStates = states.length;
          states.forEach(function (state) {
              createState(state.id, state.initial, state.forceCreation, state.common, function () {
                  numStates--;
                  if (numStates === 0) {
                      // fertig!
                      main();
                  }
              });
          });
          
          function main() {
              // hier der eigentliche Programmablauf
          }
          
          

          ergibt sofort:
          2020-03-21 12_51_32-javascript - ioBroker.png

          AlCalzoneA 2 Antworten Letzte Antwort
          0
          • P Pittini

            @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

            Welche Version hast du denn?

            ScriptEngine is 4.4.2. Und es ist bei mir reproduzierbar und in jedem Script wo ich das einsetze.

            Der Aufbau ist von Dir sogar, hier. Hier mal ein Testcode der hier den Fehler produziert:

            // Einmalig beim Programmstart alle States erzeugen, sofern nicht schon geschehen
            let states = [];
            states[0] = { id: "stateID1", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test0", type: "string", def: "Test0" } }
            states[1] = { id: "stateID2", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test1", type: "string", def: "Test1" } }
            
            let numStates = states.length;
            states.forEach(function (state) {
                createState(state.id, state.initial, state.forceCreation, state.common, function () {
                    numStates--;
                    if (numStates === 0) {
                        // fertig!
                        main();
                    }
                });
            });
            
            function main() {
                // hier der eigentliche Programmablauf
            }
            
            

            ergibt sofort:
            2020-03-21 12_51_32-javascript - ioBroker.png

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

            Danke, da hab ich den Fehler auch.

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

            1 Antwort Letzte Antwort
            0
            • P Pittini

              @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

              Welche Version hast du denn?

              ScriptEngine is 4.4.2. Und es ist bei mir reproduzierbar und in jedem Script wo ich das einsetze.

              Der Aufbau ist von Dir sogar, hier. Hier mal ein Testcode der hier den Fehler produziert:

              // Einmalig beim Programmstart alle States erzeugen, sofern nicht schon geschehen
              let states = [];
              states[0] = { id: "stateID1", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test0", type: "string", def: "Test0" } }
              states[1] = { id: "stateID2", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test1", type: "string", def: "Test1" } }
              
              let numStates = states.length;
              states.forEach(function (state) {
                  createState(state.id, state.initial, state.forceCreation, state.common, function () {
                      numStates--;
                      if (numStates === 0) {
                          // fertig!
                          main();
                      }
                  });
              });
              
              function main() {
                  // hier der eigentliche Programmablauf
              }
              
              

              ergibt sofort:
              2020-03-21 12_51_32-javascript - ioBroker.png

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

              @Pittini Der Fehler ist seltsam. Es wird zwar forceCreation angemeckert, aber das liegt daran, dass der Typ von common.type zu allgemein angenommen wird.
              Wenn du TypeScript ein bisschen hilfst, geht es:

              
              createState(state.id, state.initial, state.forceCreation, /** @type {iobJS.StateCommon} */ (state.common), function () { ... });
              

              Ein besserer Workaround fällt mir gerade nicht ein.

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

              P 1 Antwort Letzte Antwort
              1
              • AlCalzoneA AlCalzone

                @Pittini Der Fehler ist seltsam. Es wird zwar forceCreation angemeckert, aber das liegt daran, dass der Typ von common.type zu allgemein angenommen wird.
                Wenn du TypeScript ein bisschen hilfst, geht es:

                
                createState(state.id, state.initial, state.forceCreation, /** @type {iobJS.StateCommon} */ (state.common), function () { ... });
                

                Ein besserer Workaround fällt mir gerade nicht ein.

                P Offline
                P Offline
                Pittini
                Developer
                schrieb am zuletzt editiert von
                #31

                @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                Der Fehler ist seltsam. Es wird zwar forceCreation angemeckert, aber das liegt daran, dass der Typ von common.type zu allgemein angenommen wird.
                Wenn du TypeScript ein bisschen hilfst, geht es:

                Is ja kein Drama, mit dem Kringel kann ich leben, funktionieren tuts ja.

                Hab aber grad noch so nen Kandidaten, funktioniert eigentlich auch, wird aber angemault:

                let room = getObject("mihome.0.devices.magnet_158d000255d57b", 'rooms').enumNames[0];
                log(room);
                

                2020-03-31 17_00_05-javascript - ioBroker.png

                Fehler bei mir oder im System?

                AlCalzoneA 1 Antwort Letzte Antwort
                0
                • P Pittini

                  @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                  Der Fehler ist seltsam. Es wird zwar forceCreation angemeckert, aber das liegt daran, dass der Typ von common.type zu allgemein angenommen wird.
                  Wenn du TypeScript ein bisschen hilfst, geht es:

                  Is ja kein Drama, mit dem Kringel kann ich leben, funktionieren tuts ja.

                  Hab aber grad noch so nen Kandidaten, funktioniert eigentlich auch, wird aber angemault:

                  let room = getObject("mihome.0.devices.magnet_158d000255d57b", 'rooms').enumNames[0];
                  log(room);
                  

                  2020-03-31 17_00_05-javascript - ioBroker.png

                  Fehler bei mir oder im System?

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

                  @Pittini Design Limitation :(

                  enumNames existiert nur für bestimmte Objekte (States), aber getObject kann theoretisch auch andere Objekttypen zurückgeben.

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

                  P 1 Antwort Letzte Antwort
                  0
                  • AlCalzoneA AlCalzone

                    @Pittini Design Limitation :(

                    enumNames existiert nur für bestimmte Objekte (States), aber getObject kann theoretisch auch andere Objekttypen zurückgeben.

                    P Offline
                    P Offline
                    Pittini
                    Developer
                    schrieb am zuletzt editiert von
                    #33

                    @AlCalzone Danke Dir. Gibts ne andere Möglichkeit anhand der ID den Raum rauszukriegen?

                    AlCalzoneA 1 Antwort Letzte Antwort
                    0
                    • P Pittini

                      @AlCalzone Danke Dir. Gibts ne andere Möglichkeit anhand der ID den Raum rauszukriegen?

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

                      @Pittini Denke nicht - ich arbeite kaum mit Enums. Das ist wieder so ein Fehler, den du ignorieren kannst. Du weißt ja, dass du ein State-Objekt ausliest.

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

                      P 1 Antwort Letzte Antwort
                      1
                      • AlCalzoneA AlCalzone

                        @Pittini Denke nicht - ich arbeite kaum mit Enums. Das ist wieder so ein Fehler, den du ignorieren kannst. Du weißt ja, dass du ein State-Objekt ausliest.

                        P Offline
                        P Offline
                        Pittini
                        Developer
                        schrieb am zuletzt editiert von
                        #35

                        @AlCalzone Ok, prima, vielen Dank. Ich arbeite nämlich sehr viel mit den Raum und Funktion Enums.

                        1 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          Pittini
                          Developer
                          schrieb am zuletzt editiert von
                          #36

                          @AlCalzone Ich mach mal hier weiter auch wenns alt ist. Is nur als Info gedacht weils nei ist und evtl das Problem noch nicht bekannt
                          Seit einem der letzten js controller updates (weis leider nicht genau welches) krieg ich einen in all meinen Skripten vorhandenen Block angemault. Funktioniert weiterhin einwandfrei, sieht so aus:
                          2020-11-15 18_46_39-Window.png

                          Die Hilfe sagt:
                          2020-11-15 18_47_33-javascript - ioBroker.png

                          Falls Du zum testen das ganze Skript brauchst, findest hier: https://github.com/Pittini/iobroker-Fensterauswertung

                          AlCalzoneA 1 Antwort Letzte Antwort
                          0
                          • P Pittini

                            @AlCalzone Ich mach mal hier weiter auch wenns alt ist. Is nur als Info gedacht weils nei ist und evtl das Problem noch nicht bekannt
                            Seit einem der letzten js controller updates (weis leider nicht genau welches) krieg ich einen in all meinen Skripten vorhandenen Block angemault. Funktioniert weiterhin einwandfrei, sieht so aus:
                            2020-11-15 18_46_39-Window.png

                            Die Hilfe sagt:
                            2020-11-15 18_47_33-javascript - ioBroker.png

                            Falls Du zum testen das ganze Skript brauchst, findest hier: https://github.com/Pittini/iobroker-Fensterauswertung

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

                            @Pittini Komisch, da hat sich lange nichts mehr getan. Es liegt daran, dass für die Variable States nicht der korrekte Typ erkannt wird (bzw. unnötig "weit"). Ist leider so, dass TypeScript nicht rückwärts aus der Nutzung den Typ ableiten kann, sondern nur "vorwärts" von der Definition aus.

                            Du kannst nachhelfen, wenn du in die Zeile in der du States definierst, wie folgt abänderst:

                            /** @type {{ id: string, initial: any, forceCreation: boolean, common: iobJS.StateCommon }[]} */
                            const States = []; // Array mit anzulegenden Datenpunkten
                            

                            Dann beschwert er sich ab Zeile 219 über das fehlende Attribut role im common-Teil, was aber korrekt ist.

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

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


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            331

                            Online

                            32.5k

                            Benutzer

                            81.7k

                            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