Shelly Thermostat ST1820-W driver

Hi, has anybody successfully integrated the Shelly ST1820 thermosat? I'm looking for device code if it's out there!

Thanks

1 Like

I added this to my Shelly Device Manager app (here)

I don't have one of these on hand, so I'm not able to test it verifiably, so this is just coded up based on documentation/specs for the device. All the important code HAS been tested, since Shelly devices are just a mix of various standardized components and services, such as switch, input, temperature, etc. These are all the same across all devices that use them, and I've tested the code for all of these components and services with other Shelly devices, so the majority of the code these devices would use has been tested.

Thanks Daniel, just tried the app and I'm getting some errors which seem related to an inability to find a device driver, as follows:
app:15272026-04-29 11:17:47.882
debug
Reusing existing cookie
app:15272026-04-29 11:17:47.578
error
No driver available for 192.168.1.43. Device may not have supported components.
app:15272026-04-29 11:17:47.566
debug
Reusing existing cookie
app:15272026-04-29 11:17:47.564
debug
determineDeviceDriver: no recognized components found in device status
app:15272026-04-29 11:17:47.549
info
Discovered device has input(s): 0
app:15272026-04-29 11:17:47.534
info
Discovered device has switch(es): 0
app:15272026-04-29 11:17:47.517
debug
determineDeviceDriver: deviceStatus keys=[ble, bthome, cloud, mqtt, service:0, sys, wifi, ws]
app:15272026-04-29 11:17:47.498
debug
fetchAndStoreDeviceInfo: deviceStatus keys=[ble, bthome, cloud, mqtt, service:0, sys, wifi, ws]
app:15272026-04-29 11:17:47.483
debug
fetchAndStoreDeviceInfo: deviceConfig keys=[ble, bthome, cloud, mqtt, service:0, sys, wifi, ws]
app:15272026-04-29 11:17:47.469
debug
fetchAndStoreDeviceInfo: deviceInfo keys=[app, auth_domain, auth_en, batch, fw_id, fw_sbits, gen, id, jti, jws, jwt, key, mac, model, name, slot, svc0, ver]
app:15272026-04-29 11:17:47.439
debug
fetchAndStoreDeviceInfo: supported webhook events: [boolean.change, bthomedevice.double_push, bthomedevice.long_double_push, bthomedevice.long_push, bthomedevice.long_triple_push, bthomedevice.rotate_left, bthomedevice.rotate_right, bthomedevice.single_push, bthomedevice.triple_push, bthomesensor.state_change, bthomesensor.value_change, button.double_push, button.long_push, button.single_push, button.triple_push, enum.change, number.change, object.change, text.change]
app:15272026-04-29 11:17:47.169
debug
fetchAndStoreDeviceInfo: fetching from http://192.168.1.43/rpc
app:15272026-04-29 11:17:47.141
info
Device info/driver not yet available for 192.168.1.43 — fetching now...
app:15272026-04-29 11:17:47.127
info
Creating device for 192.168.1.43
app:15272026-04-29 11:17:47.033
info
Creating device for 192.168.1.43 via config table

NB the Hubitat is 192.168.1.40, and the ST1820 is at 192.168.1.43.

Thanks
Andy

Thanks for the logs... I updated a few things. Specifically the fact that it uses "service:0" and no other components, so it never matched to any driver because there weren't other components on it. It should match up the driver to the device now. You'll need to click on "update" on both the app and driver, on the app page, to bring in version 1.0.42, which has the (hopefully) fixed driver detection working.

1 Like

Thanks Dan, the driver is now pulling in. Perhaps not an issue but the app error log is showing

I'll come back to you on the driver next.

Thanks

Andy

When I then look at the driver:

  • The 'Set Heating Setpoint' changes the setpoint on the device, but the current setpoint is not updated from the device in this field or in the Current States: Heating Setpoint field.
  • Current States: Switch or the Current States: Temperature are not updated from the device into Hubitat
  • When you try to override the switch from the commands page the error log is:

Hope you can make sense of this? Appreciate your help.

Regards
Andy

Thanks for more logs. Shelly Device Manager 1.0.43 has some updates that hopefully get everything else working. That update also includes a number of trace level logging additions on these drivers, so if there's still anything not working properly, please turn on trace level logging so I can get a better understanding of how these thermostats work.

1 Like

Hi Dan, I updated the driver, deleted the device (using the Shelly app) and recreated the instance. Rebooted the Hubitat and then tried it again (just to be sure!). Still the same issues - the setpoint command works, the on/off switch now works, but the status for setpoint, switch, humidity and measued temps are not working. The Hubitat logs show:

and I've enabled logging on the ST1820 via it's web page and info from that end is as follows:

