Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. getState() in Callback von createState() gibt not found

    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

    getState() in Callback von createState() gibt not found

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      drefree last edited by

      Hallo allerseits,

      ich hab eine kurze Frage zu callbacks: Nach meinem Verständnis wird alles in der callback-Funktion erst aufgerufen nachdem der auslösende Befehl vollständig durchgelaufen ist. Beim Testen mit createState() hab ich aber das Problem dass ein getState() immer den Fehler "... not found" zurückgibt. Hier ein einfaches Testskript:

      createState('javascript.0.variables.test', 'test init', {name: 'test Variable'}, function(){
          console.log(getState('javascript.0.variables.test').val)
      })
      

      Hier die dazugehörige Fehlermeldung:

      javascript.0
      	2021-12-15 14:12:23.429	info	script.js.common.Hilfsskripte.test: null
      javascript.0
      	2021-12-15 14:12:23.429	warn	at processImmediate (internal/timers.js:466:21)
      javascript.0
      	2021-12-15 14:12:23.428	warn	at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:342:38)
      javascript.0
      	2021-12-15 14:12:23.428	warn	at Object.<anonymous> (script.js.common.Hilfsskripte.test:6:17)
      javascript.0
      	2021-12-15 14:12:23.426	warn	getState "javascript.0.variables.test" not found (3)
      javascript.0
      	2021-12-15 14:12:23.356	info	script.js.common.Hilfsskripte.test: registered 0 subscriptions and 0 schedules
      

      Benutze ich hingegen ein setState im callback gibt es keinen Fehler beim setzen des neues Werts (und der Wert wird auch korrekt geschrieben), die getState-Funktion ist aber immer noch "zu schnell" und kann den State nicht finden. Mache ich etwas falsch oder funktionieren callbacks doch anders als ich dachte? Hoffe jemand kann mir helfen.

      Acgua 1 Reply Last reply Reply Quote 0
      • Acgua
        Acgua @drefree last edited by Acgua

        Hi,

        Fehlermeldung kommt bei mir auch (JS-Adapter v5.2.16, node.js 14.17.1).

        Dein Aufbau steht ja so in der Doku als "short type":

        createState('myVariable', 1, {name: 'My own variable', unit: '°C'}) - create variable if does not exist with specific name and units

        Was geht ist, wenn du initialValue im "Common"-Teil in def (=Default) übergibst.
        Hier ein Beispiel mit Callback, und ein zweites mit async/await.

        const state123 = '0_userdata.0.test123';
        createState(state123, {name:'test variable', def:'test init', type:'string', read:true, write:true, role:'state' }, (obj) => {
            log(`Value of ${state123}: '${getState(state123).val}'`);
        })
        
        // Und noch Test per async/await
        test();
        async function test() {
        
            try {
        
                const state456 = '0_userdata.0.test456';
                await createStateAsync(state456, {name:'test variable', type:'string', read:true, write:true, role:'state', def:'test init' });
                const r = await getStateAsync(state456);
                log(`Value of ${state456}: '${r.val}'`);
        
            } catch(error) {
                log(error.stack, 'warn');
            }
        
        }
        

        Fazit soweit:
        createState() / createStateAsync() mag wohl initialValue als zweiten Parameter nicht, wenn als dritter Parameter das common-Objekt folgt.
        Bin mir nicht sicher ob ein das an unklarer Doku ist, oder tatsächlich ein Bug.

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Acgua last edited by paul53

          @acgua sagte: unklarer Doku ist, oder tatsächlich ein Bug.

          Das ist ein Bug.

          Acgua F 2 Replies Last reply Reply Quote 0
          • Acgua
            Acgua @paul53 last edited by Acgua

            @paul53 said in getState() in Callback von createState() gibt not found:

            Das ist ein Bug.

            Hab Issue aufgemacht: Github: ioBroker.javascript issue #924

            1 Reply Last reply Reply Quote 0
            • F
              fastfoot @paul53 last edited by fastfoot

              @paul53 sagte in getState() in Callback von createState() gibt not found:

              Das ist ein Bug.

              sehr seltsam, ich kann das nicht nachvollziehen, weder in javascript.0.variables(wo eig. kein eigener DP hingehört), noch in 0_userdata.0. Getestet mit dem script aus dem ersten Post und der heute erschienenen JS 5.2.18

              18:10:24.893	info	javascript.1 (21510) Start javascript script.js.Forum.test1234
              18:10:24.899	info	javascript.1 (21510) script.js.Forum.test1234: registered 0 subscriptions and 0 schedules
              18:10:24.912	info	javascript.1 (21510) script.js.Forum.test1234: setForeignState(id=javascript.0.variables.test1234, state={"val":"test init","ack":true,"c":"script.js.Forum.test1234"})
              18:10:24.962	info	javascript.1 (21510) script.js.Forum.test1234: getState(id=javascript.0.variables.test1234, timerId=undefined) => {"val":"test init","ack":true,"ts":1639588224920,"q":0,"c":"script.js.Forum.test1234","from":"system.adapter.javascript.1","user":"system.user.admin","lc":1639588224920}
              18:10:24.963	info	javascript.1 (21510) script.js.Forum.test1234: test init
              
              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @fastfoot last edited by paul53

                @fastfoot sagte: ich kann das nicht nachvollziehen

                Stimmt, ich auch nicht:

                Bild_2021-12-15_185523.png

                Javascript v5.2.13.
                Man sollte doch erst testen, bevor man eine Aussage trifft.

                F 1 Reply Last reply Reply Quote 0
                • F
                  fastfoot @paul53 last edited by

                  @paul53 sagte in getState() in Callback von createState() gibt not found:

                  Stimmt, ich auch nicht:

                  @apollon77 hat es mittlerweile im issue erklärt, scheint ein timing problem zu sein, welches wir dann wohl nicht haben

                  1 Reply Last reply Reply Quote 0
                  • D
                    drefree last edited by drefree

                    Das mit dem Timing-Problem macht sehr viel Sinn, ist ein Raspberry Pi 3 mit relativ wenig freiem Arbeitsspeicher und vielen anderen Skripten die im Hintergrund laufen. Habe vor kurzem die States auch auf Redis umgestellt, was evtl. auch eine zusätzliche Verzögerung bedeuten kann (?). Werde mal probieren den Initialwert mit def zu übergeben sobald ich wieder Zeit habe, danke für eure Hilfe.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    651
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    680
                    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