NEWS
Variable setzen wenn bestimmte Bedingungen erfüllt sind
-
Hi zusammen!
Ich hab mal wieder n Problem wo ich vor lauter Bäumen den Wald nicht sehe.
Und zwar möchte ich gerne 3 Datenpunkte überwachen und wenn die einen Bestimmten Wert haben dann soll eine Variable gesetzt werden.
Also als Beispiel:
javascript.0.Abenddämmerung ist true
javascript.0.Abwesend ist true
javascript.0.scriptEnabled.Kamera_Haustuer ist false
Dann soll als Beispiel javascript.0.Bedinungerfuellt auf true.
In dem Moment wo eine der Bedingungen sich wieder ändert z.B. javascript.0.Abenddämmerung auf false
dann soll javascript.0.Bedinungerfuellt auch auf false.
mit on(…. bekomme ich das leider nicht hin und if-Schleifen bringen da nichts weil ja die 3 Datenpunkte ja immer überwacht werden sollen
Kann mir da jemand vielleicht weiterhelfen? Wäre echt klasse.
Gruß
Johnny
-
mit on(…. bekomme ich das leider nicht hin und if-Schleifen bringen da nichts weil ja die 3 Datenpunkte ja immer überwacht werden sollen
Kann mir da jemand vielleicht weiterhelfen? Wäre echt klasse.
Gruß
Johnny `
Verstehe ich nicht ganz, mittels ON kan man die 3 werte auf aenderungne/update uberwachten und dan ein IF fuer setzten des wertes ?
Hast du ein script vorbereited wasa nicht leuft ?
Muesste ungefaehr so aussehen aus dem bauch raus:
on({id: "javascript.0.Abenddämmerung", change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.0.Abenddämmerung").val == true) { setState("javascript.0.Bedinungerfuellt", true); } else { setState("javascript.0.Bedinungerfuellt", false); } });
-
var bedingung_eins = "javascript.0.Abenddämmerung"; //Beispiel var bedingung_zwei = "usw...."; var bedingung_drei = "usw"; function check() { var wert_eins = getState(bedingung_eins).val; var wert_zwei = getState(bedingung_zwei).val; var wert_drei = getState(bedingung_drei).val; If( wert_eins && wert_zwei && !wert_drei) { //tue dies } else { //mache das } } on(bedingung_eins, check); on(bedingung_zwei, check); on(bedingung_drei, check);
Kannst es ja mal so probieren…
-
Erstmal danke euch beiden für eure Lösungsvorschläge @dutchman du hast mich da glaub ich etwas missverstanden die Lösung von blauholsten ist glaub ich genau die passende.
Es sollen ja die drei Auslöser überwacht werden und bei deiner wird nur eine Überwacht. Ich hoffe du verstehst was ich meine.
Muss ich später mal ausprobieren.
Trotzdem euch beiden schonmal vielen Dank
Gruß Johnny
-
Ich hoffe du verstehst was ich meine. `
Jup war auch beispiel fuer eine
Die loesung von blauholsten ist definitiev besser und uebersichtlicher und auch logischer um in eine function zu schreiben. Einziger nachteil is hierbei das bei jedem update einer der 3 weten immer alle 3 neu gesetzt werden da keine abrage statt findet. Das duerfte aber kein problem sein denke ich mal
Ich muss mich mal mehr in functions vertiefen das macht so einiges ubersichtlicher
Greetz,
Dutch
-
Um ein dreifaches getState(id) bei jedem Auslöser zu vermeiden, würde ich es so machen:
var bedingung_eins = "javascript.0.Abenddämmerung"; //Beispiel var bedingung_zwei = "usw...."; var bedingung_drei = "usw"; var wert_eins = getState(bedingung_eins).val; var wert_zwei = getState(bedingung_zwei).val; var wert_drei = getState(bedingung_drei).val; function check() { if(wert_eins && wert_zwei && !wert_drei) { //tue dies } else { //mache das } } check(); // script start on(bedingung_eins, function(dp) { wert_eins = dp.state.val; check(); }); on(bedingung_zwei, function(dp) { wert_zwei = dp.state.val; check(); }); on(bedingung_drei, function(dp) { wert_drei = dp.state.val; check(); });
-
Hallo,
Ich hatte ein ähnliches Problem.
Mehrere Homematic Schalt-Aktoren (Weihnachstbeleuchtung) sollten geschaltet werden wenn der Bewegungsmelder "draußen" oder der Bewegungsmelder "Flur-unten" eine Bewegung erkannt hat.
Nach ein er bestimmten Zeit sollten "Lichter" wieder "allein" ausgehen. Muß ja nicht die ganze Ncht brennen :lol:
Zusätzlich sollte noch die Helligkeit des Bewegungsmelder "draußen" überprüft werden (ob es dunkel genug ist die "Licher" einzuschalten).
Ich hab das über eine Funktion gelöst, die von beiden "on" Ereignis Funktionen ausgeführt wird.
Hier ist der Script:
function Kerze () {
var Helligkeit = getState("hm-rpc.0.NEQ0121243.1.BRIGHTNESS"/Aussen Bewegung-1-S.BRIGHTNESS/).val;
log ("Helligkeit: " + Helligkeit);
if (Helligkeit < 130) {
setState("hm-rpc.0.KEQ0171811.1.STATE"/Licht Wand.STATE/,true); //Steckdose Schuppen ein
setState("hm-rpc.0.KEQ0171542.1.STATE"/Licht Fenster.STATE/,true); //Steckdose Carport ein
setState("hm-rpc.0.KEQ0171848.1.STATE"/Schalter-2.STATE/,true); //Steckdose Terasse ein
setState("hm-rpc.0.KEQ0172215.1.STATE"/Schalter-1.STATE/,true); //Steckdose Küche ein
setState("hm-rpc.0.LEQ0944756.1.STATE"/Kerze-1S.STATE/,true); //Kerze-1 ein
setState("hm-rpc.0.NEQ0603872.1.STATE"/Kerze-2S.STATE/,true); //Kerze-2 ein
setState("hm-rpc.0.NEQ0603833.1.STATE"/Kerze-3S.STATE/,true); //Kerze-4 ein
setStateDelayed("hm-rpc.0.KEQ0171811.1.STATE"/Licht Wand.STATE/,false,10006020); //Steckdose Schuppen aus, nach 20 min
setStateDelayed("hm-rpc.0.KEQ0171542.1.STATE"/Licht Fenster.STATE/,false,10006020); //Steckdose Carport aus, nach 20 min
setStateDelayed("hm-rpc.0.KEQ0171848.1.STATE"/Schalter-2.STATE/,false,10006020); //Steckdose Terasse aus, nach 20 min
setStateDelayed("hm-rpc.0.KEQ0172215.1.STATE"/Schalter-1.STATE/,false,10006020); //Steckdose Küche aus, nach 20 min
setStateDelayed("hm-rpc.0.LEQ0944756.1.STATE"/Kerze-1S.STATE/,false,10006010); //Kerze-1 aus, nach 10 min
setStateDelayed("hm-rpc.0.NEQ0603872.1.STATE"/Kerze-2S.STATE/,false,10006010); //Kerze-2 aus, nach 10 min
setStateDelayed("hm-rpc.0.NEQ0603833.1.STATE"/Kerze-3S.STATE/,false,10006010); //Kerze-4 aus, nach 10 min
}
}
// auslösen wenn Bewegung in Flur-unten
on ({id: "hm-rpc.0.JEQ0264853.1.MOTION"/Flur unten Bewegungsmelder.MOTION/, val: true}, function () {
Kerze ();
});
// auslösen wenn Bewegung vor dem Haus
on ({id: "hm-rpc.0.NEQ0121243.1.MOTION"/Aussen Bewegung-1-S.MOTION/, val: true}, function () {
Kerze ();
});