[
{
"data": "Connected.",
"ts": 1777618254.332,
"level": 2,
"fd": 1
},
{
"seq": 183,
"ts": 1777618253.858,
"level": 2,
"data": "shelly_debug.cpp:236 Streaming logs to 192.168.1.65:51784",
"fd": 1
},
{
"seq": 184,
"ts": 1777618254.494,
"level": 2,
"data": "shos_rpc_inst.c:243 Shelly.GetComponents via SHC 34.185.185.69:6022",
"fd": 1
},
{
"seq": 185,
"ts": 1777618254.495,
"level": 2,
"data": "shos_init.c:94 New min heap free: 92084",
"fd": 1
},
{
"seq": 186,
"ts": 1777618254.598,
"level": 2,
"data": "shos_rpc_inst.c:243 Shelly.GetComponents via SHC 34.185.185.69:6022",
"fd": 1
},
{
"seq": 187,
"ts": 1777618256.553,
"level": 2,
"data": "shos_dns_sd_respond:236 ws(0x3fcc2b48): Announced ST1820-B08184F672EC any@any (fe80::b281:84ff:fef6:72ec)",
"fd": 1
},
{
"seq": 188,
"ts": 1777618256.8,
"level": 2,
"data": "shos_dns_sd_respond:236 ws(0x3fcc2b48): Announced ST1820-B08184F672EC any@any (192.168.1.43)",
"fd": 1
},
{
"seq": 189,
"ts": 1777618257.319,
"level": 2,
"data": "shos_rpc_inst.c:243 Shelly.GetStatus via HTTP_in POST 192.168.1.40:58870",
"fd": 1
},
{
"seq": 190,
"ts": 1777618270.036,
"level": 2,
"data": "shos_rpc_inst.c:243 Number.Set via HTTP_in POST 192.168.1.40:58930",
"fd": 1
},
{
"seq": 191,
"ts": 1777618270.074,
"level": 2,
"data": "shelly_notification:165 Status change of number:202: {"id":202,"value":20}",
"fd": 1
},
{
"seq": 192,
"ts": 1777618270.123,
"level": 2,
"data": "[ Tuya ] DP value changed 2 dp value 200 dp type 2 value type number",
"fd": 100
},
{
"seq": 193,
"ts": 1777618270.164,
"level": 2,
"data": "shelly_notification:165 Status change of number:202: {"id":202,"source":"sys"}",
"fd": 1
},
{
"seq": 194,
"ts": 1777618272.194,
"level": 2,
"data": "shelly_tuya.cpp:807 add 163(enum) = 4",
"fd": 1
},
{
"seq": 195,
"ts": 1777618272.196,
"level": 2,
"data": "[ Tuya ] DP value changed 163 dp value 4 dp type 4 value type number",
"fd": 100
},
{
"seq": 196,
"ts": 1777618272.281,
"level": 2,
"data": "shos_rpc_inst.c:243 Shelly.GetStatus via HTTP_in POST 192.168.1.40:58936",
"fd": 1
},
{
"seq": 197,
"ts": 1777618274.622,
"level": 2,
"data": "shos_rpc_inst.c:243 Shelly.GetStatus via HTTP_in POST 192.168.1.40:58938",
"fd": 1
},
{
"seq": 198,
"ts": 1777618299.631,
"level": 2,
"data": "[ Tuya ] DP value changed 3 dp value 222 dp type 2 value type number",
"fd": 100
},
{
"seq": 199,
"ts": 1777618299.632,
"level": 2,
"data": "[ Tuya ] DP value changed 102 dp value 45 dp type 2 value type number",
"fd": 100
},
{
"seq": 200,
"ts": 1777618299.661,
"level": 2,
"data": "shelly_notification:165 Status change of number:201: {"id":201,"value":22.2}",
"fd": 1
},
{
"seq": 201,
"ts": 1777618299.663,
"level": 2,
"data": "shelly_notification:165 Status change of number:200: {"id":200,"value":45}",
"fd": 1
},
{
"seq": 202,
"ts": 1777618299.687,
"level": 2,
"data": "shos_init.c:94 New min heap free: 89856",
"fd": 1
},
{
"seq": 203,
"ts": 1777618317.355,
"level": 2,
"data": "shos_rpc_inst.c:243 Shelly.GetStatus via HTTP_in POST 192.168.1.40:58954",
"fd": 1
}
]

FYI, 192.168.1.65 is the PC I'm checking from, and 192.168.1.40 is the Hubitat,

Hope you can make sense of this, but to my untrained eye it appears that the St1820 is reporting back parameter 201 as the measured temp, and 200 is the Humidity but the device driver is not interpreting these correctly. Similarly 202 looks like the setpoint reporting back.

Thanks, Andy

Thanks again... I put out another update with some more changes based on these logs. Give it a go and let me know!

Sorry Daniel, still not reading the status data.

Device Log:

App Log:

The web log from the ST1820 (but not in sync with the others as I hadnt started it):

Is there anything specific you want me to try and capture?

Regards

Andy

Alright, made a few more updates. Nothing specific to capture, just the full logs of each attempt. Just need logs to help narrow down exactly how these thermostats work. They use just a "service" and some virtual numbers/booleans, so they're a bit different than most every other Shelly device.

Give this new update a try and post the complete logs here again if there's still issues. Thanks!

Hi Daniel,

Fantastic progress, I can now see and have access to the attributes of the device for heatingSetpoint, humidity and temperature. These are all I need to run my app for my house heating, as I make the decision in a Hubitat to enable heating based on this data and use a PWM algorithm rather than the thermostat output switch.

However, the reported switch status in the driver is the status of whether the thermostat is enabled - the device allows for itself to be turned on or put into a sleep mode. The switch status in the driver is not reading the status of the 'heat' output relay. I'd suggest for completion of the driver it would be good to get this right.

Other areas as follows:

  • ChildlockEnabled - also works correctly
  • ThermoStat Mode - I think this is a fixed mode, so 'heat' is correct and always will be
  • antiFreezeEnabled - works correctly

So logs from the device are:
dev:11152026-05-03 20:47:02.330

info

st1820-b08184f672ec: Heating setpoint: 22.0°C

dev:11152026-05-03 20:47:02.327

trace

st1820-b08184f672ec: handleRoleUpdate: role=target_temperature, value=22, scale=C

dev:11152026-05-03 20:47:02.317

trace

st1820-b08184f672ec: distributeStatus iter: key=number:202, resolved role=target_temperature, data=[last_update_ts:1777837518, source:sys, value:22]

dev:11152026-05-03 20:47:02.315

info

st1820-b08184f672ec: Temperature: 24.0°C

dev:11152026-05-03 20:47:02.312

trace

st1820-b08184f672ec: handleRoleUpdate: role=current_temperature, value=24, scale=C

dev:11152026-05-03 20:47:02.310

trace

st1820-b08184f672ec: distributeStatus iter: key=number:201, resolved role=current_temperature, data=[last_update_ts:1777837583, source:sys, value:24]

dev:11152026-05-03 20:47:02.307

trace

st1820-b08184f672ec: handleRoleUpdate: role=current_humidity, value=48, scale=C

dev:11152026-05-03 20:47:02.305

trace

st1820-b08184f672ec: distributeStatus iter: key=number:200, resolved role=current_humidity, data=[last_update_ts:1777837583, source:sys, value:48]

