Hallo Zusammen, ich würde gerne meine erfolgreiche Implementierung der shelly trv thermostate über Plan44 script mit euch teilen. Auf diese weise könnt ihr die Temperatursteuerung in eurem Haus über den dss laufen lassen. Als kleiner Nebeneffekt habt ihr auch noch die Raumtemperatur in der App verfügbar.
Device init message:
{
"message": "init",
"protocol": "simple",
"name": "Shelly TRV – (ID202)",
"group": 48,
"output": "heatingvalve",
"dimmable": true,
"controlvalues": true,
"sensors": [
{ "sensortype": 1, "usage": 1, "hardwarename": "ambientC", "min": -20, "max": 60, "resolution": 0.1, "updateinterval": 30 },
{ "sensortype": 12, "usage": 2, "hardwarename": "valvePct", "min": 0, "max": 100, "resolution": 1, "updateinterval": 30 },
{ "sensortype": 11, "usage": 2, "hardwarename": "batteryPct", "min": 0, "max": 100, "resolution": 1, "updateinterval": 300 },
{ "sensortype": 0, "usage": 1, "hardwarename": "targetC", "min": 5, "max": 30, "resolution": 0.1, "updateinterval": 30 }
],
"alivesigninterval": 900
}
Device implementation:
`var gwip = '192.XXX.XXX.XX'; // hier die IP Adresse des Shelly Blu Gateways angeben über das der TRV gesteuert wird
var compId = 202; // Hier die ID des Shelly angeben - kann man über das Gateway herausfinden.
// --- Poll-Handler: Status alle 30s ---
on(every(30)) {
try {
var r = geturl('http://' + gwip + '/rpc/BluTrv.GetStatus?id=' + compId, 8);
var j = json(r);
if (isvalid(j['current_C'])) message('S0=' + j['current_C']);
if (isvalid(j['pos'])) message('S1=' + j['pos']);
if (isvalid(j['battery'])) message('S2=' + j['battery']);
if (isvalid(j['target_C'])) message('S3=' + j['target_C']);
} catch {
// Fehlerbehandlung - Status-Abfrage fehlgeschlagen
}
}
// --- Control -> TemperatureSetPoint Handler ---
on(message()) as m {
if (find(m, 'TemperatureSetPoint=') >= 0) {
var equalPos = find(m, '=');
var tempStr = substr(m, equalPos + 1);
var v = number(tempStr);
if (isvalid(v) && v >= 5 && v <= 30) {
var urlDirect = 'http://' + gwip + '/rpc/BluTrv.Call?id=' + compId +
'&method=TRV.SetTarget¶ms={"id":0,"target_C":' + v + '}';
geturl(urlDirect, 8);
// Kurz warten und Status abfragen für Feedback
delay(1000);
var r = geturl('http://' + gwip + '/rpc/BluTrv.GetStatus?id=' + compId, 8);
var j = json(r);
if (isvalid(j['target_C'])) message('S3=' + j['target_C']);
}
}
}