Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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
    996

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Fehlendes Anfaengerwissen

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 4 Kommentatoren 280 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    Michl
    schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              687

              Online

              32.6k

              Benutzer

              82.3k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe