Hallo zusammen,
ich bin auch neu im Forum. Habe schon etliche Einträge gelesen, aber nun auch mein erster Eintrag. Ich hab zwar schon ein paar Shelly's im Einsatz, aber noch nichts per Skript.
Meine Ausgangssituation:
Shelly 1 plus mit Add-on und 3 Fühler zum Einschalten einer Pufferspeicherpumpe an einem Wärmetauscher
Aktuell schalte ich sehr kompliziert über die Solarthermie das Shelly. Würde das gerne per Differenzschalten.
Wenn Vorlauf-Solar mehr als ( 2 grad) Vorlauf Puffer schalte ein.
ostfriese
Das von dir gepostet Skript funktioniert wohl auch bei einem Shelly 1 plus, da die Werte der Fühler korrekt im Skript-log geschrieben werden.
Was aber leider dann nicht funktioniert ist, das Ansteuern des Relay.
Muss für das Shelly 1 plus was umgestellt werden.
ergänzung:
Das steht in Log des Shelly:
Temp. inside = 27.2 07:12:51
Temp. outside = 26.1 07:12:51
shelly_ejs_rpc.cpp:41 Shelly.call http.get {"url":"http://127.0.0.1//relay/0?turn=on"} 07:12:51
Relay( 0 ) on. Delta <= 3 07:12:51
07:12:51
07:12:51
shos_rpc_inst.c:230 http.get via loopback 07:12:51
shelly_http_client.:306 0x3ffe07ac: HTTP GET http://127.0.0.1//relay/0?turn=on 07:12:51
shelly_http_server.:263 No handler for '//relay/0' 07:12:51
shelly_http_client.:606 0x3ffe07ac: Finished; bytes 99, code 404, redir 0/3, auth 0, status OK
Vielen Dank schon mal.
Gruß Basti
NEUE VERSION: 25.09.2023 16:00
Hier jetzt das funktionierende Skript. Bitte mindesten FW 1.0.0 verwenden.
Danke an
@De kat fur den Hinweis auf Shelly.getComponentStatus.
In der Config:
temp_diff = zugelassene Differez (z.B. deine 2K)
temp_min = minimale Innentemperatur(z.B. deine12°C)
id_inside = Id des Innentemperaturfühlers
id_outside = Id des Außentemperaturfühlers
relay = welches Relais soll schalten 0 oder 1
interval = Messen, Auswerten und Schalten alle x Sekunden
//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: 101,
relay : 0,
interval : 10 // 2 seconds is the minimum interval
}
//############################## Config end ############################
function watch() {
try {
temp_inside = Shelly.getComponentStatus('Temperature', Config.id_inside).tC;
temp_outside = Shelly.getComponentStatus('Temperature', Config.id_outside).tC;
print('Temp. inside =',temp_inside);
print('Temp. outside =',temp_outside);
//inside <= minimum
if (temp_inside <= Config.temp_min) {
Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
print('Relay(', Config.relay, ') off. Inside temp <= ', Config.temp_min);
}
else {
delta = temp_inside - temp_outside;
//delta more than or equal Config.temp_diff
if (delta >= Config.temp_diff) {
Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=on'});
print('Relay(', Config.relay, ') on. Delta >= ', Config.temp_diff);
}
//delta less than Config.temp_diff
else {
Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
print('Relay(', Config.relay, ') off. Delta < ', Config.temp_diff);
}
}
print('\n')
} catch (err) {
Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
print(err);
}
}
function start() {
// do a first shot
watch();
// set watch timer to configured value
Timer.set(Config.interval * 1000,true,watch);
}
// schedule script start for 1 second
Timer.set(1000,false,start);
Alles anzeigen
Alles anzeigen