Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Fehlendes Anfaengerwissen

    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

    Fehlendes Anfaengerwissen

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

      Hi.

      Bin relativ neu mit ioBroker. Konnte bisher MQTT mit ioBroker kombinieren und ueber vis anzeigen.

      Nun moechte ich noch ein wenig Logik in meine Applikation reinbringen. Meine Idee: einen ganz einfachen Timer. Startzeit, Zwischenzeiten etc. sollen dann in einer Tabelle ueber die Visualisierung angezeigt werden. Habe dazu nun den Javascript Adpater installiert. Scheitere nun allerdings schon an den Grundfunktionen. Habe ein paar Variablen (Boolean Datenpunkte) unter "0_userdata.0.JS_Timer" eingetragen. Kann ueber vis die Variable steuern.

      Wenn ich nun aber eine Textvariable veraendern moechte (ausgeloest mit dem on-Event change any), funktioniert alles kein einziges mal. Es scheint, als ob das Programm nur ein einziges Mal ausgefuehrt wird. Hatte auch mal einen Zeitplan "jede Sekunde" probiert. Auch hier kein anderes Verhalten.

      on(
          {id: '0_userdata.0.JS_Timer.xTimerStart.STATE', change: 'any'},
           function (obj) {
             setState('0_userdata.0.JS_Timer.sMyTestText', "Status wird sich aendern")
             if (getState("0_userdata.0.JS_Timer.xTimerStart.STATE").val==true)
             {
                setState('0_userdata.0.JS_Timer.sMyTestText', "StatusAn")
             }
             else
             {
                setState('0_userdata.0.JS_Timer.sMyTestText', "StatusAus")
             }
      );
      

      Bin mir sicher, dass ich grundsaetzlich etwas verkehrt mache. Konnte bisher nichts zu irgendwelchen Grundlagen finden.

      Objekt/Variable javascript.0.scriptEnabled.JS_Timer = true

      Was mache ich falsch?

      Danke fuer die Hilfe,

      Michl

      Albert K Codierknecht Asgothian 3 Replies Last reply Reply Quote 0
      • Albert K
        Albert K @Michl last edited by

        @michl

        Such Mal bei YouTube nach iobroker / Blockly.

        Auch wenn Du das in JS machen willst geben die Blockly Videos einen guten Überblick wie das alles funktioniert.

        Speziell die "Trigger" sind da wichtig. Ohne Trigger läuft ein Script nur 1 Mal beim Einschalten ab.

        1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @Michl last edited by

          @michl sagte in Fehlendes Anfaengerwissen:

          (getState("0_userdata.0.JS_Timer.xTimerStart.STATE").val

          Versuch mal, statt getState("0_userdata.0.JS_Timer.xTimerStart.STATE").val auf das übergebene Objekt mit obj.state.val zuzugreifen.
          Das getState ist an der Ecke unnötig und benötigt mehr Ressourcen.

          Mit change:'any' reagiert der Trigger auf jede Aktualisierung. Also auch dann, wenn sich der Wert gar nicht ändert.
          Ich würde stattdessen change:'ne' verwenden, um nur auf Änderungen zu reagieren.

          1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @Michl last edited by

            @michl sagte in Fehlendes Anfaengerwissen:

            Konnte bisher nichts zu irgendwelchen Grundlagen finden.

            Was ich dir zum Thema JS in ioBroker empfehlen kann ist diese Seite https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md
            empfehlen.

            M 1 Reply Last reply Reply Quote 0
            • M
              Michl @Asgothian last edited by Michl

              @asgothian @Codierknecht @Albert-K
              Vielen Dank fuer eure Tipps und Ratschlaege. Der Einstieg ueber Blockly (mit ein paar YouTube Videos) hatten zum Einstieg geholfen. Hier war das Umschalten auf JavaScript der naechste Schritt das kleine Beispielprogramm zu loesen. Hier konnte ich ein paar weitere Argumente fuer den "on"-Baustein finden.

              Es war nicht noetig einen Timer (z.B. jede Sekunde) aufzurufen. Das war ja auch eine meiner Fragen.

              Hier das funktionierende Programm:

              on({id: [].concat(['0_userdata.0.JS_Timer.xTimerStart']), change: "ne"}, async function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
              
                var Status = getState("0_userdata.0.JS_Timer.xTimerStart").val;
                if (Status)
                  setState("0_userdata.0.JS_Timer.sMyTestText", 'StatusON');
                else
                  setState("0_userdata.0.JS_Timer.sMyTestText", 'StatusOFF');
              
              });
              

              Dankeschoen!
              Michl

              Codierknecht 1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @Michl last edited by

                @michl
                Das nochmalige Lesen des Status in Zeile 5 kannst Du Dir sparen. Mit value ist der Wert ja bereits bekannt.

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

                Support us

                ioBroker
                Community Adapters
                Donate

                956
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                4
                6
                249
                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