-
Autor
Dear All!
Ich habe basierend auf den Scripts von 'OSTFRIESE' und 'HighFive' versucht ein Script zu erstellen, welches mir die Solarpumpe einschaltet, wenn die Temperatur der Solaranlage größer als jene im Boiler ist. Die Temperatur der Solaranlage kommt von einem PT1000 und die Temperatur des Boilers von einem DS18B20. Der PT1000 hängt via Messwandler am Analog Eingang des Shelly Plus Add-on und der DS18B20 am digitalen Eingang. Das Add-on steckt auf einem Shelly 1 Gen3.
Wenn ich folgende Scripte laufen lasse, bekomme ich folgende Fehlermeldung: Uncaught InternalError: Too many scopes removed (ist ein Internal Interpreter Error)
Dieser Fehler tritt bei beiden Scripts jedoch nur dann auf, wenn ich den Analogeingang abfrage. Mit zwei digitalen Eingängen funktioniert das Script fehlerfrei, ebenso mit einem digitalen und einen Fixwert für temp_outside.
-> temp_outside = Shelly.getComponentStatus('Input', Config.id_outside).percent;
-> tempOutside = Shelly.getComponentStatus('Input', 100).percent;
Der analoge Wert wird am Shelly korrekt angezeigt und ebenso in der Console angezeigt
Kann mir da bitte jemand weiterhelfen.
Thx, ein777er
-------
//GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
//More information: https://www.gnu.org/licenses/gpl-3.0.txt
//ABSOLUTELY NO WARRANTY!!!
//Made by Ostfriese
//############################## Config ############################
let Config = {
temp_diff : 0.5,
temp_min : 12,
id_inside : 100,
id_outside: 100,
relay : 0,
interval : 10 // 2 seconds is the minimum interval
}
//############################## Config end ############################
function watch() {
temp_inside = Shelly.getComponentStatus('Temperature', Config.id_inside).tC;
temp_outside = Shelly.getComponentStatus('Input', Config.id_outside).percent;
//inside <= outside
if (temp_inside >= temp_outside) {
Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
print('Relay(', Config.relay, ') off. Inside temp <= ', temp_outside);
};
}
Timer.set(10000,true,watch);
-----------
/// Temperature Control Fan V1.0
////////////////////////////////////////////////////////////////////////////////////////////
///
/// Created by HighFive © 2024
///
////////////////////////////////////////////////////////////////////////////////////////////
// log = 1; // If no console log needed please set log to "0"
////////////////////////////////////////////////////////////////////////////////////////////
function timerHandler() {
////////////////////////////////////////////////////////////////////////////////////////////
///tempOutside = Shelly.getComponentStatus('Input', 100).percent; // temperatur outside
tempOutside = 70;
tempInside = Shelly.getComponentStatus('Temperature', 100).tC; // temperatur inside
log = 1;
////////////////////////////////////////////////////////////////////////////////////////////
/// Control switching fan
////////////////////////////////////////////////////////////////////////////////////////////
Shelly.call("Switch.set", {
'id': 0,
'on': ((tempOutside > tempInside))
// 'on': ((Shelly.getComponentStatus('input:100').percent) > (Shelly.getComponentStatus('Temperature', 100).tC))
});
////////////////////////////////////////////////////////////////////////////////////////////
/// All 1 second print all temperatur sensors and state of the relay to console window
////////////////////////////////////////////////////////////////////////////////////////////
if (log != 0) {
// print('Outside temperature: ', (Shelly.getComponentStatus('input:100').percent) + ' °C / Inside temperature: ' + (Shelly.getComponentStatus('Temperature', 100).tC) +
// ' °C / State fan: ' + Shelly.getComponentStatus('switch', 0).output);
print('Outside temperature: ', tempOutside + ' °C / Inside temperature: ' + tempInside +
' °C / State fan: ' + Shelly.getComponentStatus('switch', 0).output);
print('*******************************************************************************************************');
};
};
////////////////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////////////////
Timer.set(10000, true, timerHandler,null);
////////////////////////////////////////////////////////////////////////////////////////////