home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
73.38k stars 30.64k forks source link

opentherm_gw.set_hot_water_setpoint doesn't work #38078

Closed yotuze closed 3 years ago

yotuze commented 4 years ago

The problem

When I use opentherm_gw.set_hot_water_setpoint service to set a dhw temperature the state of sensor.dhw_setpoint change back after couple of seconds to previous value.

Let's say I have 39 °C DHW temperature set at my boiler, I use service to change to 40 °C, value on a sensor.dhw_setpoint change to 40 °C and after 5 seconds change back to 39 °C. This temporary change is only 'visible' on a sensor.dhw_setpoint, at the boiler display nothing change, during this 5 seconds a boiler display show 39 °C all the time.

I have De Dietrich boiler, OTGW from nodo-shop connected by WiFi and I don't use room thermostat.

Environment

probot-home-assistant[bot] commented 4 years ago

opentherm_gw documentation opentherm_gw source (message by IssueLinks)

probot-home-assistant[bot] commented 4 years ago

Hey there @mvn23, mind taking a look at this issue as its been labeled with an integration (opentherm_gw) you are listed as a codeowner for? Thanks! (message by CodeOwnersMention)

mvn23 commented 4 years ago

Thanks for the report. We'll need some additional info to track down this issue.

yotuze commented 4 years ago

I'm not able to change the dhw setpoint with otmonitor through Configuration -> Heater -> DHW Setpoint or by sending SW=temp. in Configuration -> Miscellaneous -> Free format command. Only thing that works is changing Configuration -> Heater -> Comfort setting, when I choose Comfort Mode boiler display is turned on but when I choose Thermostat controlled than boiler go in the standby mode. Bellow logs from otmonitor where you can see that value of DHW setpoint doesn't change. Only write actions are for Write-Data Maximum relative modulation level: 100.00 and Write-Data Control setpoint: 10.00 which was not send by me.

21:44:25.782302  R80000200  Read-Data   Status: 00000010 00000000
21:44:25.847332  BC0000000  Read-Ack    Status: 00000000 00000000
21:44:26.815198  R80000200  Read-Data   Status: 00000010 00000000
21:44:26.938955  BC0000000  Read-Ack    Status: 00000000 00000000
21:44:27.848594  R80190000  Read-Data   Boiler water temperature: 0.00
21:44:27.913499  B40192619  Read-Ack    Boiler water temperature: 38.10
21:44:29.082324  Command: SW=42.00
21:44:29.245425  R10010A00  Write-Data  Control setpoint: 10.00
21:44:29.310885  BD0010A00  Write-Ack   Control setpoint: 10.00
21:44:29.359130  SW: 42.00
21:44:29.885589  Command: SW=42.00
21:44:29.929983  R80380000  Read-Data   DHW setpoint: 0.00
21:44:29.980400  B40382700  Read-Ack    DHW setpoint: 39.00
21:44:30.032205  SW: 42.00
21:44:30.064971  Command: SW=42.00
21:44:30.141176  SW: 42.00
21:44:31.233504  Command: SH=75.00
21:44:31.287072  R00390000  Read-Data   Max CH water setpoint: 0.00
21:44:31.314833  BC0395050  Read-Ack    Max CH water setpoint: 80.31
21:44:31.407187  SH: 75.00
21:44:31.971838  R80000200  Read-Data   Status: 00000010 00000000
21:44:32.095640  BC0000000  Read-Ack    Status: 00000000 00000000
21:44:32.274690  Command: SH=75.00
21:44:32.407484  SH: 75.00
21:44:32.462282  Command: SH=75.00
21:44:32.532515  SH: 75.00
21:44:33.003108  R00120000  Read-Data   CH water pressure: 0.00
21:44:33.221965  B40120133  Read-Ack    CH water pressure: 1.20
21:44:34.050547  R80000200  Read-Data   Status: 00000010 00000000
21:44:34.108752  BC0000000  Read-Ack    Status: 00000000 00000000
21:44:35.061844  R80190000  Read-Data   Boiler water temperature: 0.00
21:44:35.191224  B40192619  Read-Ack    Boiler water temperature: 38.10
21:44:36.097368  R10010A00  Write-Data  Control setpoint: 10.00
21:44:36.221806  BD0010A00  Write-Ack   Control setpoint: 10.00
21:44:37.125972  R80000200  Read-Data   Status: 00000010 00000000
21:44:37.249669  BC0000000  Read-Ack    Status: 00000000 00000000
21:44:38.160788  R00110000  Read-Data   Relative modulation level: 0.00
21:44:38.221785  BC0110000  Read-Ack    Relative modulation level: 0.00
21:44:38.471358  Command: HW=0
21:44:38.546861  HW: 0
21:44:39.191033  R001B0000  Read-Data   Outside temperature: 0.00
21:44:39.251500  BC01B0F00  Read-Ack    Outside temperature: 15.00
21:44:39.333972  Command: HW=A
21:44:39.438082  HW: A
21:44:40.164925  Command: HW=1
21:44:40.205062  R801C0000  Read-Data   Return water temperature: 0.00
21:44:40.297859  HW: 1
21:44:40.357418  BC01C2633  Read-Ack    Return water temperature: 38.20
21:44:41.252158  R900E6400  Write-Data  Maximum relative modulation level: 100.00
21:44:41.316775  B500E6400  Write-Ack   Maximum relative modulation level: 100.00
21:44:42.267010  R80000200  Read-Data   Status: 00000010 00000000
21:44:42.393451  BC0000000  Read-Ack    Status: 00000000 00000000
21:44:43.313467  R80000200  Read-Data   Status: 00000010 00000000
21:44:43.375691  BC0000000  Read-Ack    Status: 00000000 00000000

