NEWS
Ansage "Wäsche ist fertig" HILFE
-
Hallo zusammen,
ich muß mal wieder lauthals "HILFE" rufen.
Ich versuche gerade die Scripte aus CCU.IO zu importieren und….... versage kläglich. :roll:
Ein Script das bis dato wunderbar funktioniert hat, ist ein Script das mir ansagt wann die Wäsche fertig ist (Waschmaschine steht in anderem Stockwerk. Frau war begeistert ). Gelöst mit einem Zwischenstecker mit Leistungsmessung.
Erstellt wurde es mit dem Scripteditor.
Hier die "angepasste" Version:
` > // Force VariablensetObject(Wasch, true);
// Timeout Variablen
var loop_2 = 0;
var loop_2_delay;
// Variablen
function loop_2_loop(data) {
if (loop_2 < 2) {
loop_2++;
codebox_0(data);
loop_2_delay = setTimeout(function() {
loop_2_loop(data)}, 30000);
}
}
function loop_2_in1(data) { loop_2 = 0;clearTimeout(loop_2_delay);
loop_2_loop(data);
}
function loop_2_in2(data) { clearInterval(loop_2_delay);
loop_2 = 2;
}
// CCU.IO Objekte
var Wasch = true;
//setObject("Wasch"), {Name: "var_Waschmaschine",TypeName: "VARDP",_persistent: true});
// Trigger
var Daten="hm-rpc.0.LEQ0529875.2.POWER";
var Power = getState(Daten);
subscribe({id:(getState(Power).val),valLt: 2}, function(data) {codebox_12(data);});
subscribe({id: (getState(Power).val),valLt: 1}, function(data) {codebox_12(data);});
subscribe({id: (getState(Power).val),valGt: 4}, function(data) {codebox_9(data);});
//Bedingungsabfrage_Leistungsdaten
function codebox_0(data) {
var input_1_out = getState("hm-rpc.0.LEQ0529875.2.POWER"/Waschmaschine-Daten.POWER/).val;
var string_2_out = "2";
var input_13_out = getState("hm-rpc.0.LEQ0529875.2.CURRENT"/Waschmaschine-Daten.CURRENT/).val;
var string_14_out = "40";
var wenn_3_out=true;
var wenn_16_out = true;
var und_15_out = true;
if (input_1_out < string_2_out) {
wenn_3_out = true;
} else {
wenn_3_out = false;
} if (input_13_out < string_14_out) {
wenn_16_out = true;
} else {
wenn_16_out = false;
} if (wenn_3_out === true && wenn_16_out === true) {
und_15_out = true;
} else {
und_15_out = false;
} if (und_15_out === true) {
codebox_1(data);
}
}
//Sprachausgabe
function codebox_1(data) {
var string_4_out = "Die Waesche ist fertig.";
setState("sayit.0.tts.text"/Text to speech/, string_4_out);
}
//Abfrage_Bedingung_Abbruch
function codebox_3(data) {
var input_7_out = getState(Wasch);
var true_8_out = true;
var wenn_6_out = true;
if (input_7_out == true_8_out) {
wenn_6_out=true;
} else {
setState(wenn_6_out, false);
} if (wenn_6_out === true) {loop_2_in2(data);}}
//Abfrage_Variable_unwahr
function codebox_5(data) {
Log("Codebox_5");
var input_18_out = getState(Wasch);
Log("Varable Wasch: "+Wasch);
var true_19_out = true;
var wenn_17_out = false;
if (input_18_out != true_19_out) {
wenn_17_out = true;
} else {
wenn_17_out = false;
}
codebox_3(data);
if (wenn_17_out === true) {loop_2_in1(data);}
}
//Trigger_Variable_unwahr_setzen
function codebox_9(data) {
var false_27_out = false;
setState(Wasch, false_27_out);
}
//Trigger_Variable_wahr_setzen
function codebox_12(data) {
var true_31_out = true;
setState(Wasch, true_31_out);
} `
Ziemlich wirr. Ich weiß…...
Das folgende Script hab ich versucht selbst zu erstellen. Hat auch teilweise funktioniert. Hab dann aber so lange dran rum experimentiert bis gar nichts mehr ging...
var varWatt ='hm-rpc.0.LEQ0529875.2.POWER'; var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT'; var ccuvar_1 ="hm-rega.0.9531"; var ccuvar_2 = "hm-rega.0.11273"; var varWaschmaschine =getState(ccuvar_2).val; { subscribe ({id: varWatt, change: "lt"}, Ausgabe); //subscribe ({id: varWatt, change: "any"}, Steuerung); } function Ausgabe() { var varWaschmaschine =getState(ccuvar_2).val; var Leistung =getState(varWatt).val; var strom=getState(varAmpere).val; var varAnzeige=getState(ccuvar_1).val; if (varWaschmaschine===true) if(Leistung<1) if(strom<40) setState("sayit.0.tts.text", "Die Wäsche ist fertig!") setState("hm-rega.0.11273", "0"); } function Steuerung() { var varWaschmaschine =getState(ccuvar_2).val; var Leistung=getState(varWatt).val; var strom=getState(varAmpere).val; var varAnzeige=getState(ccuvar_1).val; if(Leistung>1) if(strom>40) setState("hm-rega.0.11273", "1") setState("hm-rega.0.9531", "1") setState("hm-rega.0.11330", true); }
Kann mir einer sagen was ich zum :evil: verkehrt mache?
Danke und Gruß
Dragonius
-
1. Bei der verschachtelten if-Abfrage fehlen geschweifte Klammern. Besser man verwendet eine UND-Verknüpfung.
2. if (varWaschmaschine===true) erwartet einen boolean Wert. setState("hm-rega.0.11273", "0"); achreibt aber einen String !
Vielleicht funktioniert es so ?
var varWatt ='hm-rpc.0.LEQ0529875.2.POWER'; var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT'; var ccuvar_1 = "hm-rega.0.9531"; var ccuvar_2 = "hm-rega.0.11273"; // var varWaschmaschine =getState(ccuvar_2).val; subscribe ({id: varWatt, change: "lt"}, Ausgabe); //subscribe ({id: varWatt, change: "any"}, Steuerung); function Ausgabe() { var varWaschmaschine = getState(ccuvar_2).val; var Leistung = getState(varWatt).val; var strom = getState(varAmpere).val; var varAnzeige = getState(ccuvar_1).val; if (varWaschmaschine && Leistung < 1 && strom < 40) { setState("sayit.0.tts.text", "Die Wäsche ist fertig!"); setState(ccuvar_2, false); } }
-
Danke für die Hilfe. Hat nicht ganz auf Anhieb geklappt. Die "Und" Dedingung wollte er so nicht fressen.
Hier das Script, dass jetzt fehlerfrei und so wie es soll läuft:
var varWatt ='hm-rpc.0.LEQ0529875.2.POWER'; var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT'; var ccuvar_1 = "hm-rega.0.9531"; var ccuvar_2 = "hm-rega.0.11273"; subscribe ({id: varWatt, change: "lt"}, Ausgabe); subscribe ({id: varAmpere, change: "lt"}, Ausgabe); subscribe ({id: varWatt, change: "any"}, Steuerung); function Ausgabe() // Abfrage der Energiedaten und Sprachausgabe { var varWaschmaschine = getState(ccuvar_2).val; var Leistung = getState(varWatt).val; var strom = getState(varAmpere).val; { if (Leistung < 1) if (strom < 40) setState("sayit.0.tts.text", "Die Wäsche ist fertig!"); setState(ccuvar_2, 0); setState(ccuvar_1, false); }} function Steuerung() // Zum setzen der Anzeige { var varWaschmaschine =getState(ccuvar_2).val; var Leistung=getState(varWatt).val; var strom=getState(varAmpere).val; if(Leistung > 1) if(strom>40) setState(ccuvar_2, 1); setState(ccuvar_1, true); }
Gruß
Dragonius
-
Hi,
kann mir einer sagen wie ich die Ansage über ein Sonos herausgeben kann?
-
Du brauchst den Sonos Adapter und den text-to-speech adapter, entsprechend konfiguriert.
Im Script unten erfolgt dann die Ausgabe mit der Zeile
setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
Nach einem schnellen Blick …
Ich glaub ja nicht, dass das Script so 100% funktioniert.
Diese komische geschweifte Klammer in function Ausgabe() macht ... nix.
EINRÜCKUNGEN sagen der if Abfrage auch NIX.
das heisst bei Aufruf von "Ausgabe" werden die CCU-Variablen IMMER 0 bzw. false.
Genau so wird bei der function Steuerung die ccuvar_1 IMMER auf true gesetzt, die ist AUSSERHALB der if Abfragen - es ist wie gesagt EGAL, wie weit die eingerückt ist.
Siehe z.B. ... https://developer.mozilla.org/de/docs/W ... behandlung
Wenn Du also willst, dass z.B. in function Ausgabe die ccu-Variablen nur auf 0 bzw. false gehen, wenn die Wäsche fertig ist, muss das heissen ...
function Ausgabe() // Abfrage der Energiedaten und Sprachausgabe { var varWaschmaschine = getState(ccuvar_2).val; var Leistung = getState(varWatt).val; var strom = getState(varAmpere).val; if (Leistung < 1) if (strom < 40) { setState("sayit.0.tts.text", "Die Wäsche ist fertig!"); setState(ccuvar_2, 0); setState(ccuvar_1, false); } } function Steuerung() // Zum setzen der Anzeige { var varWaschmaschine =getState(ccuvar_2).val; var Leistung=getState(varWatt).val; var strom=getState(varAmpere).val; if(Leistung > 1) if(strom>40) { setState(ccuvar_2, 1); setState(ccuvar_1, true); } }
Übrigens fragst Du in beiden Funktionen die varWaschmaschine zwar ab, aber machst nichts damit…
Gibt es eigentlich einen Grund, den Strom und die Leistung abzufragen? Naiv hätte ich gesagt, P=U x I ... und wir haben doch recht konstant U = 230V...
CU
Werner
-
Hallo,
Werner hat recht, die letzte gepostete Version des Skriptes kann so nicht fehlerfrei laufen. Da muss doch auch der Editor im Javascript Adapter meckern (auf die Symbole am linken Rand achten!)
Ich denke vielleicht so:
! ````
var varWatt ='hm-rpc.0.LEQ0529875.2.POWER';
var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT';
var ccuvar_1 = "hm-rega.0.9531";
var ccuvar_2 = "hm-rega.0.11273";
! on({
id: varWatt,
change: "lt"
}, Ausgabe);
! on({
id: varAmpere,
change: "lt"
}, Ausgabe);
! on({
id: varWatt,
change: "any"
}, function(obj) {
// var varWaschmaschine = getState(ccuvar_2).val; // wozu wurde dieser State abgefragt?
var Leistung = obj.state.val;
var strom=getState(varAmpere).val;
if (Leistung > 1 && strom > 40) {
setState(ccuvar_2, 1);
setState(ccuvar_1, true);
}
});
! function Ausgabe() { // Abfrage der Energiedaten und Sprachausgabe
var varWaschmaschine = getState(ccuvar_2).val;
var Leistung = getState(varWatt).val;
var strom = getState(varAmpere).val;
if (Leistung < 1 && strom < 40) {
setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
setState(ccuvar_2, 0);
setState(ccuvar_1, false);
}
}! ````
Gruß
Pix
-
Hallo Dragonius,
so sieht es bei mir aus, Ausgabe über Lautsprecher und Telegram
1162_image_2.png -
Mein Code sieht so aus. Einfach und funktioniert super. besonders beim Trockner, weil der am Ende noch auflockert.
Das valLt und oldValGe sind echt gute Funktionen.
Gruß
var timer = null; // Einschaltverzögerung on({id: "hm-rpc.0.LEQ1314518.2.POWER", valLt: 1.1, oldValGe: 100}, function() { timer = setTimeout(meldung, 120000); // in ms log("Einschaltverzögerung ausgelöst"); }); // Timer löschen on({id: "hm-rpc.0.LEQ1314518.2.POWER", valGe: 100, oldValLt: 5}, function() { if(timer) clearTimeout(timer); log("Timer löschen"); }); // Anweisung function meldung() { log("Trockner fertig"); //Sayit setState("sayit.0.tts.text", "de;40;" + 'Der Trockner ist fertig'); //Push schicken sendTo("telegram.0", "send", { text: 'Trockner', }); }