NEWS
[erledigt] Javascript Erklärung erbeten (Codeschnipsel aus Lüftungsempfehlungsskript)
-
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 -
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); } -
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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden