NEWS
Frage Javascript "on-id-change"
-
Verstehe hört sich gut an...
Aber wie würde ich dann sehen welcher State geändert wurde? -
@sveni_lee sagte:
welcher State geändert wurde?
on(/^radar2\.0\..+/, function(dp) { log(dp.id); // Datenpunkt-ID des Triggers // oder log(dp.common.name); // Name, falls dieser eindeutig ist });
-
kann gelöscht werden !
-
@paul53 sagte in Frage Javascript "on-id-change":
n(/^radar2.0..+/, function(dp) {
im Grunde funktioniert das allerdings sollten nur die states die auf "_here" enden berücksichtigt werden und auch nur wenn der logigwert (true o. false) sich ändert.
Habe ich aber auch erst jetzt bemerkt...
-
@sveni_lee sagte:
sollten nur die states die auf "_here" enden berücksichtigt werden
on(/^radar2\.0\..+_here$/, function(dp) {
@sveni_lee sagte in Frage Javascript "on-id-change":
auch nur wenn der logigwert (true o. false) sich ändert.
Nur dann (bei Wertänderung) wird getriggert.
-
Das Klapp echt super, kann ich auch irgendwie den Wert also true o. False mit angeben?
-
kann ich auch irgendwie den Wert also true o. False mit angeben?
Ja, da aber sicherlich bei true und false unterschiedliche Reaktionen erfolgen sollen, mache die Abfrage in der Callback-Funktion des Triggers.
on(/^radar2\.0\..+_here$/, function(dp) { if(dp.state.val) { // Reaktionen auf true } else { // Reaktionen auf false } });
-
erst einmal Danke das klappt richtig gut.
Allerdings ist Radar2 & Iphone nicht die beste Lösung. Ich habe das jetzt mal mit
dem script für die CCU probiert und das ist richtig zuverlässing da es drn WLAN Status aus der Fritzbox ausliest.Kann ich ein Liste bilden um sie darin enthaltenen States abzufragen?
-
@sveni_lee sagte:
Kann ich ein Liste bilden um sie darin enthaltenen States abzufragen?
Ja, aber Du wirst zwei Listen brauchen: Eine mit den IDs (wer hat getriggert) und eine mit den Werten.
-
ich hatte mir das jetzt so vorgestellt...
var anwesenheit_devices = ["hm-rega.0.1857", "hm-rega.0.1858", "hm-rega.0.1864"] on(anwesenheit_devices, function(dp) { if(dp.state.val) { // Reaktionen auf true sendTo("telegram.0", "send", { text: dp.common.name + " ist online" }); } else { // Reaktionen auf false sendTo("telegram.0", "send", { text: dp.common.name + " ist offline" }); } });
-
@sveni_lee sagte:
ich hatte mir das jetzt so vorgestellt
Ja, solange keine Auswertung benötigt wird, ob niemand anwesend ist, genügt es so.
-
@paul53 sagte in Frage Javascript "on-id-change":
Ja, solange keine Auswertung benötigt wird, ob niemand anwesend ist, genügt es so.
Du meinst also wenn ich feststellen möchte ob überhaupt jemand anwesend ist geht das so nicht mehr?
-
@sveni_lee sagte:
ob überhaupt jemand anwesend ist geht das so nicht mehr?
Richtig, denn dann braucht man eine Oder-Verknüpfung aller Anwesenden: Wenn einer von zwei Anwesenden das Haus verlässt, ist trotzdem noch jemand anwesend.
-
stimmt..
aber die ccu bietet einen state mit allen anwesenden. den könnte man wenn nötig auch auswerten...ONKYO-AVR,Google-Home,EchoDot,WDR3600,CCU2,Strom-Pi,Gotham-City,VissmannWP-Pi
-
Ich wollte das ganze jetzt noch etwas verfeinern und dem Datenpunkt einen clearname zuordnen aber das scheint so nicht zu funktionieren.
var anwesenheit_devices = ["hm-rega.0.1857", "hm-rega.0.1858", "hm-rega.0.1864"]; var online_devices = ["hm-rega.0.1867", "hm-rega.0.1868", "hm-rega.0.1869", "hm-rega.0.1871", "hm-rega.0.1872", "hm-rega.0.1873", "hm-rega.0.1874", "hm-rega.0.1875", "hm-rega.0.1876", "hm-rega.0.1877", "hm-rega.0.1879", "hm-rega.0.1880", "hm-rega.0.1881", "hm-rega.0.1882", "hm-rega.0.1883", "hm-rega.0.1884"]; var humans = {"hm-rega.0.1857" : "XXX", "hm-rega.0.1858" : "YYY", "hm-rega.0.1864" : "ZZZ"}; on(anwesenheit_devices, function(dp) { str = dp.common.name; if(dp.state.val) { // Reaktionen auf true sendTo("telegram.0", "send", { text: humans.dp + " ist anwesend" }); } else { // Reaktionen auf false sendTo("telegram.0", "send", { text: humans.dp + " ist abwesend" }); } }); on(online_devices, function(dp) { str = dp.common.name; if(dp.state.val) { // Reaktionen auf true sendTo("telegram.0", "send", { text: str.substr(12) + " ist online" }); } else { // Reaktionen auf false sendTo("telegram.0", "send", { text: str.substr(12) + " ist offline" }); } });
aber das klappt nicht... "humans.dp" wird nicht zugeordnet.
-
@sveni_lee
Weshalb verwendest Du nicht die in der CCU vergebenen Namen ?text: dp.common.name + " ist anwesend"
In humans sind die Datenpunkt-IDs die Bezeichner, also
var str = dp.id; ... text: humans[str] + " ist anwesend"
-
das klingt irgendwie nicht so toll. In der CCU werden die Name mit Anwesenheit.XXX_IPhone bezeichnet.
Ich Iabe die Namensgebung so wie in der Fritzbox gewählt, kann man dann besser nachvollziehen.
Klingt aber nicht schön wenn der Bot medet Anwesenheit.XXX_iPhone ist anwesend.Darum dachte ich mir die Idee mit dem Objekt wäre nicht schlecht...
müss das Objekt humans nicht so aussehen:
var humans = {['hm-rega.0.1857'] : "XXX", ['hm-rega.0.1858'] : "YYY", ['hm-rega.0.1864'] : "ZZZ"};
-
@sveni_lee sagte in Frage Javascript "on-id-change":
var humans = {['hm-rega.0.1857'] : "XXX", ['hm-rega.0.1858'] : "YYY", ['hm-rega.0.1864'] : "ZZZ"};
Das wird niemals funktionieren.
Der fehler liegt daran wie du an die Namen kommen möchtest.
Ersetze folgendes:text: humans.dp + " ist abwesend" // durch text: humans[dp.id] + " ist abwesend"
Das sollte funktioneren, ist aber nicht getestet.
-
@sveni_lee sagte:
das Objekt humans nicht so aussehen:
Nein, die ursprüngliche Form war schon richtig, nur dass über die Datenpunkt-ID ([dp.id]) zugegriffen werden muss und nicht über das Datenpunkt-Objekt (dp).
-
okay, also das ganze sieht nun so aus...
var anwesenheit_devices = ["hm-rega.0.1857", "hm-rega.0.1858", "hm-rega.0.1864"]; var online_devices = ["hm-rega.0.1867", "hm-rega.0.1868", "hm-rega.0.1869", "hm-rega.0.1871", "hm-rega.0.1872", "hm-rega.0.1873", "hm-rega.0.1874", "hm-rega.0.1875", "hm-rega.0.1876", "hm-rega.0.1877", "hm-rega.0.1879", "hm-rega.0.1880", "hm-rega.0.1881", "hm-rega.0.1882", "hm-rega.0.1883", "hm-rega.0.1884"]; var str; var humans = {"hm-rega.0.1857" : "XXX", "hm-rega.0.1858" : "YYY", "hm-rega.0.1864" : "ZZZ"}; on(anwesenheit_devices, function(dp) { if(dp.state.val) { var str1 = dp.id; // Reaktionen auf true sendTo("telegram.0", "send", { text: humans[dp.id] + " ist anwesend" }); } else { // Reaktionen auf false sendTo("telegram.0", "send", { text: humans[dp.id] + " ist abwesend" }); } }); on(online_devices, function(dp) { str = dp.common.name; if(dp.state.val) { // Reaktionen auf true sendTo("telegram.0", "send", { text: str.substr(12) + " ist online" }); } else { // Reaktionen auf false sendTo("telegram.0", "send", { text: str.substr(12) + " ist offline" }); } });
Ich warte dann mal bis heute nachmittag jemand nach Hause kommt. ann weiß ich ob es geht.