NEWS
Triggern von Scripten
-
Hallo zusammen,
wenn in einem Script ein Trigger angegeben ist - bedeutet das, dass bei Erfüllung dieses Triggers das Script ausgeführt wird?
Oder anders gefragt: kann ich die Zustandsänderung eines Objektes direkt als Trigger zum Start eines Scriptes benutzen?
Hintergrund:
Ich stelle gerade von CCU1 auf CCU2 um. Die beiden laufen derzeit parallel. Es gibt einige Systemvariablen, die Aktionen auslösen, die in beiden CCU's laufen sollen. Dazu möchte ich - bis die CCU1 ausrangiert wird - einige Systemvariablen von der CCU1 auf die CCU2 "spiegeln".
Folgenden Script habe ich mir dazu im javascript-adapter geschrieben:
var value1; console.log('script SV_Anwesend läuft'); on({id: "hm-rega.0.41913"/*Anwesend*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; value1 = getState("hm-rega.0.41913").val; }); setState("hm-rega.1.1881"/*Anwesend*/, value1, true);
Das Script ist aktiv.
Ich dachte, das Script läuft, sobald die SV Anwesend in der CCU1 (hm-rega.0) ihren Status ändert. Das tut es aber nicht.
Wo mache ich einen (Denk)Fehler?
-
Dein Script läuft schon es macht nur einfach nix. Die Log Meldung taucht nur auf wenn dein Script im Javascript adapter aktiviert wird und dann nicht mehr. Das gleiche gilt für dein setState am ende.
Das was innerhalb deiner Subscription ist wird ausgeführt.
Dein Script muss dann so aussehen:
var value1; on({id: "hm-rega.0.41913"/*Anwesend*/, change: "ne"}, function (obj) { console.log('script SV_Anwesend läuft'); var value = obj.state.val; var oldValue = obj.oldState.val; value1 = getState("hm-rega.0.41913").val; setState("hm-rega.1.1881"/*Anwesend*/, value1, true); });
-
Danke!
So langsam werden die Zusammenhänge klar.
-
Das kann man vereinfachen:
on("hm-rega.0.41913", function (obj) { setState("hm-rega.1.1881"/*Anwesend*/, obj.state.val, true); });
-
Hallo zusammen,
wenn ich die Skripte richtig lese, dann wird die Anwesenheit auf CCU2 auf true gesetzt, wenn sich die Anwesenheit auf CCU1 ändert. Also bei jeder Änderung, auch bei Änderung zu false.
CCU1 auf die CCU2 "spiegeln". `
Laut iobroker.javascript-Github readme ist die einfachste Art, zwei States zu synchronisieren doch so (vom ersten zum zweiten State):on("hm-rega.0.41913"/*Anwesend*/, "hm-rega.1.1881"/*Anwesend*/); ````oder für mehr Übersichtlichkeit:
var ccu1anwesenheit = "hm-rega.0.41913"/Anwesend/,
ccu2anwesenheit = "hm-rega.1.1881"/Anwesend/;on(ccu1anwesenheit, ccu2anwesenheit);
Gruß Pix