Das Skript ist dafür gemacht, auf demselben Gerät (hier Shelly Plus 1 mit AddOn), Temperaturen zu messen und ein anderes Gerät zum schalten zu beauftragen. Die URLs zeigen, dass das andere Gerät ein Shelly der ersten Generation sein soll.
Da dies nicht gut zu deinem einzig eingesetzten Gerät passt, erscheint es mir zweckmäßig, dafür die originären Schaltanweisungen zu verwenden.
Ersetze also bitte die vorhandenen Schaltanweisungen wie
Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
print('Relay(', Config.relay, ') off. Kamin temp <= ', Config.temp_min);
durch folgende. Ob dies helfen wird, weiß ich nicht. Es ist aber deinem Einsatzzweck angemessen, da hierfür kein HTTP GET gebraucht wird. Zunächst ohne eine Ausgabe.
Shelly.call("Switch.Set", {id:0, on:false}); // schaltet den Ausgang aus, zum einschalten on:true verwenden
Die obige print() Anweisung tut nur so, als ob geschaltet wurde, weil sich diese Mitteilung nicht auf eine Antwort stützt. Dafür ist eine callback Funktion zu nutzen. Nun die komplette Anweisung hierfür.
Shelly.call("Switch.Set", {id:0, on:false},
function (result, errcode, errmsg) { // anonyme Funktion als Parameter
if(errcode!==0) print("Fehler bei ausschalten ", errcode, ", ", errmsg);
else print(JSON.stringify(result), "\nAusgang ausgeschaltet");
}
);
Oder du verwendest einfach zwei Funktionen switchOff() und switchOn() dafür, was ich hiermit empfehle. Diese kannst du einfach aufrufen lassen und auch per Eingabezeile testen.
function switchOn() {
Shelly.call("Switch.Set", {id:0, on:true},
function (result, errcode, errmsg) {
if(errcode!==0) print("Fehler bei einschalten ", errcode, ", ", errmsg);
else print(JSON.stringify(result), "\nAusgang eingeschaltet");
}
);
}
function switchOff() {
Shelly.call("Switch.Set", {id:0, on:false},
function (result, errcode, errmsg) {
if(errcode!==0) print("Fehler bei ausschalten ", errcode, ", ", errmsg);
else print(JSON.stringify(result), "\nAusgang ausgeschaltet");
}
);
}
Alles anzeigen
Damit erhältst du bei Nichterfolg des Schaltens wie auch bei Erfolg passende Ausgaben, die sich nicht auf Vermutungen stützen.
Wenn du solches besser verstehen willst und Muße hast, sieh dir gelegentlich meine Skripteinführung an! Bisher existieren Teil 1 bis Teil 3.
Config.relay brauchst du nicht, weil der Plus 1 nur einen Ausgang besitzt. Wenn du unbedingt an Config.relay festhalten willst, setze diese Komponente wie folgt ein.
Shelly.call("Switch.Set", {id:Config.relay, on:false}, ...
Auch kannst du beide obige, von mir bereitgestellte Funktionen durch eine parametrierte Funktion ersetzen.
function doSwitch(on) {
Shelly.call("Switch.Set", {id:0, on:on},
function (result, errcode, errmsg) {
if(errcode!==0) print("Fehler bei " + (on ? "ein" : "aus") + "schalten ", errcode, ", ", errmsg);
else print(JSON.stringify(result), "\nAusgang " + (on ? "ein" : "aus") + "geschaltet");
}
);
}
Diese rufst du zum einschalten mit doSwitch(true) und zum ausschalten mit doSwitch(false) auf. So täte ich es.
Der Kreativität sind keine Grenzen gesetzt. 
Du kannst auch einen zweiten Parameter für die Ausgabe nutzen, wozu aber im Aufruf von Shelly.call() ein vierter Parameter und im Kopf der anonymen Funktion ebenfalls ein vierter Parameter erforderlich sind.
function doSwitch(on, msg) {
Shelly.call("Switch.Set", {id:0, on:on},
function (result, errcode, errmsg, text) {
if(errcode!==0) print("Fehler bei " + (on ? "ein" : "aus") + "schalten ", errcode, ", ", errmsg);
else print(JSON.stringify(result), "\nAusgang " + (on ? "ein" : "aus") + "geschaltet, " + text);
}, msg
);
}
Damit kannst du bspw. zum ausschalten folgenden Aufruf nutzen. Zuerst dein Codestück.
if (temp_kamin<= 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. Kamin temp <= ', Config.temp_min);
}
// ersetzen durch:
if (temp_kamin<= Config.temp_min) doSwitch(false, 'Relay(0) off. Kamin temp <= ' + Config.temp_min);
Die anderen Schaltaufträge können ebenso kurz gestaltet werden, wodurch auch das gesamte Skript kürzer, einfacher, leichter pflegbar und überschaubarer wird. 