So, wir haben es ausprobiert.
Leider mit mäßigem Erfolg. Das Skript wollte einfach nicht so. Trotzdem vielen Dank für den "Trigger" an ostfriese bin jetzt doch mal tiefer in die Materie gegangen als zuvor gedacht Sorry dein Skript wurde nahezu komplett geändert - aber auch ausgiebig getestet.
Wegen der doch höher ermittelten Leistung von ca,. 210 Watt statt der 191 Watt Nennleisungsangabe auf dem Motor sind wir aktuell mit 215 W Ansprechschwelle unterwegs.
Im 250ms Raster abgetastet, allerdings nur wenn der Motor läuft.
Mit DEBUG = true kann das Ganze einfach in der Konsole beobachtet werden.
JavaScript: Obstacle_PLUS_2PM
let DEBUG = false;
let DEVICE_PARAMS = {
"id": 0
};
let counter = 0;
let timer = null;
let timerInterval = 250; // ms
let blockingPower = 215; // W
let timeBlocking = 250; // ms
Shelly.addStatusHandler(function(e) {
if (DEBUG) {
print(JSON.stringify(e));
}
if (e.component === "cover:0") {
if (e.delta.state === "stopped" || e.delta.state === "open" || e.delta.state === "closed") {
Timer.clear(timer);
counter = 0;
} else if (e.delta.state === "closing" || e.delta.state === "opening") {
timer = Timer.set(timerInterval, true, onTimerUpdate);
}
}
});
function onTimerUpdate() {
Shelly.call("Cover.GetStatus", DEVICE_PARAMS, onGetStatus);
}
function onGetStatus(result, error_code, error_message) {
if (error_code === 0) {
let power = result.apower;
if (DEBUG) {
print(JSON.stringify(result));
print(power);
}
if (power >= blockingPower) {
counter++;
}
if (counter * timerInterval >= timeBlocking) {
if (DEBUG) {
print("Obstacle detected! Stopping.");
}
Shelly.call("Cover.Stop", DEVICE_PARAMS);
Timer.clear(timer);
}
}
}
Alles anzeigen