You are re-stating how the OTGW currently works. I agree with you that it works like you said, there is no misunderstanding about this part.
I'm just trying to explain why I feel this is not natural.
But I'm only taking the point of view of a pure standalone usage, where the OTGW is the only master in the story, in that case it IS a thermostat itself actually, so I'm never "overriding anything" as I'm always the only thermostat.
There are 3 strange things for me.
- The fact that OTGW asks my boiler to change its internal CS once I stop emitting CS commands to the OTGW.
- The fact that I need to repeat CS to enable my heating (repeating CH would be more logical to me).
- The fact that in standalone mode, CH defaults to one.
1. OTGW asks boiler to set a 0 CS when stopping emitting CS commands
Oct 31 13:45:14 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Sending command 'CS=30.0'
Oct 31 13:45:14 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'CS: 30.00\r\n''
Oct 31 13:45:15 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B401A3633\r\n''
Oct 31 13:45:15 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R00210000\r\n''
Oct 31 13:45:16 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B4021002F\r\n''
Oct 31 13:45:16 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R100E1400\r\n''
Oct 31 13:45:17 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BD00E1400\r\n''
Oct 31 13:45:17 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R80130000\r\n''
Oct 31 13:45:18 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B40130000\r\n''
Oct 31 13:45:18 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R00000000\r\n''
Oct 31 13:45:19 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BC0000000\r\n''
Oct 31 13:45:19 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R80190000\r\n''
Oct 31 13:45:19 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B401937E6\r\n''
Oct 31 13:45:20 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R10011E00\r\n''
Oct 31 13:45:20 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BD0011E00\r\n''
[...]
Oct 31 13:46:49 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R00110000\r\n''
Oct 31 13:46:50 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BC0110000\r\n''
Oct 31 13:46:50 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R801A0000\r\n''
Oct 31 13:46:51 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B401A3566\r\n''
Oct 31 13:46:51 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R00210000\r\n''
Oct 31 13:46:52 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B4021002F\r\n''
Oct 31 13:46:52 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R100E1400\r\n''
Oct 31 13:46:53 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BD00E1400\r\n''
Oct 31 13:46:53 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R80130000\r\n''
Oct 31 13:46:54 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'B40130000\r\n''
Oct 31 13:46:54 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R00000000\r\n''
Oct 31 13:46:55 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BC0000000\r\n''
Oct 31 13:46:55 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R80190000\r\n''
Oct 31 13:46:56 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BC0193733\r\n''
Oct 31 13:46:56 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'R10010000\r\n''
Oct 31 13:46:57 raspi1B otgw2mqtt[9959]: otgw2mqtt.otgw - DEBUG - Received frame 'b'BD0011400\r\n''
I can make an analogy with a water tap to try to better convey what I want to say:
A tap water has two independent settings.
- Horizontally, (a kind of CS), we control the temperature of the tap
- Vertically (a kind of CH) we control whether water is flowing or not
I would find it strange if closing the tap water would always additionally reset the temperature setting all to the right.
When we close a water tap, we can keep the previous temperature setting unchanged, we can for example close it AND let it in the middle position.
(CS=40 and CH=0).
This is convenient, because, even if a closed tap set to the right seems to behave the same as a closed tap set to the middle (i.e. no water is flowing anyway), but it's not exactly the same. When an application reads the current state of the closed tap, it reads something that we never intended to set.
2. The fail safe mechanism wants us to repeat CS to maintain Central Heating enabled, instead of repeating CH
This is less important than the first issue. It's just, as a standalone-only user, I would find it more logical to repeat:
CS=40 -> Okay, CS is set to 40 but this doesn't mean we want to enable heating
CH=1 I wan to enable heating
CH=1 Yes, my program is still up, I still want the heating to be on
CH=1 Yes, I still want the heating to be on
CH=1 Yes, I still want the heating to be on
CH=1 Yes, I still want the heating to be on
[...] No News of the user for one minute, we automatically switch back to CH=0
rather than repeating a CS command.
Because the name of the command should correspond to what it's doing: CH=1 reads like "Central Heating Activated".
For me, CS and CH should be completely independent.
- CS should only choose the control point,
never turn on of turn off the heating.
- CH should only turn on or off the heating, never change the control point.
CH alone should be enough to turn on the heating, without having to repeat a CS which may be already set to the correct value.
But here, CS alone can stop the heating! (I mean if we stop issuing commands.)
What I propose (I'm only talking of the fail safe mechanism when in standalone mode), is to repeat CH commands.
Once we stop repeating it, CH will automatically become 0.
This feels natural, because, we are manipulating something meaning "Turn on the heating", and if we stop to say this, then the "heating stops".
It's the same "theme". And it has nothing to do with the CS. Don't know if I'm being clear.
3. The fact that in standalone mode, CH defaults to one when booting
I know that Central Heating won't really be activated in the current design, because if we don't emit CS commands, it doesn't heat.
But I would find it more logical that in standalone mode, CH defaults to 0. Because we are going to take control anyway, we will use CH to turn on or off the heating. And we will use CS only to change the water temperature,
not to turn on or off the heating (if we implement the change n°2 I propose).
Again, I don't know if what I said in this post has a meaning when a real thermostat is plugged in.
But if we focus in standalone mode only, this is feedback I wanted to make.
You have a more global view, with all the features and usages of the OTGW (especially the use case with 2 buses used at the same time with a real thermostat).
Maybe some things I say don't have meaning in thermostat mode. But I believe they have a meaning in standalone mode.
I know the gateway was initially not designed to be used in standalone mode, this is a feature that you added much later.