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

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.6k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
21 Beiträge 6 Kommentatoren 2.1k Aufrufe
  • Ä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.
  • P Offline
    P Offline
    PapaChriLo
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        PapaChriLo
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              PapaChriLo
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  PapaChriLo
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • ThisoftT Offline
                    ThisoftT Offline
                    Thisoft
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • T Offline
                      T Offline
                      tempestas
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • T Offline
                        T Offline
                        tempestas
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          PapaChriLo
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • T Offline
                            T Offline
                            tempestas
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • ThisoftT Offline
                                ThisoftT Offline
                                Thisoft
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                0
                                • P Offline
                                  P Offline
                                  PapaChriLo
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  0
                                  • P Offline
                                    P Offline
                                    pix
                                    schrieb am zuletzt editiert von
                                    #21

                                    Hallo,

                                    hab das mal schnell im Online-Editor geschrieben. Das sollte auch gehen und nutzt RegExp. Als Beispiel und Denkanstoß

                                    • debug kann man weglassen (natürlich dann auch die Logzeile)

                                    • Einzeilige Kommentare mit // beginnen, mehrzeilige Kommentare in /* und */ einschließen

                                    • Hinweis: in der if-Abfrage ist das Ausrufezeichen genutzt. Das ist die Kurzschreibweise für die Abfrage auf false.

                                    Grundsätzlich gilt ja: wenn mindestens ein Gerät auf true, dann anwesend. Wenn alle Geräte auf false, dann abwesend.

                                    /* Andrea und Christian Handy auf Anwesenheit prüfen 
                                       Regexp auf radar.0.Christian_Tablet.here und radar.0.Andrea_Handy.here */
                                    
                                    var debug = true;
                                    
                                    // Bei Änderung
                                    on(/^radar\.[0-9]\.*here$/, function (obj) {  // Triggert bei Wertänderung
                                      if (debug) log('Anwesenheitserkennung: '  + obj.common.name + ' auf ' + obj.state.val + ' gesetzt ' >;
                                      if (obj.state.val) setState("hm-rega.0.950", true); // wenn ein Trigger true, dann anwesend
                                      else {
                                          if (!getState('radar.0.Andrea_Handy.here').val && !getState('radar.0.Christian_Tablet.here').val) setState("hm-rega.0.950", false); // wenn jetzt beide false dann abwesend
                                      }
                                    });
                                    
                                    // bei Skriptstart
                                    if (getState('radar.0.Andrea_Handy.here').val || getState('radar.0.Christian_Tablet.here').val) setState("hm-rega.0.950", true);
                                    else setState("hm-rega.0.950", false);
                                    
                                    

                                    Ach, mit der Vorschau Funktion im Forum-Editor kann man den Text nochmal prüfen und ggf. Schreibfehler finden :-D

                                    Gruß

                                    Pix

                                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                    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

                                    411

                                    Online

                                    32.5k

                                    Benutzer

                                    81.6k

                                    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