Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    473

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.2k

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

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

Scheduled Pinned Locked Moved JavaScript
37 Posts 6 Posters 5.6k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AlCalzoneA AlCalzone

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

    meist sind die immer da und kommen nicht erst wenn mans richtig macht.

    Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind. Eigentlich sollten die auf Fehler hinweisen.
    Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

    P Offline
    P Offline
    Pittini
    Developer
    wrote on last edited by Pittini
    #21

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

    Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind.

    Z.b. bei mehrdimensionalen Array mault er fast immer.
    2020-03-06 09_00_16-javascript - ioBroker.png

    siehe auch hier:
    2020-03-06 09_20_21-javascript - ioBroker.png
    Oder hier mault er die enumNames an:
    2020-03-06 08_59_58-javascript - ioBroker.png

    Alle Beispiele sind aus Skripts die einwandfrei funktionieren.

    AlCalzoneA 1 Reply Last reply
    0
    • C Offline
      C Offline
      CruziX
      wrote on last edited by
      #22

      Wenn ich zu Hause bin geb ich hier auch mal ein paar Beispiele.
      Was mir direkt einfällt.
      In einem Global Skript erweiter ich die Klasse Date um eine function.

      Date.diffBetween =

      Und in skripten wo ich da verwende, wird diese Funktion auch als Fehler angemerkt

      AlCalzoneA 1 Reply Last reply
      0
      • P Pittini

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

        Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind.

        Z.b. bei mehrdimensionalen Array mault er fast immer.
        2020-03-06 09_00_16-javascript - ioBroker.png

        siehe auch hier:
        2020-03-06 09_20_21-javascript - ioBroker.png
        Oder hier mault er die enumNames an:
        2020-03-06 08_59_58-javascript - ioBroker.png

        Alle Beispiele sind aus Skripts die einwandfrei funktionieren.

        AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        wrote on last edited by AlCalzone
        #23

        @Pittini Ok, das sind beides Beispiele, die sich nicht unbedingt beheben lassen. Beim Array zum Beispiel ändert sich durch die Zuweisung der Typ - das mag die Typprüfung nicht, auch wenn es valide ist.

        Bei Funktionsaufrufen solltest du aber relativ safe sein, dass wenn etwas gemeckert wird, es wirklich nicht stimmt.

        Das Beispiel mit forceCreate muss ich mir mal anschauen, scheint erst mal unplausibel.

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

        1 Reply Last reply
        0
        • C CruziX

          Wenn ich zu Hause bin geb ich hier auch mal ein paar Beispiele.
          Was mir direkt einfällt.
          In einem Global Skript erweiter ich die Klasse Date um eine function.

          Date.diffBetween =

          Und in skripten wo ich da verwende, wird diese Funktion auch als Fehler angemerkt

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #24

          @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.

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

          C 1 Reply Last reply
          0
          • 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
            wrote on last edited by
            #25

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

            AlCalzoneA 1 Reply Last reply
            0
            • C CruziX

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

              AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              wrote on last edited by
              #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 Reply Last reply
              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
                wrote on last edited by
                #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 Reply Last reply
                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
                  wrote on last edited by
                  #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 Replies Last reply
                  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
                    wrote on last edited by
                    #29

                    Danke, da hab ich den Fehler auch.

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

                    1 Reply Last reply
                    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
                      wrote on last edited by
                      #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 Reply Last reply
                      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
                        wrote on last edited by
                        #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 Reply Last reply
                        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
                          wrote on last edited by
                          #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 Reply Last reply
                          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
                            wrote on last edited by
                            #33

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

                            AlCalzoneA 1 Reply Last reply
                            0
                            • P Pittini

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

                              AlCalzoneA Offline
                              AlCalzoneA Offline
                              AlCalzone
                              Developer
                              wrote on last edited by
                              #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 Reply Last reply
                              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
                                wrote on last edited by
                                #35

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

                                1 Reply Last reply
                                0
                                • P Offline
                                  P Offline
                                  Pittini
                                  Developer
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  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
                                    wrote on last edited by
                                    #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 Reply Last reply
                                    2
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    374

                                    Online

                                    32.7k

                                    Users

                                    82.5k

                                    Topics

                                    1.3m

                                    Posts
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Home
                                    • Recent
                                    • Tags
                                    • Unread 0
                                    • Categories
                                    • Unreplied
                                    • Popular
                                    • GitHub
                                    • Docu
                                    • Hilfe