Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]Timingprobleme bei createState und setState im selben Skript

    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

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • AlCalzone
      AlCalzone Developer @CruziX last edited by

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

      1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer @Pittini last edited by

        @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 1 Reply Last reply Reply Quote 0
        • P
          Pittini Developer @AlCalzone last edited by

          @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

          AlCalzone 2 Replies Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer @Pittini last edited by

            Danke, da hab ich den Fehler auch.

            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer @Pittini last edited by

              @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 1 Reply Last reply Reply Quote 1
              • P
                Pittini Developer @AlCalzone last edited by

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

                AlCalzone 1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer @Pittini last edited by

                  @Pittini Design Limitation 😞

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

                  P 1 Reply Last reply Reply Quote 0
                  • P
                    Pittini Developer @AlCalzone last edited by

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

                    AlCalzone 1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer @Pittini last edited by

                      @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 1 Reply Last reply Reply Quote 1
                      • P
                        Pittini Developer @AlCalzone last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • P
                          Pittini Developer last edited by

                          @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

                          AlCalzone 1 Reply Last reply Reply Quote 0
                          • AlCalzone
                            AlCalzone Developer @Pittini last edited by

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

                            1 Reply Last reply Reply Quote 2
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            941
                            Online

                            31.9k
                            Users

                            80.1k
                            Topics

                            1.3m
                            Posts

                            6
                            37
                            3885
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo