Hallo Speedy,
Bei mir sollte eine Wlan/Bluetooth Verbindung zwischen einem Raumthermostat linked Go ST1820 und einem Shelly 1 Mini Gen3 zur Steuerung des Ventils für eine Fußbodenheizung hergestellt werden. Hier dachte ich auch, dass der ST1820 über eine Statusinformation den Schaltzustand des internen Relais weitergibt.
Es ist aber definitiv aktuell nicht möglich den Schaltzustand des Relais in irgendeiner weise abzufragen oder zu benützen. Man kann zwar z.B. die Ist/Solltemperatur und die Info abfragen ob das Thermostat eingeschaltet ist oder nicht.
Nachdem ich wegen einer räumlichen Trennung den Relaisausgang des Raumthermostat linkedGo ST1820 nicht direkt nutzen konnte habe ich ein JavaScript geschrieben das auf dem Shelly 1 Mini Gen3 läuft und die Temperatureinstellungen Ist-/Solltemperatur im ST1820 abfragt und damit das Thermostatventil der Fußbodenheizung steuert.
Bin kein JavaScript Spezialist. Aber das Skript läuft bei mir ohne Probleme.
Gruß Hermann
let URL1 = "http://ipST1820/rpc/number.getstatus?id=201"; // IP des ST1820 current_temperature
let URL2 = "http://ipST1820/rpc/number.getstatus?id=202"; // IP des ST1820 target_temperature
let current_temperature = 100; // wird fuer den ersten Durchlauf gesetz
let target_temperature = 100; // wird fuer den ersten Durchlauf gesetz
let unterschied = 0;
let temp_hysteresis = 0,1; // eine eigene Hysteresis für die Temperatur
function getTemperatureData() {
Shelly.call(
"HTTP.GET",
{
url: URL1,
timeout: 1,
},
function (result, err_code, err_msg) {
if (result) {
let data = JSON.parse(result.body);
// print(result.body);
outputStatus = data.value; // auswerten der Ist Temperatur
print("Ist Temperatur:",outputStatus, "Grad");
Shelly.emitEvent('Current', outputStatus);
} else {
print("Error:", err_code, err_msg);
}
}
);
Shelly.call(
"HTTP.GET",
{
url: URL2,
timeout: 1,
},
function (result, err_code, err_msg) {
if (result) {
let data = JSON.parse(result.body);
// print(result.body);
outputStatus = data.value; // auswerten der Soll Temperatur
print("Soll Temperatur:",outputStatus, "Grad");
Shelly.emitEvent('Target', outputStatus);
} else {
print("Error:", err_code, err_msg);
}
}
);
}
function handleTemperatureData(event) {
// print(JSON.stringify(event));
if (event.info.event == 'Current') {
current_temperature = event.info.data;
print ('Ist Temperatur: ', current_temperature);
}
if (event.info.event == 'Target') {
target_temperature = event.info.data;
print ('Soll Temperatur: ', target_temperature);
}
unterschied = target_temperature - current_temperature;
print ('Unterschied: ', unterschied );
if (target_temperature == 100 || current_temperature == 100) {
// noch keine 2 gültigen Werte
print ('Keine 2 gültigen Werte');
} else if (unterschied - temp_hysteresis > 0) {
print ('Relais einschalten');
Shelly.call("switch.set", {id:0, on:true});
}
else if (unterschied + temp_hysteresis < 0){
print ('Relais ausschalten');
Shelly.call("switch.set", {id:0, on:false});
}
}
// Event Handler für die asynchronen Rückmeldungen
Shelly.addEventHandler(handleTemperatureData);
// Die Funktion getTemperatureData wird jede 60 Sekunden aufgerufen
Timer.set(60000, true, getTemperatureData);
Alles anzeigen