@mguenther sagte in [gelöst]manuelle/automatische Rollosteuerung:
nachdem HIER der entscheidene Hinweis kam, Skript zum Setzen des Datenpunkts Rollo_manuell komplett umgestellt:
const idManu = 'javascript.0.Kueche.Rollo_manuell'/*Rollo manuell*/;
const idRollo = 'hm-rpc.3.MEQ0078539.3.LEVEL'/*Rollo EG04 Küche:3 LEVEL*/;
const idTaste1='hm-rpc.3.MEQ0078539.1.PRESS_SHORT'/*Rollo EG04 Küche:1 PRESS SHORT*/;
const idTaste2='hm-rpc.3.MEQ0078539.1.PRESS_LONG'/*Rollo EG04 Küche:1 PRESS LONG*/
const idTaste3='hm-rpc.3.MEQ0078539.2.PRESS_SHORT'/*Rollo EG04 Küche:2 PRESS SHORT*/;
const idTaste4='hm-rpc.3.MEQ0078539.2.PRESS_LONG'/*Rollo EG04 Küche:2 PRESS LONG*/
const idLaufzeit ='javascript.0.Rollosteuerung.Zeit_virtuell'/*Zeit virtuell in Stunden*/;
const idTaster_virtu = 'javascript.0.Kueche.Rollo_virtueller_Taster'/*Rollo virtueller Taster*/;
var timer = null;
var taster_virtu = getState(idTaster_virtu).val;
var laufzeit = getState(idLaufzeit).val *60*60000; //Laufzeit in Stunden
on(idTaster_virtu, function(dp) {
taster_virtu = dp.state.val;
var manu = false;
if(timer) clearTimeout(timer); // Stopp Timer
timer = null;
if (taster_virtu) {
manu = true;
timer = setTimeout(function() {
timer = null;
setState(idManu, false, true);
setState(idTaster_virtu, false, true);
}, laufzeit);
}
setState(idManu, manu, true);
});
on(idRollo, function(dp) {
if(dp.state.val === 0 || dp.state.val == 100) setState(idManu, false, true);
});
on({id: idTaste1}, function() {
setState(idManu, true, true);
});
on({id: idTaste2}, function() {
setState(idManu, true, true);
});
on({id: idTaste3}, function() {
setState(idManu, true, true);
});
on({id: idTaste4}, function() {
setState(idManu, true, true);
});
Danke Paul, wie immer...
Hallo Zusammen,
irgendwie klappt es leider nicht so ganz. Wenn das Rollo auf 100% geht, wird nicht immer die Variable Rollo_manuell auf false gesetzt - warum, weiß ich nicht, trotz der Zeile:
on(idRollo, function(dp) {
if(dp.state.val === 0 || dp.state.val == 100) setState(idManu, false, true);
});
😞
Ich finde den Fehler nicht, es ist halt auch nicht reproduzierbar. Mal taucht dieser Fall auf. Erste Idee wäre jetzt nen Workaround.
Frage alle 5 Minuten ab, ob (Rollo_manuell = true), dann prüfe den Rollo-Level.
Wenn Wert = 0 oder 100, dann (Rollo_manuell = false)
oder?
wie mach ich das mit dem Schedule?
Zweite Idee wäre ne kurze Verzögerung beim Setzen der Variable Rollo_auto -irgendwie denke ich, dass es da ein Überlagern gibt...