Here you have more: https://pastebin.com/9viYF09u

Through HomeAssistant I can use opentherm_gw.set_control_setpoint to turn ON/OFF a CH mode (I use outside temperature sensor, so I don't need to set static temperature because boiler use heating curve to calculate heating temp. based on outside temp.) and I can use opentherm_gw.set_hot_water_ovrd to turn ON/OFF a DHW mode. I'm not sure if this logs would be helpful but if you need other type of logs, let me know how can I get them:

2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Received line 1869: R80000200
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Added line 1869 to message queue. Queue size: 1
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Processing: R 00 00 02 00
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Received line 1870: BC0000000
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Added line 1870 to message queue. Queue size: 1
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Processing: B 04 00 00 00
2020-07-23 21:10:41 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Received line 1871: R80000200
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Added line 1871 to message queue. Queue size: 1
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Processing: R 00 00 02 00
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Received line 1872: BC0000000
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Added line 1872 to message queue. Queue size: 1
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Processing: B 04 00 00 00
2020-07-23 21:10:42 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Received line 1873: R80190000
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Added line 1873 to message queue. Queue size: 1
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Processing: R 00 19 00 00
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Received line 1874: BC0192C66
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Added line 1874 to message queue. Queue size: 1
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Processing: B 04 19 2c 66
2020-07-23 21:10:43 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Received line 1875: R10010A00
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Added line 1875 to message queue. Queue size: 1
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Processing: R 01 01 0a 00
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Received line 1876: BD0010A00
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Added line 1876 to message queue. Queue size: 1
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Processing: B 05 01 0a 00
2020-07-23 21:10:44 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Received line 1877: R80380000
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Added line 1877 to message queue. Queue size: 1
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Processing: R 00 38 00 00
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Received line 1878: B40382700
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Added line 1878 to message queue. Queue size: 1
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Processing: B 04 38 27 00
2020-07-23 21:10:45 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:45 DEBUG (MainThread) [homeassistant.components.opentherm_gw] Received report: {'dhw_setpoint': 39.0, 'max_ch_setpoint': 80.3125, 'master_ch_enabled': 0, 'master_dhw_enabled': 1, 'master_cooling_enabled': 0, 'master_otc_enabled': 0, 'master_ch2_enabled': 0, 'slave_fault_indication': 0, 'slave_ch_active': 0, 'slave_dhw_active': 0, 'slave_flame_on': 0, 'slave_cooling_active': 0, 'slave_ch2_active': 0, 'slave_diagnostic_indication': 0, 'ch_water_pressure': 1.19921875, 'ch_water_temp': 44.3984375, 'control_setpoint': 10.0, 'relative_mod_level': 0.0, 'outside_temp': 16.0, 'otgw_about': 'OpenTherm Gateway 4.2.5', 'otgw_build': '17:59 20-10-2015', 'otgw_clockmhz': '4 MHz', 'otgw_mode': 'G', 'otgw_smart_pwr': 'Low power', 'otgw_thermostat_detect': 'D', 'otgw_dhw_ovrd': '1', 'otgw_setpoint_ovrd_mode': 'N', 'otgw_gpio_a': 0, 'otgw_gpio_b': 0, 'otgw_led_a': 'F', 'otgw_led_b': 'X', 'otgw_led_c': 'O', 'otgw_led_d': 'M', 'otgw_led_e': 'P', 'otgw_led_f': 'C', 'otgw_ignore_transitions': 1, 'otgw_ovrd_high_byte': 1, 'otgw_setback_temp': 16.0, 'otgw_vref': 3, 'remote_transfer_dhw': 1, 'remote_transfer_max_ch': 1, 'remote_rw_dhw': 1, 'remote_rw_max_ch': 1, 'slave_max_relative_modulation': 100.0, 'slave_max_capacity': 0, 'slave_min_mod_level': 0, 'room_setpoint': 0.0, 'room_temp': 0.0, 'dhw_temp': 0.0, 'return_water_temp': 43.3984375, 'slave_dhw_max_setp': 60, 'slave_dhw_min_setp': 35, 'slave_ch_max_setp': 80, 'slave_ch_min_setp': 25, 'burner_starts': 0, 'ch_pump_starts': 0, 'dhw_pump_starts': 0, 'dhw_burner_starts': 0, 'burner_hours': 0, 'ch_pump_hours': 0, 'dhw_pump_hours': 0, 'dhw_burner_hours': 0}
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Received line 1879: R00390000
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Added line 1879 to message queue. Queue size: 1
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Processing: R 00 39 00 00
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Received line 1880: BC0395050
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Added line 1880 to message queue. Queue size: 1
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Processing: B 04 39 50 50
2020-07-23 21:10:46 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Received line 1881: R80000200
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Added line 1881 to message queue. Queue size: 1
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Processing: R 00 00 02 00
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Received line 1882: BC0000000
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Added line 1882 to message queue. Queue size: 1
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Processing: B 04 00 00 00
2020-07-23 21:10:47 DEBUG (MainThread) [pyotgw.protocol] Watchdog timer reset!

I really appreciate your work and I hope I will be able to use this OTGW thanks to your integration. Thank you

mvn23 commented 4 years ago

If it does not work with the SW command then unfortunately it's not going to work from HA either (this command is exactly what HA is using to try and change the setpoint).

yotuze commented 4 years ago

How is this possible? Opentherm is a standard so it should be compatible with all devices? I cant set control setpoint through otmonitor but I can do it by HA so maybe there is something I could do?

mvn23 commented 4 years ago

How is this possible? Opentherm is a standard so it should be compatible with all devices? I cant set control setpoint through otmonitor but I can do it by HA so maybe there is something I could do?

Ideally, you would be correct. Unfortunately not all OpenTherm "standards" are implemented equally and not all features are always supported. HA (or actually pyotgw) is using the serial interface to control the OpenTherm Gateway, so if that does not work then unfortunately we're out of luck.

edit: Actually, I don't see any Write-Data packets associated with the hot water temperature after the command has been sent. I will check my setup soon and report back.

edit2: A quick check shows that I do indeed get Write-Data messages on the serial interface after issuing the SW command.

In your log files, I noticed the following:

21:44:25.782302  R80000200  Read-Data   Status: 00000010 00000000
21:44:25.847332  BC0000000  Read-Ack    Status: 00000000 00000000

This is your boiler not following the specification, which states:

The status exchange is a special form of conversation which should be initiated by the master by sending a READ-DATA (id=0,MasterStatus,00) message. The slave must respond with READ-ACK (id=0,MasterStatus, SlaveStatus) to send back the Slave Status information in the same single conversation.

So the fact that the second message does not have the identical Status: 00000010 part is not according the protocol specification. Incidentally, this bit is related to the dhw configuration. It should be present in the second series of flags as well (mine responds with 00000011 00000011). This is likely the reason why your gateway is not attempting to write the dhw setpoint value to the boiler: it gets information from the boiler that dhw is not supported.

andriej commented 4 years ago

Maybe it's something you need to enable at DeDietrich's side - either boiler or current thermostat connected to it?

yotuze commented 4 years ago

Maybe it's something you need to enable at DeDietrich's side - either boiler or current thermostat connected to it?

I don't use thermostat. I'm not sure what could I be changing. Boiler have position in menu OpenTherm but I can only change between 0,1,2 and 0 = Plug&Play. I've tried all 3 options but nothing changes.

It's very weird that I can change other things but not this DHW temp even though older boilers of this manufacturer can.

github-actions[bot] commented 3 years ago

There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest Home Assistant version and check if that solves the issue. Let us know if that works for you by adding a comment 👍 This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.