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. Fehlendes Anfaengerwissen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Fehlendes Anfaengerwissen

Scheduled Pinned Locked Moved JavaScript
6 Posts 4 Posters 280 Views 4 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.
  • M Offline
    M Offline
    Michl
    wrote on last edited by Michl
    #1

    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 KA CodierknechtC AsgothianA 3 Replies Last reply
    0
    • M 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 KA Offline
      Albert KA Offline
      Albert K
      wrote on last edited by
      #2

      @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
      0
      • M 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

        CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        wrote on last edited by
        #3

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

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        1 Reply Last reply
        0
        • M 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

          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          wrote on last edited by
          #4

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

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          M 1 Reply Last reply
          0
          • AsgothianA Asgothian

            @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 Offline
            M Offline
            Michl
            wrote on last edited by Michl
            #5

            @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

            CodierknechtC 1 Reply Last reply
            0
            • M 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

              CodierknechtC Online
              CodierknechtC Online
              Codierknecht
              Developer Most Active
              wrote on last edited by
              #6

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

              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Certified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              690

              Online

              32.6k

              Users

              82.3k

              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