dev:11152026-05-03 20:47:02.302

info

st1820-b08184f672ec: Thermostat on

dev:11152026-05-03 20:47:02.300

trace

st1820-b08184f672ec: handleRoleUpdate: role=enable, value=true, scale=C

dev:11152026-05-03 20:47:02.297

trace

st1820-b08184f672ec: distributeStatus iter: key=boolean:202, resolved role=enable, data=[last_update_ts:1777837347, source:rpc, value:true]

dev:11152026-05-03 20:47:02.295

trace

st1820-b08184f672ec: handleRoleUpdate: role=child_lock, value=false, scale=C

dev:11152026-05-03 20:47:02.292

trace

st1820-b08184f672ec: distributeStatus iter: key=boolean:201, resolved role=child_lock, data=[last_update_ts:1777661047, source:rpc, value:false]

dev:11152026-05-03 20:47:02.290

trace

st1820-b08184f672ec: handleRoleUpdate: role=anti_freeze, value=false, scale=C

dev:11152026-05-03 20:47:02.287

trace

st1820-b08184f672ec: distributeStatus iter: key=boolean:200, resolved role=anti_freeze, data=[last_update_ts:1777661447, source:rpc, value:false]

dev:11152026-05-03 20:47:02.285

trace

st1820-b08184f672ec: distributeStatus: reverseMap=[number:201:current_temperature, boolean:202:enable, number:200:current_humidity, number:202:target_temperature, boolean:200:anti_freeze, boolean:201:child_lock]

dev:11152026-05-03 20:47:02.282

trace

st1820-b08184f672ec: distributeStatus: virtualMap=[current_temperature:number:201, enable:boolean:202, current_humidity:number:200, target_temperature:number:202, anti_freeze:boolean:200, child_lock:boolean:201], serviceConfig keys=[power_down_memory, temp_range, temp_anti_freeze, temp_offset, temp_hysteresis, humidity_offset, id]

dev:11152026-05-03 20:47:02.279

trace

st1820-b08184f672ec: ensureServiceConfig: cache hit

dev:11152026-05-03 20:47:02.277

trace

st1820-b08184f672ec: ensureVirtualMap: cache hit ([current_temperature:number:201, enable:boolean:202, current_humidity:number:200, target_temperature:number:202, anti_freeze:boolean:200, child_lock:boolean:201])

dev:11152026-05-03 20:47:02.274

trace

st1820-b08184f672ec: { "distributeStatus_input": { "boolean:200": { "last_update_ts": 1777661447, "source": "rpc", "value": false }, "boolean:201": { "last_update_ts": 1777661047, "source": "rpc", "value": false }, "boolean:202": { "last_update_ts": 1777837347, "source": "rpc", "value": true }, "number:200": { "last_update_ts": 1777837583, "source": "sys", "value": 48 }, "number:201": { "last_update_ts": 1777837583, "source": "sys", "value": 24 }, "number:202": { "last_update_ts": 1777837518, "source": "sys", "value": 22 } } }

dev:11152026-05-03 20:47:02.235

trace

st1820-b08184f672ec: fetchAndDistribute: parent returned 6 status keys: [boolean:200, boolean:201, boolean:202, number:200, number:201, number:202]

dev:11152026-05-03 20:47:00.345

debug

st1820-b08184f672ec: scheduledPoll() triggered

dev:11152026-05-03 20:46:02.378

info

st1820-b08184f672ec: Heating setpoint: 22.0°C

dev:11152026-05-03 20:46:02.375

trace

st1820-b08184f672ec: handleRoleUpdate: role=target_temperature, value=22, scale=C

dev:11152026-05-03 20:46:02.373

trace

st1820-b08184f672ec: distributeStatus iter: key=number:202, resolved role=target_temperature, data=[last_update_ts:1777837518, source:sys, value:22]

dev:11152026-05-03 20:46:02.371

info

st1820-b08184f672ec: Temperature: 23.9°C

dev:11152026-05-03 20:46:02.368

trace

st1820-b08184f672ec: handleRoleUpdate: role=current_temperature, value=23.9, scale=C

dev:11152026-05-03 20:46:02.366

trace

st1820-b08184f672ec: distributeStatus iter: key=number:201, resolved role=current_temperature, data=[last_update_ts:1777837283, source:sys, value:23.9]

dev:11152026-05-03 20:46:02.363

trace

st1820-b08184f672ec: handleRoleUpdate: role=current_humidity, value=49, scale=C

dev:11152026-05-03 20:46:02.361

trace

st1820-b08184f672ec: distributeStatus iter: key=number:200, resolved role=current_humidity, data=[last_update_ts:1777837283, source:sys, value:49]

dev:11152026-05-03 20:46:02.358

info

st1820-b08184f672ec: Thermostat on

dev:11152026-05-03 20:46:02.352

trace

st1820-b08184f672ec: handleRoleUpdate: role=enable, value=true, scale=C

dev:11152026-05-03 20:46:02.349

trace

st1820-b08184f672ec: distributeStatus iter: key=boolean:202, resolved role=enable, data=[last_update_ts:1777837347, source:rpc, value:true]

dev:11152026-05-03 20:46:02.343

trace

st1820-b08184f672ec: handleRoleUpdate: role=child_lock, value=false, scale=C

dev:11152026-05-03 20:46:02.341

trace

st1820-b08184f672ec: distributeStatus iter: key=boolean:201, resolved role=child_lock, data=[last_update_ts:1777661047, source:rpc, value:false]

dev:11152026-05-03 20:46:02.338

trace

st1820-b08184f672ec: handleRoleUpdate: role=anti_freeze, value=false, scale=C

dev:11152026-05-03 20:46:02.336

trace

st1820-b08184f672ec: distributeStatus iter: key=boolean:200, resolved role=anti_freeze, data=[last_update_ts:1777661447, source:rpc, value:false]

dev:11152026-05-03 20:46:02.333

trace

