NEWS
Geräte in YAHKA auf OFF stellen
-
Bitte bitte.
Zu B: Stimmt, man braucht da ein "Dummy" Binding zu Yakha, i.e. der gleiche Switch 2 mal in Yakha, damit man den automatisch wieder ausschalten kann. Ist umelegant, geht aber.
zu A: Blockly geht, siehe Bild, obwohl ich das eher direkt in JS geschrieben hätte.
16286_screen_shot_2019-01-12_at_16.07.15_.png -
Hi!
geil, nochmals Danke.
Eine Frage noch, da ich doch einige Scenes erstellt habe, würd ich gern vermeiden den Eventtrigger für alles Scenes zu erstellen. Kann ich irgendwie einfach feststellen, welches Scene sich verändert hat und dieses selektiv wieder umschalten oder brauch ich hierzu JS?
lg
-
Ich fürchte da musst du mir etwas mehr erklären. Da wo in meinem Beispiel "Left Switch State" steht muss der State deines Switches rein. Somit reagiert das Script auf genau diesen einen Datenpunkt.
So kann ich die Frage leider nicht beantworten.
A.
-
Hi,
ich habe ja mehrere "switche" bzw in meinem Fall Szenen, welche ich über die Home App steuere. Über die angeführte Lösung muss ich ja jeden Switch extra abfragen. Hätte ich also 10 Switch ( oder Szenen) muss ich das Ganze 10 mal machen (ich weiß copy paste geht - trotzdem lästig :) ).
Super wäre wenn ich die ID des Switches, bei welchem das OnEvent ausgeführt wurde herausbekommen würde, um nur dieses wieder auf Off zu setzen
also zB
wert von Switch2 geändert - setze Wert von Switch2 auf falsch.
Bin mir nicht sicher, ob das verständlicher war - ich hoffe es aber zumindest :)
Danke und lg
-
Prinzipiell müsste es gehen, bringt aber wenig Vorteile. Du musst sowieso für jeden Switch ein Subscribe für die Änderung machen. Daher ist es (aus meiner Sicht) einfacher, einfach in einem Script den jeweils gleichen Code Block für die verschiedenen Switch Objekte einzutragen (Bsp. folgt für 3 Objekte)
var Timeout = 60000 on({id: "Object.0.ID.on", change: "ne"}, function (obj) { if (obj.newState.val) { timeout = setTimeout(function () { setState(obj.id, false, true); }, Timeout); } }); on({id: "Object.1.ID.on", change: "ne"}, function (obj) { if (obj.newState.val) { timeout = setTimeout(function () { setState(obj.id, false, true); }, Timeout); } }); on({id: "Object.2.ID.on", change: "ne"}, function (obj) { if (obj.newState.val) { timeout = setTimeout(function () { setState(obj.id, false, true); }, Timeout); } });A.
-
Morgen,
ahh, jetzt weiß ich was du meinst.
Du bist aber trotzdem der Hammer!!!
Vielen Dank!
lg
r `
Dafür nicht.btw: Ich hab das ganze noch ein wenig optimieren können:
var Timeout = 60000 function resetObject(obj) { console.debug('Object ' + JSON.stringify(obj.id) + ' was changed set'); timeout = setTimeout(function () { console.debug('Object ' + JSON.stringify(obj.id) + ' was reset'); setState(obj.id, false, true); }, Timeout); } on({id: "objects.0.Switch_5.on", change: "gt"}, resetObject); on({id: "objects.0.Switch_7.on", change: "gt"}, resetObject); on({id: "objects.0.Switch_8.on", change: "gt"}, resetObject); -
hallo,
ich habe das selbe problem und wäre dir sehr dankbar wenn du mir etwas genauer erklären könntest wie und wo ich dein script eintragen muss und an welchen Stellen ich es anpassen müsste.
beste grüße.
-
hallo,
ich habe das selbe problem und wäre dir sehr dankbar wenn du mir etwas genauer erklären könntest wie und wo ich dein script eintragen muss und an welchen Stellen ich es anpassen müsste.
beste grüße. `
Hallo,
Zunächst zum “wo”:
Du musst den js Adapter installieren. Dann bekommst du im Admin (ab 3, den alten kenne ich nicht) links einen neuen Eintrag “scripts” oder “Skripte”
Wenn du das auswählst kannst du ein neues Script anlegen. Ich hab das erst mal unter “Common” gemacht. Als Engine solltest du js nehme (nicht blocky oder typescript)
Dann kannst du das snippet von mir in das Script kopieren, und unter einem Namen speichern.
Zur Anpassung:
Jede Zeile
on ({id : “<datenpunktname>“, change: “gt”}, resetobject)</datenpunktname>Beschreibt eine. Date Punkt, der nach einem timeout von 60 Sekunden zurück gesetzt wird. Pro Daten Punkt den du so zurück setzen willst brauchst du eine Zeile, bei der du <datenpunktname>durch den Namen des Date Punktes den du wieder zurück setzen willst ersetzt.
Um den timeout zu verkürzen kannst du oben die Variable “Timeout” anpassen - sie ist in ms angegeben.
Das ganze funktioniert so aber nur bei Daten Punkten die du yuf “false” zurück setzen willst wenn sie auf “true” gesetzt wurden.
Wenn da andere Werte / Funktionalitäten notwendig sind musst du dir in der Script Doku die optionen von on.. change: anschauen, und im Script das setState entsprechend anpassen. Alles kein Hexenwerk.
Ich hoffe das hilft.
A.</datenpunktname>