Hallo,
da ich vor Kurzem EVCC zur Einschaltung meiner Shelly Plug S Steckdose mit Überschussstrom aus meiner PV aufgesetzt habe wollte ich das Setup noch mit einem Shelly Script erweitern.
Dieses Script funktioniert laut Logs auf der Shelly auch einwandfrei:
Grundsätzlich berechnet das Script die Zeitdauer wie lange die Shelly eingeschaltet ist und resettet den Counter jeden Tag, um die tägliche Einschaltdauer an EVCC über API zu übertragen.
In weiterer Folge soll im EVCC der Rückgabewert des Shelly Scripts (Number), z.B. 120 Minuten hernehmen und nach 180 Minuten die Steckdose abschalten.
Derzeit habe ich das Problem, dass ich in der gesamten Shelly API Dokumentation keine URL finde wie ich den "Return" value aufrufen kann. Ich habe nur z.B. curl http://192.168.x.x/rpc/Script.GetStatus?id=1 gefunden. Dabei wird aber nur "{"id":1, "running":true}" zurückgegeben und nicht das Resultat.
Das Script ist noch nicht komplett fertig und auch nicht gereviewt, aber es funktioniert soweit für den Anfang.
Hättet ihr eine Idee wie ich den Returnvalue bekommen könnte?
Vielen Dank im Voraus.
Viele Grüße,
let counter = 0;
let statusBadEG = null;
let currentTime = 0;
let previousHour = "0";
previousHour = JSON.parse(previousHour);
let currentHour = 0;
let CONFIG =
{
coverControlTimer: 1 * 60 * 1000, //Script läuft alle 1 Minuten => Achtung Counter davon abhängig
};
function checkStatus() {
Shelly.call(
"http.get",
undefined,
function (response, error_code, error_message) {
statusBadEG = Shelly.getComponentStatus("switch:0").output;
currentTime = Shelly.getComponentStatus("sys").time;
currentHour = currentTime.slice(0, 2); //nur Stunden speichern
currentHour = JSON.parse(currentHour); //String to Number
if (currentHour > previousHour) //derzeitige Zeit(Stunde) > vorherige Zeit (Stunde)
{
//print("gleicher Tag; ","prev: ", previousHour, " cur: ", currentHour);
previousHour = currentHour;
}
else if (currentHour < previousHour) // neuer Tag wurde gestartet, Counter neustarten
{
//print("neuer Tag;","prev: ", previousHour, " cur: ", currentHour);
previousHour = 0;
currentHour = 0;
counter = 0;
}
else //currentHour = previousHour; keine Aktion notwendig
{
//print("keine Aenderung;","prev: ", previousHour, " cur: ", currentHour);
}
if (statusBadEG === true) //Counter erhöhen, da Heizkörper eingeschaltet ist
{
counter = counter + 1; //1 Minute dazurechnen; Zahl muss gleich wie Timerwiederholung sein
}
//print("status: ", statusBadEG);
//print("count: ", counter);
//print("--------------")
print(counter);
return counter;
}
);
}
Timer.set(
CONFIG.coverControlTimer,
true,
function (ud) {
let timestatus = checkStatus();
return timestatus;
},
null
);
Alles anzeigen