st1820-b08184f672ec: distributeStatus: reverseMap=[number:201:current_temperature, boolean:202:enable, number:200:current_humidity, number:202:target_temperature, boolean:200:anti_freeze, boolean:201:child_lock]

dev:11152026-05-03 20:46:02.330

trace

st1820-b08184f672ec: distributeStatus: virtualMap=[current_temperature:number:201, enable:boolean:202, current_humidity:number:200, target_temperature:number:202, anti_freeze:boolean:200, child_lock:boolean:201], serviceConfig keys=[power_down_memory, temp_range, temp_anti_freeze, temp_offset, temp_hysteresis, humidity_offset, id]

dev:11152026-05-03 20:46:02.328

trace

st1820-b08184f672ec: ensureServiceConfig: cache hit

dev:11152026-05-03 20:46:02.325

trace

st1820-b08184f672ec: ensureVirtualMap: cache hit ([current_temperature:number:201, enable:boolean:202, current_humidity:number:200, target_temperature:number:202, anti_freeze:boolean:200, child_lock:boolean:201])

dev:11152026-05-03 20:46:02.322

trace

st1820-b08184f672ec: { "distributeStatus_input": { "boolean:200": { "last_update_ts": 1777661447, "source": "rpc", "value": false }, "boolean:201": { "last_update_ts": 1777661047, "source": "rpc", "value": false }, "boolean:202": { "last_update_ts": 1777837347, "source": "rpc", "value": true }, "number:200": { "last_update_ts": 1777837283, "source": "sys", "value": 49 }, "number:201": { "last_update_ts": 1777837283, "source": "sys", "value": 23.9 }, "number:202": { "last_update_ts": 1777837518, "source": "sys", "value": 22 } } }

dev:11152026-05-03 20:46:02.315

trace

st1820-b08184f672ec: fetchAndDistribute: parent returned 6 status keys: [boolean:200, boolean:201, boolean:202, number:200, number:201, number:202]

dev:11152026-05-03 20:46:00.366

debug

st1820-b08184f672ec: scheduledPoll() triggered

Then logs from the app:

app:15282026-05-03 21:01:02.052

debug

componentLinkedgoFetchStatus: st1820-b08184f672ec returning 6 component statuses: [boolean:200, boolean:201, boolean:202, number:200, number:201, number:202]

app:15282026-05-03 21:01:02.007

trace

componentLinkedgoFetchStatus: raw response={ "dst": "linkedgoFetchStatus", "id": 0, "result": { "cfg_rev": 39, "components": [ { "key": "ble", "status": { } }, { "attrs": { "owner": "service:0", "role": "anti_freeze" }, "key": "boolean:200", "status": { "last_update_ts": 1777838128, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "child_lock" }, "key": "boolean:201", "status": { "last_update_ts": 1777837920, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "enable" }, "key": "boolean:202", "status": { "last_update_ts": 1777837347, "source": "rpc", "value": true } }, { "key": "bthome", "status": { "errors": [ "bluetooth_disabled" ] } }, { "key": "cloud", "status": { "connected": false } }, { "key": "mqtt", "status": { "connected": false } }, { "attrs": { "owner": "service:0", "role": "current_humidity" }, "key": "number:200", "status": { "last_update_ts": 1777838123, "source": "sys", "value": 48 } }, { "attrs": { "owner": "service:0", "role": "current_temperature" }, "key": "number:201", "status": { "last_update_ts": 1777838423, "source": "sys", "value": 24.1 } }, { "attrs": { "owner": "service:0", "role": "target_temperature" }, "key": "number:202", "status": { "last_update_ts": 1777837518, "source": "sys", "value": 22 } }, { "key": "service:0", "status": { "etag": "b1e382fe2058d34efebf0847fa088284", "state": "running", "stats": { "mem": 800, "mem_peak": 960 } } }, { "key": "sys", "status": { "available_updates": { }, "btrelay_rev": 0, "cfg_rev": 39, "fs_free": 585728, "fs_size": 1048576, "kvs_rev": 0, "last_sync_ts": 1777837953, "mac": "B08184F672EC", "ram_free": 112896, "ram_min_free": 91312, "ram_size": 253116, "reset_reason": 1, "restart_required": false, "schedule_rev": 0, "time": "21:00", "unixtime": 1777838459, "uptime": 185919, "webhook_rev": 1 } }, { "key": "wifi", "status": { "rssi": -31, "ssid": "HomeLAN", "sta_ip": "192.168.1.43", "status": "got ip" } }, { "key": "ws", "status": { "connected": false } } ], "offset": 0, "total": 14 }, "src": "st1820-b08184f672ec" }

app:15282026-05-03 21:01:01.690

trace

postCommandSync returned from http://192.168.1.43/rpc: { "dst": "linkedgoFetchStatus", "id": 0, "result": { "cfg_rev": 39, "components": [ { "key": "ble", "status": { } }, { "attrs": { "owner": "service:0", "role": "anti_freeze" }, "key": "boolean:200", "status": { "last_update_ts": 1777838128, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "child_lock" }, "key": "boolean:201", "status": { "last_update_ts": 1777837920, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "enable" }, "key": "boolean:202", "status": { "last_update_ts": 1777837347, "source": "rpc", "value": true } }, { "key": "bthome", "status": { "errors": [ "bluetooth_disabled" ] } }, { "key": "cloud", "status": { "connected": false } }, { "key": "mqtt", "status": { "connected": false } }, { "attrs": { "owner": "service:0", "role": "current_humidity" }, "key": "number:200", "status": { "last_update_ts": 1777838123, "source": "sys", "value": 48 } }, { "attrs": { "owner": "service:0", "role": "current_temperature" }, "key": "number:201", "status": { "last_update_ts": 1777838423, "source": "sys", "value": 24.1 } }, { "attrs": { "owner": "service:0", "role": "target_temperature" }, "key": "number:202", "status": { "last_update_ts": 1777837518, "source": "sys", "value": 22 } }, { "key": "service:0", "status": { "etag": "b1e382fe2058d34efebf0847fa088284", "state": "running", "stats": { "mem": 800, "mem_peak": 960 } } }, { "key": "sys", "status": { "available_updates": { }, "btrelay_rev": 0, "cfg_rev": 39, "fs_free": 585728, "fs_size": 1048576, "kvs_rev": 0, "last_sync_ts": 1777837953, "mac": "B08184F672EC", "ram_free": 112896, "ram_min_free": 91312, "ram_size": 253116, "reset_reason": 1, "restart_required": false, "schedule_rev": 0, "time": "21:00", "unixtime": 1777838459, "uptime": 185919, "webhook_rev": 1 } }, { "key": "wifi", "status": { "rssi": -31, "ssid": "HomeLAN", "sta_ip": "192.168.1.43", "status": "got ip" } }, { "key": "ws", "status": { "connected": false } } ], "offset": 0, "total": 14 }, "src": "st1820-b08184f672ec" }

