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. Frage zu JS Code (Neuling kenn sich noch nicht so aus)

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Frage zu JS Code (Neuling kenn sich noch nicht so aus)

Scheduled Pinned Locked Moved Skripten / Logik
21 Posts 6 Posters 2.3k Views
  • 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.
  • P Offline
    P Offline
    PapaChriLo
    wrote on last edited by
    #1

    Ich habe folgenden Code für die Anwesenheitssteuerung.

    var ALabwesend, CLabwesend;
    
    /** Anwesenheit überprüfen **/
    
    function anwesenheit_pruefen() {
      if ((ALabwesend && CLabwesend) === true) {
        setState("hm-rega.0.950"/*Anwesenheit*/, false);
      }
      if ((ALabwesend || CLabwesend) === false) {
        setState("hm-rega.0.950"/*Anwesenheit*/, true);
      }
    }
    
    /** Andrea Handy auf anwesenheit prüfen **/
    on({id: 'radar.0.Andrea_Handy.here', val: false}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      ALabwesend = true;
    });
    
    /** Christian Tablet auf anwesenheit prüfen **/
    on({id: 'radar.0.Christian_Tablet.here', val: false}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      CLabwesend = true;
    });
    

    Ich hoffe er funktioniert hab's noch nicht getestet.

    Die Frage ist folgende:

    Wenn ich das richtig verstanden habe läuft JS beim ioBroker immer, im Hintergrund sozusagen.

    Das würde in diesem Falle bedeuten das dieser Code immer läuft. ist das richtig oder falsch.

    Für mein Verständnis würde mir da nämlich eine Schleife fehlen, in der der Code immer wieder auf's neue abgearbeitet wird.

    Ist das i.O. wenn der immer läuft oder sollte man das in einer Zeitschleife ausführen, z.B. alle 5 Minuten.

    LG

    Christian

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @PapaChriLo:

      Das würde in diesem Falle bedeuten das dieser Code immer läuft. ist das richtig oder falsch. `
      Falsch. Dieser Code ist permanent compiliert im RAM vorhanden und wartet auf Ereignisse (Funktion on()).

      Übrigens: Das Programm funktioniert so nicht. Korrektur:

      var ALabwesend = getState('radar.0.Andrea_Handy.here').val;
      var CLabwesend = getState('radar.0.Christian_Tablet.here').val;
      
      /** Anwesenheit überprüfen **/
      
      function anwesenheit_pruefen() {
        if (ALabwesend && CLabwesend) setState("hm-rega.0.950"/*Anwesenheit*/, false);
        else setState("hm-rega.0.950"/*Anwesenheit*/, true);
      }
      
      // Prüfen bei Skriptstart
      anwesenheit_pruefen();
      
      /** Andrea Handy auf anwesenheit prüfen **/
      on({id: 'radar.0.Andrea_Handy.here', change: 'ne'}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        ALabwesend = value;
        anwesenheit_pruefen();
      });
      
      /** Christian Tablet auf anwesenheit prüfen **/
      on({id: 'radar.0.Christian_Tablet.here', change: 'ne'}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        CLabwesend = value;;
        anwesenheit_pruefen();
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • P Offline
        P Offline
        PapaChriLo
        wrote on last edited by
        #3

        Das heist ich brauch sowas wie einen Startbefehl (mal nachdenken von wo ich den hernehme),

        am besten irgendein Ereignis bei Systemstart

        und dann doch eine permanente Schleife (do –- loop, wenns sowas gibt im JS),

        so das der Code ständig ausgeführt wird.

        Den geänderten Code muss ich erst in Ruhe studieren.

        Da kommen die Fragen dann extra.

        LG

        Christian

        1 Reply Last reply
        0
        • HomoranH Do not disturb
          HomoranH Do not disturb
          Homoran
          Global Moderator Administrators
          wrote on last edited by
          #4

          @PapaChriLo:

          Das heist ich brauch sowas wie einen Startbefehl `
          Hast du doch:
          @paul53:

          und wartet auf Ereignisse (Funktion on()). `
          mal als quote, um Attribute zu setzen:
          @paul53:

          on({id: 'radar.0.Andrea_Handy.here' `

          Gruß

          Rainer

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Reply Last reply
          0
          • P Offline
            P Offline
            PapaChriLo
            wrote on last edited by
            #5

            Wenn ich das jetzt richtig verstehe, ist das hier,

            on({id: 'radar.0.Andrea_Handy.here', change: 'ne'}, function (obj)
            

            dann soviel wie ein Interrupt.

            Wenn sich am Datenpunkt "radar.0.Andrea_Handy.here" was tut, egal was,

            muss ich mich nicht mehr selber darum kümmern das er was macht.

            Oder versteh ich da wieder was falsch.

            LG

            Christian

            1 Reply Last reply
            0
            • HomoranH Do not disturb
              HomoranH Do not disturb
              Homoran
              Global Moderator Administrators
              wrote on last edited by
              #6

              @PapaChriLo:

              Oder versteh ich da wieder was falsch. `
              Nö!

              Gruß

              Rainer

              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              1 Reply Last reply
              0
              • P Offline
                P Offline
                PapaChriLo
                wrote on last edited by
                #7

                nächste Frage

                Das hier versteh ich nicht ganz.

                function anwesenheit_pruefen() {
                  if (ALabwesend && CLabwesend) setState("hm-rega.0.950"/*Anwesenheit*/, false);
                  else setState("hm-rega.0.950"/*Anwesenheit*/, true);
                }
                

                Mir fehlt da der Vergleich zu "true"

                Sollte das nicht so sein

                function anwesenheit_pruefen() {
                  if (ALabwesend && CLabwesend === true) setState("hm-rega.0.950"/*Anwesenheit*/, false);
                  else setState("hm-rega.0.950"/*Anwesenheit*/, true);
                }
                

                LG

                Christian

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #8
                  if (ALabwesend && CLabwesend)
                  

                  ist eine verkürzte Schreibweise und funktioniert wie

                  if (ALabwesend == true && CLabwesend == true)
                  

                  Das Ergebnis eines Vergleiches ist false oder true, also kann man den Vergleich auch weglassen.

                  Mit zusätzlicher Typprüfung (boolean) ist es so richtig:

                  if (ALabwesend === true && CLabwesend === true)
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Reply Last reply
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #9

                    @PapaChriLo:

                    Wenn ich das jetzt richtig verstehe, ist das hier,

                    …

                    dann soviel wie ein Interrupt. `
                    Ja. Hast Du mal Assembler programmiert ?
                    @PapaChriLo:

                    Wenn sich am Datenpunkt "radar.0.Andrea_Handy.here" was tut, egal was,

                    muss ich mich nicht mehr selber darum kümmern das er was macht. `
                    Ja, aber: Nicht egal was, sondern das, was angegeben wurde,

                    change: 'ne'
                    

                    in diesem Fall bei jeder Änderung des Wertes. https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      PapaChriLo
                      wrote on last edited by
                      #10

                      @paul53:

                      Ja. Hast Du mal Assembler programmiert ? `

                      Nicht wirklich, komme eher aus der Ecke VB und C++.

                      OK ich schau mir das jetzt dann nochmal in Ruhe an und muss mal einiges überdenken und neu ordnen.

                      Muss mich noch mehr mit JS beschäftigen dann wirds schon…..

                      Hoff ich zumindestens.

                      Was mir noch ein wenig fehlt ist, wie die ganze Sache beim ioBroker im Hintergrund abläuft, da blicke ich noch nicht ganz durch aber es wird.

                      Naja ist ja auch kein Projekt das man in 3 Wochen erledigt.

                      LG

                      Christian

                      1 Reply Last reply
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #11

                        @PapaChriLo:

                        komme eher aus der Ecke VB und C++. `
                        Mit Erfahrung in C++ sollte die Einarbeitung in Javascript nicht schwer fallen. Mir hat das https://wiki.selfhtml.org/wiki/JavaScript dabei sehr geholfen.
                        @PapaChriLo:

                        wie die ganze Sache beim ioBroker im Hintergrund abläuft, `
                        https://nodejs.org/dist/latest-v8.x/docs/api/events.html liefert Funktionen für Events.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Reply Last reply
                        0
                        • P Offline
                          P Offline
                          PapaChriLo
                          wrote on last edited by
                          #12

                          Also ich bin etwas ratlos.

                          Der Code funktioniert so nicht.

                          var ALanwesend = getState('radar.0.Andrea_Handy.here'.val);
                          var CLanwesend = getState('radar.0.Christian_Tablet.here'.val);
                          
                          /** Anwesenheit überprüfen **/
                          
                          function anwesenheit_pruefen() {
                            if (ALanwesend === false && CLanwesend === false) setState("hm-rega.0.950", false);
                            else setState("hm-rega.0.950", true);
                          }
                          
                          /** Prüfen bei Skriptstart **/
                          anwesenheit_pruefen();
                          
                          /** Andrea Handy auf anwesenheit prüfen **/
                          on({id: 'radar.0.Andrea_Handy.here', change: 'ne'}, function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            ALanwesend = value;
                            anwesenheit_pruefen();
                          });
                          
                          /** Christian Tablet auf anwesenheit prüfen **/
                          on({id: 'radar.0.Christian_Tablet.here', change: 'ne'}, function (obj) {
                            var value = obj.state.val;
                            oldValue = obj.oldState.val;
                            CLanwesend = value;
                            anwesenheit_pruefen();
                          });
                          

                          Bin jetzt bei der Analyse und diese beiden Zeilen versteh ich erhlich gesagt nicht

                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                          

                          Gebe zu die beiden Zeilen hab ich aus dem Beispiel von paul53 übernommen, ohne zu wissen was das tut oder soll.

                          Ich mein OK, die erste Zeile versteh ich noch, da wird der Variable 'valu' der Wert des Objektes übergeben.

                          Aber bitteschön für was brauch ich die zweite Zeile.

                          Ja und warum muss oder soll ich den Wert des Objekts der Variable 'valu' übergeben, kann ich den Wert nicht gleich an meine eigen Variable übergeben?

                          LG

                          Christian

                          1 Reply Last reply
                          0
                          • ThisoftT Offline
                            ThisoftT Offline
                            Thisoft
                            wrote on last edited by
                            #13

                            Was genau heißt denn "funktioniert nicht"???

                            Und - ja du kannst natürlich den Wert gleich direkt an deine Variable übergeben. Und den "oldState" brauchst du (im Moment) auch nicht - das hast du eben wie du richtig schreibst einfach nur kopiert ;)

                            Und dann bin ich mir nicht sicher ob deine If-Abfrage syntaktisch richtig ist - habe aber die JS-Syntax noch nicht 100%ig intus. Ich würde das jedenfalls so schreiben:

                            function anwesenheit_pruefen() {
                              if (ALanwesend === false && CLanwesend === false) {
                              	setState("hm-rega.0.950", false);}
                              else {
                              	setState("hm-rega.0.950", true);}
                            }
                            

                            22 HM-Geräte; PivCCU2 auf RasPi

                            ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                            1 Reply Last reply
                            0
                            • T Offline
                              T Offline
                              tempestas
                              wrote on last edited by
                              #14

                              es müsste imhogetState(id).val sein und nicht````
                              getState(id.val)

                              
                              Die Wertzuordnung am Anfang wird vorgenommen, damit beim erstmaligen Start die Anwesenheit bestimmt wird und die hm-rega korrekt gesetzt wird.
                              
                              

                              var ALanwesend = getState('radar.0.Andrea_Handy.here').val;
                              var CLanwesend = getState('radar.0.Christian_Tablet.here').val;
                              var debug = true; // zum debuggen)

                              /** Anwesenheit überprüfen **/

                              function anwesenheit_pruefen() {
                              if (ALanwesend === false && CLanwesend === false) setState("hm-rega.0.950", false);
                              else setState("hm-rega.0.950", true);

                              if(debug) log("Anwesenheit Andrea: "+ ALanwesend + " .Anwesenheit Christian: "+ CLanwesend);
                              }

                              /** Prüfen bei Skriptstart **/
                              anwesenheit_pruefen();

                              /** Andrea Handy auf anwesenheit prüfen **/ // hier werden die Auslöser definiert. Entweder Änderung beim Status Anwesenheit Andrea oder Christian
                              on({id: 'radar.0.Andrea_Handy.here', change: 'ne'}, function (obj) {
                              var value= obj.state.val;
                              // var oldValue = obj.oldState.val --> sehe nicht, wozu das notwendig wäre, kann imho raus
                              ALanwesend = value;
                              anwesenheit_pruefen();
                              if(debug) log("Andreas Anwesenheitsstatus hat von " +obj.oldState.val + " auf " + value "+ gewechselt);
                              });

                              /** Christian Tablet auf anwesenheit prüfen **/
                              on({id: 'radar.0.Christian_Tablet.here', change: 'ne'}, function (obj) {
                              var value = obj.state.val;
                              CLanwesend = value;
                              anwesenheit_pruefen();
                              if(debug) log("Christians Anwesenheitsstatus hat von " +obj.oldState.val + " auf " + value "+ gewechselt);
                              });

                              <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                              1 Reply Last reply
                              0
                              • T Offline
                                T Offline
                                tempestas
                                wrote on last edited by
                                #15

                                @Thisoft:

                                Was genau heißt denn "funktioniert nicht"???

                                Und - ja du kannst natürlich den Wert gleich direkt an deine Variable übergeben. Und den "oldState" brauchst du (im Moment) auch nicht - das hast du eben wie du richtig schreibst einfach nur kopiert ;)

                                Und dann bin ich mir nicht sicher ob deine If-Abfrage syntaktisch richtig ist - habe aber die JS-Syntax noch nicht 100%ig intus. Ich würde das jedenfalls so schreiben:

                                function anwesenheit_pruefen() {
                                  if (ALanwesend === false && CLanwesend === false) {
                                  	setState("hm-rega.0.950", false);}
                                  else {
                                  	setState("hm-rega.0.950", true);}
                                }
                                ```` `  
                                

                                die geschweiften Klammern bei einer if Abfrage brauchst du nur, wenn du mehrere Folgen hast. Ist einfach nur kürzer ohne, wenn man eh nur eine Folge hat

                                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                1 Reply Last reply
                                0
                                • P Offline
                                  P Offline
                                  PapaChriLo
                                  wrote on last edited by
                                  #16

                                  Danke #Thisoft

                                  Danke #tempestas

                                  Damit komm ich, vermutlich weiter.

                                  Eine Farge (von noch vielen anderen :? ) hätte ich da aber trotzdem noch.

                                  Warum wird das in JS so geschrieben …

                                    var value = obj.state.val;
                                    CLanwesend = value;
                                  

                                  und nocht so …

                                    CLanwesend = obj.state.val;
                                  

                                  hat das einen bestimmten Grund?

                                  Ich komm aus der VB / C++ Fraktion, da waren solche Sachen mehr als verpöhnt.

                                  Jede Zeile Code zu viel wurde da schwer abkassiert in die Kaffekasse.

                                  LG

                                  Christian

                                  1 Reply Last reply
                                  0
                                  • T Offline
                                    T Offline
                                    tempestas
                                    wrote on last edited by
                                    #17

                                    sollte auch kürzer gehen wie von dir vorgeschlagen

                                    <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                    1 Reply Last reply
                                    0
                                    • paul53P Offline
                                      paul53P Offline
                                      paul53
                                      wrote on last edited by
                                      #18

                                      @PapaChriLo:

                                      Aber bitteschön für was brauch ich die zweite Zeile.

                                      Ja und warum muss oder soll ich den Wert des Objekts der Variable 'valu' übergeben, kann ich den Wert nicht gleich an meine eigen Variable übergeben? `
                                      Das habe ich so vom ersten Skript übernommen, dessen Vorlage offenbar mit Blockly erstellt wurde. Blockly erzeugt die beiden Variablen value und oldValue per default. Selbst würde ich auch nicht den Umweg über eine Zwischenvariable value machen.

                                      Dein Skript mit Korrekturen und kürzer:

                                      var ALanwesend = getState('radar.0.Andrea_Handy.here').val;
                                      var CLanwesend = getState('radar.0.Christian_Tablet.here').val;
                                      
                                      /** Anwesenheit überprüfen **/
                                      function anwesenheit_pruefen() {
                                        if (ALanwesend || CLanwesend) setState("hm-rega.0.950", true);
                                        else setState("hm-rega.0.950", false);
                                      }
                                      
                                      /** Prüfen bei Skriptstart **/
                                      anwesenheit_pruefen();
                                      
                                      /** Andrea Handy auf anwesenheit prüfen **/
                                      on('radar.0.Andrea_Handy.here', function (obj) {  // Triggert bei Wertänderung
                                        ALanwesend = obj.state.val;
                                        anwesenheit_pruefen();
                                      });
                                      
                                      /** Christian Tablet auf anwesenheit prüfen **/
                                      on('radar.0.Christian_Tablet.here', function (obj) {
                                        CLanwesend = obj.state.val;
                                        anwesenheit_pruefen();
                                      });
                                      

                                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                      1 Reply Last reply
                                      0
                                      • ThisoftT Offline
                                        ThisoftT Offline
                                        Thisoft
                                        wrote on last edited by
                                        #19

                                        @tempestas:

                                        die geschweiften Klammern bei einer if Abfrage brauchst du nur, wenn du mehrere Folgen hast. Ist einfach nur kürzer ohne, wenn man eh nur eine Folge hat `

                                        Danke - gut zu wissen dass das auch so geht. Ich bin ja auch grundsätzlich faul ;) und dieser ganzen geschweiften Klammerei stehe ich sowieso nicht gerade freundschaftlich gegenüber da ich auch aus der VB und .NET - Ecke komme und dort geht es (sehr gut) ohne diese zusätzliche Tipperei ;)

                                        22 HM-Geräte; PivCCU2 auf RasPi

                                        ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                                        1 Reply Last reply
                                        0
                                        • P Offline
                                          P Offline
                                          PapaChriLo
                                          wrote on last edited by
                                          #20

                                          OK Danke nochmal an alle.

                                          Ich fang mit JS grade erst mal an und da klaube ich mir halt alles so irgendwie zusammen was momentan für mich Sinn ergibt.

                                          Danach mach ich mich dann ans analysieren und versuch das dann halt mit meinen eigenen Codes.

                                          Mittlerweile komm ich ja auch auf einen grünen Zweig ;) wenn der auch noch sehr sehr kurz ist :roll:

                                          LG

                                          Christian

                                          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

                                          646

                                          Online

                                          32.7k

                                          Users

                                          82.4k

                                          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