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. [erledigt] Javascript Erklärung erbeten (Codeschnipsel aus Lüftungsempfehlungsskript)

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[erledigt] Javascript Erklärung erbeten (Codeschnipsel aus Lüftungsempfehlungsskript)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 2 Kommentatoren 402 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.
  • T Offline
    T Offline
    tempestas
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    aus dem tollen Lüftungsskript stammt dieser Extrakt, den ich nicht vollständig durchdringe:

    // finde anhand der Sensor ID einen zugeordneten Raum
    
        function findRoom(sensor) {
            for (var raum in raeume) {
                if (raeume[raum].Ist_TEMP == sensor) return raum;
                if(debug) log("Ist Temperatur Raum "+raum +"geändert");
    
            }
            return null;
        }
    
    // Änderung triggered
    
        function valChange(obj) {
            var raumname = findRoom(obj.id);
    
            if (raumname) {
            if(debug) log('**Änderung:' + raumname + ": " + obj.id + ": " + obj.state.val + '**');
                calcDelayed(raumname, delayRooms);
            }
        }
    
    

    Mein Verständnis bislang ist:

    Die Funktion "findRooms" iteriert durch die Properties des Objekts "raeume" und gibt so den Raumnamen aus, wenn er "Ist_Temp" des "sensors" gefunden hat.

    Der "sensor" wiederum wird aus der Triggerfunktion heraus bestimmt? hier: = findRoom(obj.id); korrekt?

    über= findRoom(obj.id); wirdfunction findRoom(sensor)quasi zu````
    function findRoom(obj.id aus valChange)

    
    Was ich absolut nicht verstehe: wie begreift die valChange Funktion, welches obj sich denn da ändert? In meinem Anfängerverständnis bin ich noch nicht über trigger die direkt zugewiesen sind oder auch über Array Trigger hinausgekommen. Woher "weiß" die valChange Funktion, was (obj) ist?
    
    Danke für eine Erklärung, ich beiße mir die Zähne aus. Irgendwie hakts im Kopf

    <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
      #2

      Verzeihung, da fehlte noch etwas. Ich glaube, nun begreife ich es.

      Das Skript ist einfach so lang, da habe ich es wohl übersehen. Drauf gekommen, dass man das so machen kann wäre ich aber nie :shock:

      // Subscriptions für alle Räume anlegen; ohne dies wird nichts getriggerd
      function createOn() {
          var dpId    = "";
          var i = 0;
          log("Subscription Funktion gestartet");
      
          for (var raum in raeume) {
      
              if (raeume[raum].Ist_TEMP) {
                  dpId = raeume[raum].Ist_TEMP;
                  i++;
                  on({id: dpId ,change:'ne'}, function (obj) {
                      valChange(obj);
                  });
                 if(debug) log("on: " + dpId + " angelegt.");
              }
              /*if (raeume[raum].TEMP_SOLL) {
                  dpId = raeume[raum].TEMP_SOLL;
                  i++;
                  on({id: dpId ,change:'ne'}, function (obj) {
                      valChange(obj);
                  });
                 if(debug) log("on: " + dpId + " angelegt.");
              } */       
          } 
          log("Subscriptions angelegt: " + i);
      }
      

      <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
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        schrieb am zuletzt editiert von
        #3

        Die Funktion valChange wird ja von irgendwo aufgerufen, dabei bekommt sie ein Objekt mitgeteilt. Welches wiederum als obj innerhalb der Funktion zur Verfügung steht.

        Damit ruft sie wiederum die Funktion findRoom auf und bekommt den Raumnamen zurück geliefert.

        Persönlicher Support
        Spenden -> paypal.me/J3YC33

        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          tempestas
          schrieb am zuletzt editiert von
          #4

          Danke, ich setze mal auf gelöst. Habe den entscheidenden Teil gerade gefunden und bewundere nun die Eleganz der Programmierung.

          <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
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          752

          Online

          32.6k

          Benutzer

          82.2k

          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