app:15282026-05-03 21:01:01.392

trace

postCommandSync sending to http://192.168.1.43/rpc: { "uri": "http://192.168.1.43/rpc", "contentType": "application/json", "requestContentType": "application/json", "body": { "id": 0, "src": "linkedgoFetchStatus", "method": "Shelly.GetComponents", "params": { "include": [ "status" ] } }, "timeout": 10 }

app:15282026-05-03 21:01:01.327

trace

componentLinkedgoFetchStatus: URI=http://192.168.1.43/rpc request={"id":0,"src":"linkedgoFetchStatus","method":"Shelly.GetComponents","params":{"include":["status"]}}

app:15282026-05-03 21:00:13.184

trace

watchdogProcessResults: no mDNS entries found

app:15282026-05-03 21:00:12.163

trace

watchdogProcessResults: checking for IP changes

app:15282026-05-03 21:00:03.014

debug

componentLinkedgoFetchStatus: st1820-b08184f672ec returning 6 component statuses: [boolean:200, boolean:201, boolean:202, number:200, number:201, number:202]

app:15282026-05-03 21:00:03.009

trace

componentLinkedgoFetchStatus: raw response={ "dst": "linkedgoFetchStatus", "id": 0, "result": { "cfg_rev": 39, "components": [ { "key": "ble", "status": { } }, { "attrs": { "owner": "service:0", "role": "anti_freeze" }, "key": "boolean:200", "status": { "last_update_ts": 1777838128, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "child_lock" }, "key": "boolean:201", "status": { "last_update_ts": 1777837920, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "enable" }, "key": "boolean:202", "status": { "last_update_ts": 1777837347, "source": "rpc", "value": true } }, { "key": "bthome", "status": { "errors": [ "bluetooth_disabled" ] } }, { "key": "cloud", "status": { "connected": false } }, { "key": "mqtt", "status": { "connected": false } }, { "attrs": { "owner": "service:0", "role": "current_humidity" }, "key": "number:200", "status": { "last_update_ts": 1777838123, "source": "sys", "value": 48 } }, { "attrs": { "owner": "service:0", "role": "current_temperature" }, "key": "number:201", "status": { "last_update_ts": 1777838303, "source": "sys", "value": 24.2 } }, { "attrs": { "owner": "service:0", "role": "target_temperature" }, "key": "number:202", "status": { "last_update_ts": 1777837518, "source": "sys", "value": 22 } }, { "key": "service:0", "status": { "etag": "b1e382fe2058d34efebf0847fa088284", "state": "running", "stats": { "mem": 800, "mem_peak": 960 } } }, { "key": "sys", "status": { "available_updates": { }, "btrelay_rev": 0, "cfg_rev": 39, "fs_free": 585728, "fs_size": 1048576, "kvs_rev": 0, "last_sync_ts": 1777837953, "mac": "B08184F672EC", "ram_free": 112596, "ram_min_free": 91312, "ram_size": 253092, "reset_reason": 1, "restart_required": false, "schedule_rev": 0, "time": "21:00", "unixtime": 1777838400, "uptime": 185860, "webhook_rev": 1 } }, { "key": "wifi", "status": { "rssi": -31, "ssid": "HomeLAN", "sta_ip": "192.168.1.43", "status": "got ip" } }, { "key": "ws", "status": { "connected": false } } ], "offset": 0, "total": 14 }, "src": "st1820-b08184f672ec" }

app:15282026-05-03 21:00:02.681

trace

postCommandSync returned from http://192.168.1.43/rpc: { "dst": "linkedgoFetchStatus", "id": 0, "result": { "cfg_rev": 39, "components": [ { "key": "ble", "status": { } }, { "attrs": { "owner": "service:0", "role": "anti_freeze" }, "key": "boolean:200", "status": { "last_update_ts": 1777838128, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "child_lock" }, "key": "boolean:201", "status": { "last_update_ts": 1777837920, "source": "sys", "value": false } }, { "attrs": { "owner": "service:0", "role": "enable" }, "key": "boolean:202", "status": { "last_update_ts": 1777837347, "source": "rpc", "value": true } }, { "key": "bthome", "status": { "errors": [ "bluetooth_disabled" ] } }, { "key": "cloud", "status": { "connected": false } }, { "key": "mqtt", "status": { "connected": false } }, { "attrs": { "owner": "service:0", "role": "current_humidity" }, "key": "number:200", "status": { "last_update_ts": 1777838123, "source": "sys", "value": 48 } }, { "attrs": { "owner": "service:0", "role": "current_temperature" }, "key": "number:201", "status": { "last_update_ts": 1777838303, "source": "sys", "value": 24.2 } }, { "attrs": { "owner": "service:0", "role": "target_temperature" }, "key": "number:202", "status": { "last_update_ts": 1777837518, "source": "sys", "value": 22 } }, { "key": "service:0", "status": { "etag": "b1e382fe2058d34efebf0847fa088284", "state": "running", "stats": { "mem": 800, "mem_peak": 960 } } }, { "key": "sys", "status": { "available_updates": { }, "btrelay_rev": 0, "cfg_rev": 39, "fs_free": 585728, "fs_size": 1048576, "kvs_rev": 0, "last_sync_ts": 1777837953, "mac": "B08184F672EC", "ram_free": 112596, "ram_min_free": 91312, "ram_size": 253092, "reset_reason": 1, "restart_required": false, "schedule_rev": 0, "time": "21:00", "unixtime": 1777838400, "uptime": 185860, "webhook_rev": 1 } }, { "key": "wifi", "status": { "rssi": -31, "ssid": "HomeLAN", "sta_ip": "192.168.1.43", "status": "got ip" } }, { "key": "ws", "status": { "connected": false } } ], "offset": 0, "total": 14 }, "src": "st1820-b08184f672ec" }

