NEWS
[GELÖST]Datenpunkt und Funktion(FEHLER???)
-
Hi,
ich habe folgendes Problem.:
Ich nutze ctrl Button State um meine HM Thermostate in Hand bzw Auto zu versetzten.
Ich habe mir nach langen hin und her ein Script angelegt um in den Manu-Modus wechseln zu können, denn der Button gibt anscheinend einen String aus.
Jetzt passiert aber folgendes:
ich erzeuge Datenpunkte und verknüpfe diese mit den ctrl Buttons, diese sollen dann bei Betätigung eine function ausführen. Soweit so gut…...die Thermostate führen die Aktion auch aus, aber.........wenn ich jetzt einen dieser Button betätige, reagiert das andere Thermostat auch!!!
Ich habe kaum Programmierkenntnisse aber aus meiner Sicht kann es nicht sein das eine Funktion bzw eine Datenpunkt angesteuert wird der einen komplett einen anderen Namen besitzt!
Hier das erste Script:
//Erzeuge Datenpunkte createState('thermostat.stube.autostube', ""); createState('thermostat.stube.manustube', ""); //Funktion für Umschaltung auf "manuell" function manstube () { //Datenpunkte des Thermostates var a = getState("hm-rpc.0.MEQ0480054.2.AUTO_MODE").val; var b = getState("hm-rpc.0.MEQ0480054.2.MANU_MODE").val; if(a) { setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", false); setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);//wichtig ist die "0" log("manuell"); } else { setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);//wichtig ist die "0" log("manuell"); } } //Funktion für Umschaltung auf "automatik" function autstube () { var a = getState("hm-rpc.0.MEQ0480054.2.AUTO_MODE").val; var b = getState("hm-rpc.0.MEQ0480054.2.MANU_MODE").val; if(b) { setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", false); setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true); log("automatik"); } else { setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true); log("automatik"); } } //reagieren auf Betätigung der crtl State Button im VIS on({ID: 'javascript.0.thermostat.stube.autostube', "val": "0"}, function() { autstube(); }); on({ID: "javascript.0.thermostat.stube.manustube", "val": "1"}, function() { manstube(); });
….hier das zweite:
//Erzeuge Datenpunkte createState('thermostat.bad.autobad', ""); createState('thermostat.bad.manubad', ""); //Funktion für Umschaltung auf "manuell" function manbad () { //Datenpunkte des Thermostates var a = getState("hm-rpc.0.MEQ0447885.4.AUTO_MODE").val; var b = getState("hm-rpc.0.MEQ0447885.4.MANU_MODE").val; if(a) { setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", false); setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 0);//wichtig ist die "0" log("Manuell"); } else { setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 0);//wichtig ist die "0" log("Manuell"); } } //Funktion für Umschaltung auf "automatik" function autbad () { var a = getState("hm-rpc.0.MEQ0447885.4.AUTO_MODE").val; var b = getState("hm-rpc.0.MEQ0447885.4.MANU_MODE").val; if(b) { setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", false); setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true); log("Automatik"); } else { setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true); log("Automatik"); } } //reagieren auf Betätigung der crtl State Button im VIS on({ID: 'javascript.0.thermostat.bad.autobad', "val": "0"}, function() { autbad(); }); on({ID: "javascript.0.thermostat.bad.manubad", "val": "1"}, function() { manbad(); });
übersehe ich was??? Oder habe ich überhaupt keine Ahnung??? :roll:
-
Kann keiner helfen??? Ich verzweifle noch.
mir ist absolut nicht klar warum beide Scripte durchlaufen werden!
-
var a = getState("hm-rpc.0.MEQ0480054.2.AUTO_MODE").val; var b = getState("hm-rpc.0.MEQ0480054.2.MANU_MODE").val; ```` `
AUTO_MODE und MANU_MODE können nicht gelesen weden. Zur Abfrage des aktuellen Modus dient CONTROL_MODE (0 = AUTO-MODE, 1 = MANU-MODE, 2 = PARTY-MODE, 3 = BOSST-MODE).
@blauholsten:setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);//wichtig ist die "0" ```` `
An MANU_MODE muss der Sollwert (in °C) übergeben werden.
-
Hallo paul53,
das mit dem getState weiss ich, ging aber dennoch. Der Wert war bloß nicht bestätigt.
Die Funktionalität war komplett gegeben.
Zur Temperatur:
Man kann auch jede andere beliebige Zahl eingeben, wichtig ist sie nicht als ""String einzugeben, denn das funktioniert nicht!
Ich habe die letzten Stunden das Script wie folgt geändert, leider werden die unterschiedlichen "function" trotzdem ausgeführt! ICH VERSTEHE NICHT WARUM!
createState('thermostate.stube.modus', ""); createState('thermostate.bad.modus', ""); function stube() { var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val; switch(a) { case 0: setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", false); setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0); toLog(zeit + "->" + "Stube Manuell"); break; case 1: setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", false); setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true); toLog(zeit + "->" + "Stube Automatik"); break; } } //************************************************************************ function bad() { var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val; switch(b) { case 0: setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", false); setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 0); toLog(zeit + "->" + "Bad Manuell"); break; case 1: setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", false); setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true); toLog(zeit + "->" + "Bad Automatik"); break; } } on({ID: "javascript.0.thermostate.stube.modus", "val":"0"}, function() { stube(); }); on({ID: "javascript.0.thermostate.stube.modus", "val":"1"}, function() { stube(); }); on({ID: "javascript.0.thermostate.bad.modus", "val":"0"}, function() { bad(); }); on({ID: "javascript.0.thermostate.bad.modus", "val":"1"}, function() { bad(); });
-
Dass beide Thermostaten gleichzeitig reagieren, kann ich in dem Script nicht nachvollziehen.
Allerdings setzt man immer nur einen Modus: Entweder AUTO oder MANU.
Bezüglich des Auslösers sollte man die Funktion vereinfachen, denn "Standard" ist "change: ne" (bei Änderung).
createState('thermostate.stube.modus', ""); createState('thermostate.bad.modus', ""); function stube() { var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val; switch(a) { case 0: setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 20.0); // Sollwert toLog(zeit + "->" + "Stube Manuell"); break; default: setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true); toLog(zeit + "->" + "Stube Automatik"); } } //************************************************************************ function bad() { var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val; switch(b) { case 0: setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 22.0); // Sollwert toLog(zeit + "->" + "Bad Manuell"); break; default: setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true); toLog(zeit + "->" + "Bad Automatik"); } } on("javascript.0.thermostate.stube.modus", function() { stube(); }); on("javascript.0.thermostate.bad.modus", function() { bad(); });
-
Hast Du mal die Zeitstempel der beiden JS-Datenpunkte verglichen ?
-
Hast Du mal die Zeitstempel der beiden JS-Datenpunkte verglichen ? `
leider nein, habe vorhin alles neu gestartet und dann ging es komischerweise!
Deine Veränderungen in der Switch-Anweisung machen sinn! Danke hierfür.
Aber die Veränderung beim Aufruf (ON) klappt mit der "Standard" Variante nicht. Wenn ich von aussen den Modus wechsle, würde das im VIS nicht mehr passen.
Ich habe es jetzt so gelöst, und es funktioniert endlich alles wie es soll!
//*****************DATENPUNKTE*ERZEUGEN**************************************** createState('thermostate.stube.modus', ""); createState('thermostate.bad.modus', ""); createState('thermostate.küche.modus', ""); //*********************STUBE************************************************** function stube() { var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val; switch(a) { case 0: setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 5.0); // Sollwert toLog(zeit + "->" + "Stube Manuell"); break; default: setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true); toLog(zeit + "->" + "Stube Automatik"); } } //********************BAD***************************************************** function bad() { var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val; switch(b) { case 0: setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 5.0); // Sollwert toLog(zeit + "->" + "Bad Manuell"); break; default: setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true); toLog(zeit + "->" + "Bad Automatik"); } } //********************KÜCHE**************************************************** function kueche() { var c = getState("hm-rpc.0.MEQ0447899.4.CONTROL_MODE").val; switch(c) { case 0: setState("hm-rpc.0.MEQ0447899.4.MANU_MODE", 5.0); // Sollwert toLog(zeit + "->" + "Küche Manuell"); break; default: setState("hm-rpc.0.MEQ0447899.4.AUTO_MODE", true); toLog(zeit + "->" + "Küche Automatik"); } } //********************AUFRUFE************************************************** on({id: "javascript.0.thermostate.stube.modus", "val": "stubem"}, function() { stube(); }); on({id: "javascript.0.thermostate.stube.modus", "val": "stubea"}, function() { stube(); }); on({id: "javascript.0.thermostate.bad.modus", "val": "badm"}, function() { bad(); }); on({id: "javascript.0.thermostate.bad.modus", "val": "bada"}, function() { bad(); }); on({id: "javascript.0.thermostate.küche.modus", "val": "küchea"}, function() { kueche(); }); on({id: "javascript.0.thermostate.küche.modus", "val": "küchem"}, function() { kueche(); });
In dem Script könnte man in den Case Anweisung mit "case 3:" nun noch die Boost-Funktion der Thermostate realisieren.
Danke für die Hilfe.