Hier kommt das Script, ich hatte doch noch Zeit heute. Wie schon geschrieben, Ursprung war ein Script zur Überwachung einer Waschmaschine.
Zur Funktion:
Die Einstellungen werden zwischen Config Start und Config End vorgenommen, musst du evtl anpassen.
Die Zeit habe ich so übernommen, wie von dir beschrieben (900 Sekunden -> 15 Minuten). Du kannst den Plug einschalten und dir dann Zeit lassen, die Überwachung startet erst, wenn der Drucker das 1. Mal mehr als 50W aufnimmt.
Es gibt noch ein paar Spielereien mit dem Farbring des Plug, ist in den Kommentaren erklärt.
Ursprünglich gab es auch eine Benachrichtigungsfunktion, habe ich bei der Verwendung für den 3D-Drucker aber entfernt, weil es nur um das Abschalten nach Fertigstellung des Drucks geht.
/**
* @copyright shelly-tools contributors
* @license GNU Affero General Public License (https://www.gnu.org/licenses/agpl-3.0.de.html)
* @authors https://github.com/shelly-tools/shelly-script-examples/graphs/contributors
*
* This script is intended to measure power consumption from the local device, e.g. a Shelly Plus 1PM,
* and send a signal push notification once the power consumption stops for a given time period.
* the idea behind is to monitor a washing machine or dryer and send a notification once the appliance
* has finished.
Modifiziert zur automatischen Abschaltung eines 3D-Druckers.
Wenn der Plug eingeschaltet ist leuchtet der Farbring grün, die Leistung wird überwacht.
Überschreitet die Leistung den eingestellten Wert, wird die Abschaltüberwachung aktiviert, der Ring leuchtet jetzt rot.
Wenn die Leistung den Abschaltwert für die Dauer der eingestellten Zeit unterschreitet, dann wird der Plug abgeschaltet, der Ring leuchtet blau.
*/
// CONFIG START
// Anzahl der aufeinander folgenden Prüfungen, bis der Plug abgeschaltet wird. Die aufgenommene Leistung muss unter "EndUsage" liegen.
let timesInactive = 90; // in Schritten von je 10 Sekunden
// Startusage .. wird dieser Wert überschritten, wird die Überwachung gestartet ..
let startUsage = 50; // Watt
// Endusage .. unterhalb dieses Werts und wenn "timesInactive" abgelaufen ist, wird die Überwachung beendet, der Plug wird abgeschaltet ..
let endUsage = 15; // Watt
// CONFIG END
// Do not change code below this line!
let countInactive = 0;
let alertTimer = null;
let active = false;
let stopped = false;
function startMonitor() {
alertTimer = Timer.set(10 * 1000, //alle 10 Sekunden prüfen
true,
function () {
Shelly.call(
"switch.getStatus",
{ id: 0 },
function (res, error_code, error_msg, ud) {
if (res.apower > startUsage) {
countInactive = 0;
activate();
}
print ('10 seconds test started, Power= ' + JSON.stringify(res.apower) + ' W');
if (active) {
isReady(res.apower);
}
},
null
);
},
null
);
}
function ringGreenBlue() {
Shelly.call(
"PLUGS_UI.SetConfig",{ id:0, config:{"leds":{"mode":"switch","colors":
{"switch:0":
{"on":{"rgb":[000,100,0],"brightness":100},
"off":{"rgb":[0,0,100],"brightness":100}}}}}},
function (result, code, msg, ud) {
},
null
);
}
function ringRedBlue() {
Shelly.call(
"PLUGS_UI.SetConfig",{ id:0, config:{"leds":{"mode":"switch","colors":
{"switch:0":
{"on":{"rgb":[100,000,0],"brightness":100},
"off":{"rgb":[0,0,100],"brightness":100}}}}}},
function (result, code, msg, ud) {
},
null
);
}
function activate() {
if (active === false) {
active = true;
print('appliance started');
ringRedBlue();
}
}
function isReady(usage) {
if (active && usage < endUsage) {
countInactive = countInactive + 1;
print ('CountInactive= ' + JSON.stringify(countInactive));
}
if (active && countInactive > timesInactive) {
countInactive = 0;
active = false;
// sendMessage();
PlugOFF();
ringGreenBlue();
print('appliance finished');
}
}
function PlugOFF() {
Shelly.call(
"http.get", {
url: 'http://127.0.0.1/rpc/Switch.Set?id=0&on=false'
},
);
};
startMonitor();
Alles anzeigen