app:15282026-05-03 21:00:02.241

trace

postCommandSync sending to http://192.168.1.43/rpc: { "uri": "http://192.168.1.43/rpc", "contentType": "application/json", "requestContentType": "application/json", "body": { "id": 0, "src": "linkedgoFetchStatus", "method": "Shelly.GetComponents", "params": { "include": [ "status" ] } }, "timeout": 10 }

app:15282026-05-03 21:00:02.225

trace

componentLinkedgoFetchStatus: URI=http://192.168.1.43/rpc request={"id":0,"src":"linkedgoFetchStatus","method":"Shelly.GetComponents","params":{"include":["status"]}}

app:15282026-05-03 21:00:02.137

trace

Registered mDNS listener: _http._tcp

app:15282026-05-03 21:00:02.129

trace

Registered mDNS listener: _shelly._tcp

app:15282026-05-03 21:00:02.110

trace

watchdogScan: starting mDNS scan for IP changes

Then from the ST1820 device (note as I up the setpoint the output relay comes in and seems to be reported 'DP Value Changed163 - 4 seems to be output relay off, and 3 is on... or something like??

shos_rpc_inst.c:243 service.getresources via WS_in 192.168.1.65:59955
21:01:53
shos_rpc_inst.c:243 service.getinfo via WS_in 192.168.1.65:59955
21:01:53
shos_init.c:94 New min heap free: 91136
21:01:53
shelly_debug.cpp:236 Streaming logs to 192.168.1.65:52384
21:01:53
shos_rpc_inst.c:243 number.set via WS_in 192.168.1.65:59955
21:01:56
shelly_notification:165 Status change of number:202: {"id":202,"source":"rpc"}
21:01:56
shos_rpc_inst.c:243 Shelly.GetComponents via HTTP_in POST 192.168.1.40:35254
21:01:59
[ Tuya ] DP value changed 3 dp value 240 dp type 2 value type number
21:02:23
shelly_notification:165 Status change of number:201: {"id":201,"value":24}
21:02:23
[ Tuya ] DP value changed 2 dp value 250 dp type 2 value type number
21:02:38
shelly_notification:165 Status change of number:202: {"id":202,"source":"sys","value":25}
21:02:38
[ Tuya ] DP value changed 2 dp value 270 dp type 2 value type number
21:02:40
[ Tuya ] DP value changed 163 dp value 3 dp type 4 value type number
21:02:40
shelly_notification:165 Status change of number:202: {"id":202,"value":27}
21:02:40
shos_rpc_inst.c:243 Shelly.GetComponents via HTTP_in POST 192.168.1.40:35332
21:02:59
shos_rpc_inst.c:243 Shelly.GetComponents via HTTP_in POST 192.168.1.40:35424

21:03:59

[ Tuya ] DP value changed 2 dp value 230 dp type 2 value type number

21:04:05

shelly_notification:165 Status change of number:202: {"id":202,"value":23}

21:04:05

[ Tuya ] DP value changed 163 dp value 4 dp type 4 value type number

21:04:07

[ Tuya ] DP value changed 3 dp value 238 dp type 2 value type number

21:04:24

shelly_notification:165 Status change of number:201: {"id":201,"value":23.8}

21:04:24

shos_rpc_inst.c:243 Shelly.GetComponents via HTTP_in POST 192.168.1.40:35512

21:05:00

Hi Daniel,

One other thought - could you add the 'Thermostat' capability in the device driver to allow the Hubitat to see the device as a Thermostat? It makes the integration into heating schedules simpler.

Only other issue I am seeing is that after a reboot of the ST1820 the read temperature seems to freeze at the default of 20.0 degC. An intervention at the ST1820 (web or local control) then seems to allow correct data to be upated to the Hubitat. This appears to be an issue with the ST1820....

Regards

Andy

What sort of intervention? I might be able to bake that into the driver so it's automatic.

From what I can see here in logs, the actual operating state on the device isn't exposed on RPC. The driver is updated to use current_temperature vs. target_temperature using the device's own temp_hysteresis (read from Service.GetConfig , fallback 0.5 °C) to calculate the current operating state.

The other quirk with the device is that "switch" will reflect the state of the device's heat output relay, but on/off doesn't directly control that, it will instead control having the device on/in sleep mode.

Let me know what "intervention" you're doing and I'll get that plus the changes based on the latest logs and your comments put out in a new version here later today.

Hi Daniel, by intervention I mean I went onto the device's inbuilt web page and changed the setpoint. Up until then the setpoint and measured temperature reflected in the Hubitat driver status were the default values after the addition of a new device. This seems to indicate it's a device issue rather than an issue with your code or the Hubitat framework. Once comms is running it seems rock steady.

The switch status in the device code is simply reflecting whether the ST1820 is enabled or not. The device command switch ON/OFF is simply enabling the Thermostat to operate or not. As you say there's no obvious feedback of the output relay state. This doesnt worry me, as I don't need the output relay as I do my own thing to create a PWM output based on temperature difference to target, but I was offering to help get this output relay state captured if at all feasible. It sounds like it isn't.

Once again many thanks for your work,.

Regards

Andy

Hi Daniel, the driver locked up about midnight this morning. Logs as follow:


Hmm, did a reboot to see if this would kick off the communication again and the Shelly Manager app has disappeared:

So, perhaps the 'null' the driver is reporting is more to do with the parent app corrupting?

There are no longer any log entries for the app, so looks like to get this working I will need to delete the driver, reinstall the app then reinstall the driver.

PS I am running firmware version 2.5.0.126 - the latest supported release.

Regards

Andy

Hi Daniel,

I'm afraid the ST1820 has stopped communicating again at 00:17:

When I check the installed apps, again the Shelly Manager is no longer there, so definitely looks like an app issue.

Nothing in the logs of any use either:

Any thoughts?

Regards

Andy

OK, there's a new update out that should address all these issues. I put in a download sha verification. I think that perhaps you're running into some sort of file transfer issue that causes the app to improperly update. Hubitat shouldn't let it update and safely fail on the update, but maybe it's somehow failing in a way that causes it to uninstall itself.

Also put in some more fixes regarding the thermostat itself to address the issues recently described with it, as well.

Hi Daniel,

Apologies for the late update - I was away for the weekend. I'm afraid this now adds the device, reads the data once then stops working. To check this properly, I've deleted the app and driver instance, updaated the hubitat, then reloaded the app and recreated the ST1820 device. App log shows:

app:15342026-05-11 18:12:13.320

info

Unknown webhook event 'text.change' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.314

info

Unknown webhook event 'object.change' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.307

info

Unknown webhook event 'button.triple_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.300

info

Unknown webhook event 'button.single_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.294

info

Unknown webhook event 'button.long_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.287

info

Unknown webhook event 'button.double_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.280

info

Unknown webhook event 'bthomedevice.triple_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.273

info

Unknown webhook event 'bthomedevice.single_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.266

info

Unknown webhook event 'bthomedevice.rotate_right' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.259

info

Unknown webhook event 'bthomedevice.rotate_left' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.252

info

Unknown webhook event 'bthomedevice.long_triple_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.245

info

Unknown webhook event 'bthomedevice.long_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.238

info

Unknown webhook event 'bthomedevice.long_double_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:13.218

info

Unknown webhook event 'bthomedevice.double_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.720

info

════════════════════════════════════════════════════════════

app:15342026-05-11 18:12:12.715

info

✓ DEVICE CREATION COMPLETE: st1820-b08184f672ec

app:15342026-05-11 18:12:12.710

info

════════════════════════════════════════════════════════════

app:15342026-05-11 18:12:12.704

info

Reinitialization complete for 192.168.1.43

app:15342026-05-11 18:12:12.487

info

No actions required for this device

app:15342026-05-11 18:12:12.480

info

Unknown webhook event 'text.change' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.473

info

Unknown webhook event 'object.change' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.464

info

Unknown webhook event 'button.triple_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.458

info

Unknown webhook event 'button.single_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.451

info

Unknown webhook event 'button.long_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.444

info

Unknown webhook event 'button.double_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.436

info

Unknown webhook event 'bthomedevice.triple_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.429

info

Unknown webhook event 'bthomedevice.single_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.422

info

Unknown webhook event 'bthomedevice.rotate_right' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.415

info

Unknown webhook event 'bthomedevice.rotate_left' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.408

info

Unknown webhook event 'bthomedevice.long_triple_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.401

info

Unknown webhook event 'bthomedevice.long_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.394

info

Unknown webhook event 'bthomedevice.long_double_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:12.387

info

Unknown webhook event 'bthomedevice.double_push' available on st1820-b08184f672ec — not configured in webhookDefinitions

app:15342026-05-11 18:12:11.764

info

Registered auto-generated driver: ShellyDeviceManager.Shelly Linkedgo ST1820 v1.0.50 with components: [service:0]

app:15342026-05-11 18:12:11.754

info

New version: 6

app:15342026-05-11 18:12:11.750

info

Driver ID: 1946

app:15342026-05-11 18:12:11.729

info

✓ Driver updated successfully!

app:15342026-05-11 18:11:56.460

info

Driver already exists (ID: 1946), updating...

app:15342026-05-11 18:11:56.057

info

Installing/updating generated driver...

app:15342026-05-11 18:11:56.052

info

Downloaded pre-built driver 'Shelly Linkedgo ST1820' as 'Shelly Linkedgo ST1820 v1.0.50' (30181 chars)

app:15342026-05-11 18:11:55.988

info

Downloading pre-built driver from: https://raw.githubusercontent.com/ShellyUSA/Hubitat-Drivers/master/UniversalDrivers/ShellyLinkedgoST1820.groovy

app:15342026-05-11 18:11:55.977

info

Found service component: service:0

app:15342026-05-11 18:11:55.972

info

Discovered device has input(s): 0

app:15342026-05-11 18:11:55.868

info

Discovered device has switch(es): 0

app:15342026-05-11 18:11:55.591

info

Registered auto-generated driver: ShellyDeviceManager.Shelly Linkedgo ST1820 v1.0.50 with components:

app:15342026-05-11 18:11:55.583

info

New version: 5

app:15342026-05-11 18:11:55.578

info

Driver ID: 1946

app:15342026-05-11 18:11:55.557

info

✓ Driver updated successfully!

app:15342026-05-11 18:11:42.984

info

Driver already exists (ID: 1946), updating...

app:15342026-05-11 18:11:42.592

info

Installing/updating generated driver...

app:15342026-05-11 18:11:42.587

info

Downloaded pre-built driver 'Shelly Linkedgo ST1820' as 'Shelly Linkedgo ST1820 v1.0.50' (30181 chars)

app:15342026-05-11 18:11:42.514

info

Downloading pre-built driver from: https://raw.githubusercontent.com/ShellyUSA/Hubitat-Drivers/master/UniversalDrivers/ShellyLinkedgoST1820.groovy

app:15342026-05-11 18:11:42.507

info

Updating parent driver 'Shelly Linkedgo ST1820' from GitHub...

app:15342026-05-11 18:11:42.500

info

Reinitializing device at 192.168.1.43

app:15342026-05-11 18:11:42.438

info

Created device: st1820-b08184f672ec using driver Shelly Linkedgo ST1820 v1.0.50

app:15342026-05-11 18:11:41.008

info

Generation: 3

app:15342026-05-11 18:11:41.005

info

MAC: B08184F672EC

app:15342026-05-11 18:11:41.001

info

Model: S3XT-0S

app:15342026-05-11 18:11:40.997

info

IP: 192.168.1.43

app:15342026-05-11 18:11:40.993

info

Driver: Shelly Linkedgo ST1820 v1.0.50

app:15342026-05-11 18:11:40.989

info

DNI: B08184F672EC

app:15342026-05-11 18:11:40.884

info

════════════════════════════════════════════════════════════

app:15342026-05-11 18:11:40.880

info

STARTING DEVICE CREATION: st1820-b08184f672ec

app:15342026-05-11 18:11:40.875

info

════════════════════════════════════════════════════════════

app:15342026-05-11 18:11:40.850

info

Registered auto-generated driver: ShellyDeviceManager.Shelly Linkedgo ST1820 v1.0.50 with components: [service:0]

app:15342026-05-11 18:11:40.819

info

New version: 4

app:15342026-05-11 18:11:40.815

info

Driver ID: 1946

app:15342026-05-11 18:11:40.792

info

✓ Driver updated successfully!

app:15342026-05-11 18:11:19.377

info

Driver already exists (ID: 1946), updating...

app:15342026-05-11 18:11:18.614

info

Installing/updating generated driver...

app:15342026-05-11 18:11:18.596

info

Downloaded pre-built driver 'Shelly Linkedgo ST1820' as 'Shelly Linkedgo ST1820 v1.0.50' (30181 chars)

app:15342026-05-11 18:11:17.987

info

Downloading pre-built driver from: https://raw.githubusercontent.com/ShellyUSA/Hubitat-Drivers/master/UniversalDrivers/ShellyLinkedgoST1820.groovy

app:15342026-05-11 18:11:17.880

info

Found service component: service:0

app:15342026-05-11 18:11:17.863

info

Discovered device has input(s): 0

app:15342026-05-11 18:11:17.859

info

Discovered device has switch(es): 0

app:15342026-05-11 18:11:17.086

info

Device info/driver not yet available for 192.168.1.43 — fetching now...

app:15342026-05-11 18:11:17.081

info

Creating device for 192.168.1.43

app:15342026-05-11 18:11:17.053

info

Creating device for 192.168.1.43 via config table

app:15342026-05-11 18:11:05.309

info

First install detected, storing app version: 1.0.50

app:15342026-05-11 18:10:59.460

info

Checking for app updates...

app:15342026-05-11 18:10:59.435

info

Manual force update of app requested

app:15342026-05-11 18:10:38.580

debug

Reusing existing cookie

app:15342026-05-11 18:10:38.442

debug

Driver tracking initialized, currently tracking 0 drivers

app:15342026-05-11 18:10:35.698

debug

Reusing existing cookie

app:15342026-05-11 18:10:35.555

debug

App is up to date (current: 1.0.50, latest: 1.0.50)

app:15342026-05-11 18:10:35.316

info

Checking for app updates...

app:15342026-05-11 18:10:35.283

info

Manual force update of app requested

app:15342026-05-11 18:10:31.550

debug

Reusing existing cookie

app:15342026-05-11 18:10:30.463

debug

Reusing existing cookie

app:15342026-05-11 18:10:23.226

debug

Reusing existing cookie

app:15342026-05-11 18:10:22.876

debug

App is up to date (current: 1.0.50, latest: 1.0.50)

app:15342026-05-11 18:10:21.920

info

Checking for app updates...

app:15342026-05-11 18:10:21.909

info

Manual force update of app requested

app:15342026-05-11 18:10:14.238

debug

Got cookie: HUBSESSION=node05t44...

app:15342026-05-11 18:10:14.217

debug

Login response status: 200

app:15342026-05-11 18:10:13.424

debug

ShellyHelper found 5 new device(s), total: 5

app:15342026-05-11 18:10:13.420

debug

Found NEW Shelly (ShellyHelper): Garden Lights at 192.168.1.53 (gen=0, mac=048308DE89E0)

app:15342026-05-11 18:10:13.336

debug

Scheduling async device info fetch for 192.168.1.43 in 500ms

app:15342026-05-11 18:10:13.331

debug

Found NEW Shelly (ShellyHelper): st1820-b08184f672ec at 192.168.1.43 (gen=3, mac=B08184F672EC)

app:15342026-05-11 18:10:13.240

debug

Scheduling async device info fetch for 192.168.1.52 in 400ms

app:15342026-05-11 18:10:13.233

debug

Found NEW Shelly (ShellyHelper): Elec - HW Control at 192.168.1.52 (gen=2, mac=FCB467A68EE0)

app:15342026-05-11 18:10:13.125

debug

Scheduling async device info fetch for 192.168.1.51 in 300ms

app:15342026-05-11 18:10:13.121

debug

Found NEW Shelly (ShellyHelper): Gas - HW & CH control at 192.168.1.51 (gen=2, mac=A0A3B35CE614)

app:15342026-05-11 18:10:13.078

debug

Scheduling async device info fetch for 192.168.1.56 in 200ms

app:15342026-05-11 18:10:13.069

debug

Found NEW Shelly (ShellyHelper): Lamp (Table) - Kitchen at 192.168.1.56 (gen=2, mac=048308DD9514)

app:15342026-05-11 18:10:12.280

debug

startDiscovery: starting discovery for 60 seconds

Then the device log shows:
dev:11182026-05-11 18:11:42.434

error

groovy.lang.GroovyRuntimeException: Cannot read write-only property: schedule on line 180 (method installed)

dev:11182026-05-11 18:11:42.380

info

st1820-b08184f672ec: Heating setpoint: 15.0°C

dev:11182026-05-11 18:11:42.372

info

st1820-b08184f672ec: Temperature: 18.2°C

dev:11182026-05-11 18:11:42.356

info

st1820-b08184f672ec: Thermostat on

Hope you can interpret these OK.

Regards

Andy