Hallo zusammen,
ich nutze einen Shelly Plus 0-10V Dimmer um einen Leistungsdimmer zu steuern.
Ein befreundeter Informatiker hat mir dazu ein Script geschrieben.
Dieses Läuft auf einem Shelly Pro 3EM im Zählerschrank.
Dazu hätte ich 3 Fragen:
- Nach Stromverlust am Shelly Dimmer schaltet das Script den Shelly Dimmer nicht ein? Was fehlt damit er einschaltet?
- Nachdem der Shelly Dimmer Strom bekommt und das Script nicht läuft stellt er sich auf 50%
- Wäre es besser wenn das Skript auf dem Dimmer läuft oder ist das egal?
Vielen Dank und Grüße
Jörg
Code
//Solar Überschuss Regelung
//Steuerung des Kemo Lastreglers 2000W über Shelly Plus 0-10V Dimmer
//Script läuft auf Shelly Pro 3EM
let CONFIG = {
regulationTimeMS: 2 * 1000, // Zeitintervall in ms. (2 Sec.)
loadUrl: "http://192.168.178.101", // Shelly Plus 0-10V Daten auslesen
measureUrl: "http://localhost", // Shelly Plus 3EM, Daten auslesen
dimmerRegulationPointW: -50, // Zielwert der Regelung, - Überschuss
powerDeltaDimmerFactor: 20 // consumption 720W / x = dimmerPercentage per regulation step
};
let DATA = {
powerDeltaW: 0,
dimmerPercentage: 0
};
function task() {
Shelly.call("EM.GetStatus", {'id': 0},
function (response) {
if(response) {
DATA.powerDeltaW = response.total_act_power
} else {
print("Could not read powerDelta")
}
}
);
if(DATA.powerDeltaW < CONFIG.dimmerRegulationPointW) {
if(DATA.dimmerPercentage <= 95) {
DATA.dimmerPercentage += 3
; // Schrittweite der Hochregelung in %
} else {
DATA.dimmerPercentage = 100;
}
} else {
decreaseFactor = Math.abs((DATA.powerDeltaW - CONFIG.dimmerRegulationPointW) / CONFIG.powerDeltaDimmerFactor)
if(DATA.dimmerPercentage >= decreaseFactor) {
DATA.dimmerPercentage -= decreaseFactor
} else {
DATA.dimmerPercentage = 0
}
}
dimmer();
}
function dimmer() {
url = CONFIG.loadUrl + '/rpc/Light.Set?id=0&brightness=';
if (DATA.dimmerPercentage >= 1 && DATA.dimmerPercentage <= 100) {
url += DATA.dimmerPercentage;
} else {
url += 0;
}
Shelly.call(
"HTTP.GET",
{"url": url},
function (response) {
if (response && response.code && response.code === 200) {
} else {
print("Could not reach " + CONFIG.loadUrl)
}
}
);
}
/* Timer.set(period, repeat, callback[, userdata]) -> timer_handle */
Timer.set(CONFIG.regulationTimeMS,true,function(ud) { task(); }, null); //true wiederholen
Alles anzeigen
Edit by Moderator, Code in Codetag geschubst.