TADO radiator controller - switching on via API works. Switching off via AJAX doesn't work

openHabian 2, Raspberry Pi

I’m using PHP Curl to turn a TADO radiator controller on or off.

HeatingPower : 0.00 = off, 100 = on

I can PHP CURL to the API to request HEATINGPOWER is 100 and it turns on.
openhabian:8080/rest/items/Radiator_HeatingPower
with value of “0.00”

But If I try to turn it off via HEATINGPOWER 0.00 it performs the action in the log, and then a couple of seconds later it turns itself back to 100 again.

openhabian:8080/rest/items/Radiator_HeatingPower
with value of “100” gives the log…

2021-11-21 17:25:09.317 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Radiator_HeatingPower’ changed from 100.00 to 0.00
2021-11-21 17:25:13.090 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Radiator_HeatingPower’ changed from 0.00 to 100.00

…I suspected it is something to do with another value, TargetTemperature, which sets to 25 when power is turned on via the API. So I set this also to 0,
openhabian:8080/rest/items/Radiator_TargetTemperature
value = “0”
and I get the following error:

2021-11-21 17:23:38.257 [WARN ] [ado.internal.handler.TadoZoneHandler] - Could not apply HVAC change on home 85431 and zone 4: Operation updateZoneOverlay failed with error 422
org.openhab.binding.tado.internal.api.ApiException: Operation updateZoneOverlay failed with error 422
at org.openhab.binding.tado.internal.api.client.HomeApi.updateZoneOverlay(HomeApi.java:625) ~[?:?]
at org.openhab.binding.tado.internal.handler.TadoZoneHandler.setOverlay(TadoZoneHandler.java:110) ~[?:?]
at org.openhab.binding.tado.internal.TadoHvacChange.apply(TadoHvacChange.java:123) ~[?:?]
at org.openhab.binding.tado.internal.handler.TadoZoneHandler.lambda$0(TadoZoneHandler.java:303) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]

…interestingly when I set the targettemperature to min 5 up to max 25, the value changes successfully.

http://openhabian:8080/rest/items/Radiator_TargetTemperature
value = “5”
this takes the dial down to 5

Anything over or under that and I get the error.
But regardless, the heatingpower puts itself back to 100.

So I am stuck with the ability to turn the radiator on, and choose a temperature between 5 and 25, but no way to turn it off.

Also I don’t know what HVAC is - I am assuming it’s the Tado AC system, but this isnt part of the radiator thing.

There’s no command evident in your log here.

2021-11-21 17:25:09.317 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Radiator_HeatingPower’ changed from 100.00 to 0.00 <----this occured when I sent the CURL

2021-11-21 17:25:13.090 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Radiator_HeatingPower’ changed from 0.00 to 100.00 <— this occurred a few seconds later

As explained in your other thread, if you want something to happen outside openHAB then you must send a command.
If you just change an Item state, that’s all you do - change the Item state. nothing happens in the real world.
The next time the real world checks in “my status is this”, it will update the Item state again.

But it is already successfully changing the state from off to on when I post the “100” value, and I can see it being switched on.
But I now want to post a “0” value and have it switch off, but that doesnt work.

Okay, don’t send a command. I don’t know how else to put it.

Maybe you need to review what you think the parts here do? The Tado binding heatingPower is read only, according to the docs.

Thanks. I hadn’t noticed the “operationMode” parameter in that link before. That might be the solution.

No luck sadly.
I switched to using commands too, and I’m getting the exact same problem:

events.sendCommand('Radiator_HeatingPower', '0.00');

In the log file I see:

2021-11-22 20:25:41.734 [INFO ] [openhab.event.ItemCommandEvent ] - Item ‘Radiator_HeatingPower’ received command 0.00
2021-11-22 20:25:41.812 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item ‘Radiator_HeatingPower’ predicted to become 0.00
2021-11-22 20:25:41.894 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Radiator_HeatingPower’ changed from 100.00 to 0.00
2021-11-22 20:25:42.151 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Radiator_HeatingPower’ changed from 0.00 to 100.00

Other commands seem to work fine, such as
events.sendCommand('Radiator_TargetTemperature', 5');

After looking at the docs it actually says that HeatingPower is a readonly request, which is odd because you can write to it to turn it on:

events.sendCommand('Radiator_HeatingPower', '100'); works

So Tado radiators can’t be switched off with Habian? Doesn’t sound right.

An Item is just openHABs internal representation of something It’s not the real something.
You can command any Item at all. Any Item.
So you might have an Item called “Daylight”. You might link that to the Astro binding, so that Astro turns it on and off, indicating darkness.
You can even command your “Daylight” Item ON.
This will not make the sun rise.

Likewise, if the Tado binding says some channel is read only, you can send all the commands you like and nothing will happen outside of openHAB.

If you think that’s wrong, either you or the binding author have misunderstood what heatingPower is about, I couldn’t say.

I don’t know what Habian is. I suggest if you want to turn it off, you’d want an OFF command to the mode channel.