Op 10 mei 2023 is Thermosmart failliet verklaard. Na dit faillissement heeft Plugwise Thermosmart overgenomen en een firmware-update uitgebracht waarmee de Thermosmart-thermostaat cloud-onafhankelijk is gemaakt. Meer informatie hierover is te vinden op de website van Plugwise: https://www.plugwise.com/thermosmart/
Op dit Tweakers-forum https://gathering.tweakers.net/forum/list_messages/2093612 worden verschillende opties besproken om de Thermosmart-thermostaat alsnog aan te sturen.
Ik heb zelf (met wat hulp van AI 😀) een relatief eenvoudige oplossing gemaakt waarbij gebruik wordt gemaakt van een Shelly Plug S Gen3. Voor minder dan €25 (zie de prijsvergelijking op Tweakers: https://tweakers.net/pricewatch/2115402/shelly-plug-s-gen3-per-stuk-wit.html) is het mogelijk om, zonder afhankelijk te zijn van het wifi-netwerk, de verwarming aan en uit te zetten, de temperatuur uit te lezen en een schema in te stellen.
Hieronder leg ik stap voor stap uit hoe dit werkt. Ik hoor graag of dit voor jou ook een geschikte oplossing is, of dat je nog verbeterpunten of suggesties hebt.
Stap 1
Installeer de Plugwise-firmware op de ThermoSmart. Volg hiervoor de installatiestappen op hun website:
https://www.plugwise.com/thermosmart/
Noteer het IP-adres van de ThermoSmart; dit heb je later nodig.
Stap 2
Installeer de Shelly-app op je telefoon.
Android: https://play.google.com/store/apps/details?id=cloud.shelly.smartcontrol&hl=en
iOS: https://apps.apple.com/us/app/shelly-smart-control/id1660045967
Stap 3
Steek de slimme stekker in het stopcontact en voeg deze toe in de Shelly-app.
Stap 4
Selecteer een ruimte, geef de stekker een naam (bijvoorbeeld CV) en kies een passend pictogram.
Stap 5
Selecteer de stekker en klik in het linker menu op de optie om een script toe te voegen ({}).
Kies Create new script, geef het script een naam (bijvoorbeeld CV aan uit) en voeg onderstaande code toe.
Klik vervolgens op het opslaan-icoon en daarna op het start-icoon om het script te activeren.
Vergeet niet om Run on startup in te schakelen.
In dit voorbeeld staat kachel aan op 20 graden en kachel uit op 15 graden. Pas deze waarden gerust aan naar eigen inzicht.
// Script voor Shelly Gen3 om svset aan te passen bij Aan en Uit
Shelly.addStatusHandler(function(event) {
// We kijken alleen naar gebeurtenissen van de schakelaar (switch:0)
if (event.name === "switch" && event.id === 0) {
// Controleer of de 'output' status is veranderd
if (event.delta.hasOwnProperty("output")) {
let targetValue = event.delta.output ? "20" : "15";
console.log("Schakelaar is " + (event.delta.output ? "AAN" : "UIT") + ". Zet svset op: " + targetValue);
// Verstuur het POST request
Shelly.call(
"HTTP.POST", {
url: "http://192.168.178.136/thermostat.xml", // VERVANG DIT DOOR JOUW IP
body: "svset=" + targetValue,
header: { "Content-Type": "application/x-www-form-urlencoded" },
timeout: 10
},
);
}
}
});
Stap 6
Stel een schema in om de kachel automatisch aan en uit te schakelen. Dit doe je via het kalender-icoontje in het linker menu.
Dit is voldoende om de kachel aan te sturen. Eventueel kun je de stekker ook toevoegen aan het dashboard, zodat deze direct zichtbaar is op de startpagina van de app.
Met bovenstaande stappen is de basisconfiguratie afgerond en werkt de aansturing van de kachel. Je kunt hier stoppen als dit voor jou voldoende is.
Het is echter ook mogelijk om extra functionaliteit toe te voegen, zoals een virtuele knop. Deze knop gebruik ik om zowel de actuele temperatuur als de ingestelde temperatuur op te halen.
Als je dit ook wilt instellen, volg dan de onderstaande stappen.
Stap 7
Selecteer de stekker en klik in het linker menu op het kubus-icoontje. Ga naar het tabblad Components en klik op Create virtual component.
Kies als type Button en geef deze een naam (bijvoorbeeld Temperatuurknop).
Let goed op het ID (meestal automatisch button:200). Als hier een ander ID staat, moet je dit later aanpassen in het script.
Maak vervolgens op dezelfde manier twee extra componenten aan van het type Text en geef ze een naam. Je kan ook bijpassende icoontjes selecteren. Ook hier is het belangrijk om de IDs te controleren: in het script wordt standaard text:200 en text:201 gebruikt.
Stap 8
Ga nu naar het tabblad Group en maak een groep aan met de naam Temperatuur. En selecteer alle 3 de componenten. Selecteer daarna de optie Extract virtual group as device.
Let op: je kunt gratis één group als virtual device aanmaken.
Stap 9
Selecteer opnieuw de stekker en ga via het menu naar de optie om een script toe te voegen ({}).
Maak een tweede script aan met de naam Temperatuur. Voeg onderstaand script toe, sla het op, start het script en activeer Run on startup.
Vergeet niet:
Het IP-adres aan te passen naar dat van jouw ThermoSmart
De IDs van de virtuele componenten te controleren en indien nodig aan te passen
// CONFIGURATIE
let THERMOSTAT_URL = "http://192.168.178.136/thermostat.xml";
let BUTTON_ID = "button:200";
let TEXT_ID = "text:200";
let SET_ID = "text:201";
let temp_display = Virtual.getHandle(TEXT_ID);
let set_display = Virtual.getHandle(SET_ID);
function haalTemperatuurOp(isRetry) {
let pogingNaam = isRetry ? "Tweede poging..." : "Eerste poging...";
console.log(pogingNaam);
Shelly.call("HTTP.GET", { url: THERMOSTAT_URL, timeout: 5 }, function(res, err, msg) {
// Check of de aanroep succesvol was (err === 0) en of we een body hebben
if (err === 0 && res.body) {
let xml = res.body;
let sTag = "<temperature>";
let eTag = "</temperature>";
let start = xml.indexOf(sTag);
let end = xml.indexOf(eTag);
let sTag1 = "<setpoint>";
let eTag1 = "</setpoint>";
let start1 = xml.indexOf(sTag1);
let end1 = xml.indexOf(eTag1);
if (start !== -1 && end !== -1) {
let tempRaw = xml.substring(start + sTag.length, end).trim();
let setRaw = xml.substring(start1 + sTag1.length, end1).trim();
temp_display.setValue(tempRaw + " °C");
set_display.setValue(setRaw + " °C");
console.log("Succes: " + tempRaw + " °C");
return; // Stop hier, we zijn klaar
}
}
// Als we hier komen, is het mislukt
if (!isRetry) {
console.log("Mislukt. Retry over 1 seconde...");
Timer.set(1000, false, function() {
haalTemperatuurOp(true); // Start de retry
});
} else {
console.log("Ook tweede poging mislukt. Dashboard op error-waarde zetten.");
temp_display.setValue("xx.x °C");
set_display.setValue("xx.x °C");
}
});
}
// Event handler voor de fysieke/virtuele knop
Shelly.addEventHandler(function(event) {
if (event.component === BUTTON_ID) {
haalTemperatuurOp(false); // Start eerste poging
}
});
console.log("Script actief met retry-logica.");
Stap 10
Ga in het hoofdmenu van de app naar Home (het huisje) en open het tabblad All Scenes.
Maak twee scenes aan om de virtuele knop automatisch te activeren:
Eén scene die wordt geactiveerd bij het uitschakelen van de verwarming
Eén scene die wordt geactiveerd bij het inschakelen van de verwarming
Sla beide scenes op en activeer ze.
Stap 11
Pas nu het dashboard aan zodat beide devices zichtbaar zijn.
Na het opstarten zie je twee knoppen om de verwarming aan te sturen. De weergegeven temperatuur is de temperatuur op het moment dat de verwarming aan of uit werd gezet.
Door op de virtuele knop te klikken, wordt de actuele temperatuur opgehaald. Dit zou eventueel verder geautomatiseerd kunnen worden (bijvoorbeeld elke 5 minuten verversen), maar dat heb ik zelf niet nodig.
Als alles goed is gegaan, ziet je dashboard er nu ongeveer zo uit.
Meer technische informatie over de stekker is hier te vinden: https://shelly-api-docs.shelly.cloud/gen2/Devices/Gen3/ShellyPlugSG3/
Veel succes!!