esphome 2024.10.3__py3-none-any.whl → 2024.11.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. esphome/__main__.py +22 -4
  2. esphome/automation.py +29 -2
  3. esphome/components/animation/__init__.py +5 -8
  4. esphome/components/animation/animation.cpp +1 -1
  5. esphome/components/audio/__init__.py +9 -0
  6. esphome/components/audio/audio.h +21 -0
  7. esphome/components/axs15231/__init__.py +6 -0
  8. esphome/components/axs15231/touchscreen/__init__.py +36 -0
  9. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +64 -0
  10. esphome/components/axs15231/touchscreen/axs15231_touchscreen.h +27 -0
  11. esphome/components/bme68x_bsec2/__init__.py +1 -1
  12. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +50 -47
  13. esphome/components/bme68x_bsec2/bme68x_bsec2.h +0 -2
  14. esphome/components/bytebuffer/__init__.py +5 -0
  15. esphome/components/bytebuffer/bytebuffer.h +421 -0
  16. esphome/components/climate/__init__.py +14 -13
  17. esphome/components/datetime/__init__.py +3 -3
  18. esphome/components/debug/debug_esp32.cpp +16 -8
  19. esphome/components/dfplayer/dfplayer.cpp +132 -6
  20. esphome/components/dfplayer/dfplayer.h +19 -53
  21. esphome/components/display/display.cpp +142 -0
  22. esphome/components/display/display.h +7 -0
  23. esphome/components/es8311/__init__.py +0 -0
  24. esphome/components/es8311/audio_dac.py +70 -0
  25. esphome/components/es8311/es8311.cpp +227 -0
  26. esphome/components/es8311/es8311.h +135 -0
  27. esphome/components/es8311/es8311_const.h +195 -0
  28. esphome/components/esp32/boards.py +199 -1
  29. esphome/components/esp32/gpio.py +3 -1
  30. esphome/components/esp32_ble/const_esp32c6.h +7 -0
  31. esphome/components/esp32_ble_client/ble_client_base.h +1 -1
  32. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +3 -0
  33. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +2 -1
  34. esphome/components/esp32_rmt_led_strip/led_strip.cpp +2 -2
  35. esphome/components/esp32_rmt_led_strip/led_strip.h +2 -0
  36. esphome/components/esp32_rmt_led_strip/light.py +3 -1
  37. esphome/components/esp8266/gpio.py +7 -5
  38. esphome/components/ethernet/__init__.py +55 -1
  39. esphome/components/ethernet/ethernet_component.cpp +14 -1
  40. esphome/components/ethernet/ethernet_component.h +7 -1
  41. esphome/components/font/__init__.py +213 -108
  42. esphome/components/gp8403/output/__init__.py +1 -1
  43. esphome/components/host/gpio.py +6 -4
  44. esphome/components/http_request/__init__.py +12 -0
  45. esphome/components/http_request/http_request.h +65 -3
  46. esphome/components/http_request/http_request_arduino.cpp +4 -3
  47. esphome/components/http_request/http_request_idf.cpp +12 -14
  48. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  49. esphome/components/http_request/update/http_request_update.cpp +1 -1
  50. esphome/components/i2c_device/__init__.py +26 -0
  51. esphome/components/i2c_device/i2c_device.cpp +17 -0
  52. esphome/components/i2c_device/i2c_device.h +18 -0
  53. esphome/components/i2s_audio/__init__.py +1 -3
  54. esphome/components/i2s_audio/speaker/__init__.py +12 -4
  55. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +426 -200
  56. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +92 -33
  57. esphome/components/ili9xxx/display.py +5 -1
  58. esphome/components/image/__init__.py +5 -8
  59. esphome/components/image/image.cpp +14 -14
  60. esphome/components/image/image.h +20 -24
  61. esphome/components/internal_temperature/internal_temperature.cpp +51 -2
  62. esphome/components/internal_temperature/internal_temperature.h +1 -0
  63. esphome/components/ld2420/ld2420.cpp +1 -1
  64. esphome/components/libretiny/gpio.py +4 -2
  65. esphome/components/light/__init__.py +32 -1
  66. esphome/components/light/automation.py +39 -32
  67. esphome/components/light/effects.py +36 -36
  68. esphome/components/light/light_state.cpp +6 -16
  69. esphome/components/light/light_state.h +34 -0
  70. esphome/components/light/types.py +3 -1
  71. esphome/components/logger/logger_esp32.cpp +15 -0
  72. esphome/components/lvgl/__init__.py +202 -95
  73. esphome/components/lvgl/automation.py +42 -40
  74. esphome/components/lvgl/binary_sensor/__init__.py +8 -15
  75. esphome/components/lvgl/defines.py +14 -8
  76. esphome/components/lvgl/encoders.py +11 -8
  77. esphome/components/lvgl/keypads.py +77 -0
  78. esphome/components/lvgl/light/__init__.py +6 -8
  79. esphome/components/lvgl/lv_validation.py +2 -4
  80. esphome/components/lvgl/lvcode.py +3 -9
  81. esphome/components/lvgl/lvgl_esphome.cpp +210 -89
  82. esphome/components/lvgl/lvgl_esphome.h +113 -30
  83. esphome/components/lvgl/lvgl_proxy.h +17 -0
  84. esphome/components/lvgl/number/__init__.py +10 -15
  85. esphome/components/lvgl/schemas.py +4 -2
  86. esphome/components/lvgl/select/__init__.py +12 -37
  87. esphome/components/lvgl/select/lvgl_select.h +27 -33
  88. esphome/components/lvgl/sensor/__init__.py +8 -14
  89. esphome/components/lvgl/styles.py +3 -4
  90. esphome/components/lvgl/switch/__init__.py +8 -13
  91. esphome/components/lvgl/text/__init__.py +5 -6
  92. esphome/components/lvgl/text_sensor/__init__.py +15 -15
  93. esphome/components/lvgl/touchscreens.py +2 -3
  94. esphome/components/lvgl/trigger.py +7 -9
  95. esphome/components/lvgl/types.py +9 -3
  96. esphome/components/lvgl/widgets/__init__.py +32 -21
  97. esphome/components/lvgl/widgets/dropdown.py +22 -10
  98. esphome/components/lvgl/widgets/msgbox.py +6 -5
  99. esphome/components/lvgl/widgets/obj.py +4 -2
  100. esphome/components/lvgl/widgets/page.py +3 -2
  101. esphome/components/lvgl/widgets/qrcode.py +54 -0
  102. esphome/components/lvgl/widgets/roller.py +21 -14
  103. esphome/components/lvgl/widgets/tileview.py +2 -1
  104. esphome/components/max17043/__init__.py +1 -0
  105. esphome/components/max17043/automation.h +20 -0
  106. esphome/components/max17043/max17043.cpp +98 -0
  107. esphome/components/max17043/max17043.h +29 -0
  108. esphome/components/max17043/sensor.py +77 -0
  109. esphome/components/media_player/__init__.py +11 -0
  110. esphome/components/media_player/automation.h +10 -0
  111. esphome/components/media_player/media_player.cpp +4 -0
  112. esphome/components/midea/air_conditioner.cpp +17 -1
  113. esphome/components/mlx90393/sensor.py +1 -1
  114. esphome/components/modbus_controller/__init__.py +31 -1
  115. esphome/components/modbus_controller/automation.h +16 -0
  116. esphome/components/modbus_controller/const.py +2 -0
  117. esphome/components/modbus_controller/modbus_controller.cpp +14 -2
  118. esphome/components/modbus_controller/modbus_controller.h +9 -0
  119. esphome/components/mopeka_pro_check/mopeka_pro_check.cpp +40 -21
  120. esphome/components/mopeka_pro_check/mopeka_pro_check.h +9 -2
  121. esphome/components/mopeka_pro_check/sensor.py +41 -0
  122. esphome/components/mqtt/__init__.py +36 -0
  123. esphome/components/mqtt/mqtt_client.cpp +27 -3
  124. esphome/components/mqtt/mqtt_client.h +27 -2
  125. esphome/components/mqtt/mqtt_climate.cpp +4 -2
  126. esphome/components/mqtt/mqtt_component.cpp +6 -0
  127. esphome/components/mqtt/mqtt_component.h +4 -0
  128. esphome/components/mqtt/mqtt_const.h +6 -0
  129. esphome/components/online_image/online_image.cpp +2 -8
  130. esphome/components/online_image/online_image.h +2 -6
  131. esphome/components/opentherm/__init__.py +35 -9
  132. esphome/components/opentherm/binary_sensor/__init__.py +33 -0
  133. esphome/components/opentherm/const.py +11 -0
  134. esphome/components/opentherm/generate.py +142 -0
  135. esphome/components/opentherm/hub.cpp +130 -24
  136. esphome/components/opentherm/hub.h +62 -9
  137. esphome/components/opentherm/input.h +18 -0
  138. esphome/components/opentherm/input.py +51 -0
  139. esphome/components/opentherm/number/__init__.py +74 -0
  140. esphome/components/opentherm/number/number.cpp +40 -0
  141. esphome/components/opentherm/number/number.h +31 -0
  142. esphome/components/opentherm/opentherm.cpp +30 -0
  143. esphome/components/opentherm/opentherm.h +34 -2
  144. esphome/components/opentherm/opentherm_macros.h +151 -0
  145. esphome/components/opentherm/output/__init__.py +47 -0
  146. esphome/components/opentherm/output/output.cpp +18 -0
  147. esphome/components/opentherm/output/output.h +33 -0
  148. esphome/components/opentherm/schema.py +814 -0
  149. esphome/components/opentherm/sensor/__init__.py +51 -0
  150. esphome/components/opentherm/switch/__init__.py +43 -0
  151. esphome/components/opentherm/switch/switch.cpp +28 -0
  152. esphome/components/opentherm/switch/switch.h +20 -0
  153. esphome/components/opentherm/validate.py +31 -0
  154. esphome/components/pcd8544/display.py +8 -4
  155. esphome/components/prometheus/prometheus_handler.cpp +176 -14
  156. esphome/components/prometheus/prometheus_handler.h +25 -7
  157. esphome/components/qspi_amoled/display.py +1 -141
  158. esphome/components/qspi_dbi/display.py +185 -0
  159. esphome/components/qspi_dbi/models.py +64 -0
  160. esphome/components/{qspi_amoled/qspi_amoled.cpp → qspi_dbi/qspi_dbi.cpp} +95 -46
  161. esphome/components/{qspi_amoled/qspi_amoled.h → qspi_dbi/qspi_dbi.h} +26 -15
  162. esphome/components/rp2040/__init__.py +6 -3
  163. esphome/components/rp2040/gpio.py +5 -3
  164. esphome/components/rtttl/rtttl.cpp +4 -1
  165. esphome/components/rtttl/rtttl.h +1 -0
  166. esphome/components/sdl/sdl_esphome.cpp +22 -5
  167. esphome/components/sdl/sdl_esphome.h +1 -0
  168. esphome/components/sdm_meter/sdm_meter.cpp +1 -1
  169. esphome/components/sensor/__init__.py +18 -8
  170. esphome/components/sensor/filter.cpp +19 -18
  171. esphome/components/sensor/filter.h +9 -10
  172. esphome/components/sgp4x/sgp4x.cpp +40 -74
  173. esphome/components/sgp4x/sgp4x.h +5 -3
  174. esphome/components/speaker/__init__.py +51 -5
  175. esphome/components/speaker/automation.h +25 -0
  176. esphome/components/speaker/speaker.h +72 -1
  177. esphome/components/spi/__init__.py +15 -14
  178. esphome/components/spi_device/__init__.py +4 -15
  179. esphome/components/ssd1306_spi/display.py +6 -2
  180. esphome/components/ssd1322_spi/display.py +6 -2
  181. esphome/components/ssd1325_spi/display.py +6 -2
  182. esphome/components/ssd1327_spi/display.py +6 -2
  183. esphome/components/ssd1331_spi/display.py +6 -2
  184. esphome/components/ssd1351_spi/display.py +6 -2
  185. esphome/components/st7567_spi/display.py +6 -2
  186. esphome/components/st7701s/display.py +5 -1
  187. esphome/components/st7735/display.py +10 -5
  188. esphome/components/st7789v/display.py +12 -7
  189. esphome/components/statsd/statsd.cpp +2 -0
  190. esphome/components/statsd/statsd.h +2 -0
  191. esphome/components/sun/sun.h +3 -0
  192. esphome/components/tc74/__init__.py +1 -0
  193. esphome/components/tc74/sensor.py +32 -0
  194. esphome/components/tc74/tc74.cpp +68 -0
  195. esphome/components/tc74/tc74.h +28 -0
  196. esphome/components/touchscreen/__init__.py +41 -50
  197. esphome/components/touchscreen/touchscreen.h +4 -8
  198. esphome/components/tuya/fan/tuya_fan.cpp +1 -1
  199. esphome/components/udp/udp_component.cpp +6 -3
  200. esphome/components/udp/udp_component.h +4 -2
  201. esphome/components/waveshare_epaper/display.py +6 -2
  202. esphome/components/web_server/web_server.cpp +22 -0
  203. esphome/components/web_server/web_server.h +3 -0
  204. esphome/components/weikai/weikai.h +2 -2
  205. esphome/components/wifi/wifi_component.cpp +2 -2
  206. esphome/components/wifi/wifi_component_esp32_arduino.cpp +4 -4
  207. esphome/components/wifi/wifi_component_esp8266.cpp +4 -4
  208. esphome/components/wifi/wifi_component_esp_idf.cpp +2 -2
  209. esphome/components/xpt2046/touchscreen/__init__.py +7 -32
  210. esphome/config_validation.py +3 -1
  211. esphome/const.py +9 -2
  212. esphome/core/defines.h +8 -2
  213. esphome/core/helpers.cpp +32 -17
  214. esphome/core/helpers.h +32 -16
  215. esphome/core/ring_buffer.cpp +2 -2
  216. esphome/core/ring_buffer.h +2 -2
  217. esphome/dashboard/core.py +25 -0
  218. esphome/dashboard/status/mdns.py +3 -4
  219. esphome/dashboard/web_server.py +54 -19
  220. esphome/espota2.py +36 -35
  221. esphome/helpers.py +68 -16
  222. esphome/mqtt.py +9 -2
  223. esphome/storage_json.py +4 -0
  224. esphome/writer.py +7 -18
  225. esphome/zeroconf.py +8 -6
  226. {esphome-2024.10.3.dist-info → esphome-2024.11.0.dist-info}/METADATA +7 -5
  227. {esphome-2024.10.3.dist-info → esphome-2024.11.0.dist-info}/RECORD +232 -186
  228. esphome/core/bytebuffer.cpp +0 -167
  229. esphome/core/bytebuffer.h +0 -144
  230. /esphome/components/{qspi_amoled → qspi_dbi}/__init__.py +0 -0
  231. {esphome-2024.10.3.dist-info → esphome-2024.11.0.dist-info}/LICENSE +0 -0
  232. {esphome-2024.10.3.dist-info → esphome-2024.11.0.dist-info}/WHEEL +0 -0
  233. {esphome-2024.10.3.dist-info → esphome-2024.11.0.dist-info}/entry_points.txt +0 -0
  234. {esphome-2024.10.3.dist-info → esphome-2024.11.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,814 @@
1
+ # This file contains a schema for all supported sensors, binary sensors and
2
+ # inputs of the OpenTherm component.
3
+
4
+ from dataclasses import dataclass
5
+ from typing import Optional, TypeVar
6
+
7
+ from esphome.const import (
8
+ UNIT_CELSIUS,
9
+ UNIT_EMPTY,
10
+ UNIT_KILOWATT,
11
+ UNIT_MICROAMP,
12
+ UNIT_PERCENT,
13
+ UNIT_REVOLUTIONS_PER_MINUTE,
14
+ DEVICE_CLASS_COLD,
15
+ DEVICE_CLASS_CURRENT,
16
+ DEVICE_CLASS_EMPTY,
17
+ DEVICE_CLASS_HEAT,
18
+ DEVICE_CLASS_PRESSURE,
19
+ DEVICE_CLASS_PROBLEM,
20
+ DEVICE_CLASS_TEMPERATURE,
21
+ STATE_CLASS_MEASUREMENT,
22
+ STATE_CLASS_NONE,
23
+ STATE_CLASS_TOTAL_INCREASING,
24
+ )
25
+
26
+
27
+ @dataclass
28
+ class EntitySchema:
29
+ description: str
30
+ """Description of the item, based on the OpenTherm spec"""
31
+
32
+ message: str
33
+ """OpenTherm message id used to read or write the value"""
34
+
35
+ keep_updated: bool
36
+ """Whether the value should be read or write repeatedly (True) or only during
37
+ the initialization phase (False)
38
+ """
39
+
40
+ message_data: str
41
+ """Instructions on how to interpret the data in the message
42
+ - flag8_[hb|lb]_[0-7]: data is a byte of single bit flags,
43
+ this flag is set in the high (hb) or low byte (lb),
44
+ at position 0 to 7
45
+ - u8_[hb|lb]: data is an unsigned 8-bit integer,
46
+ in the high (hb) or low byte (lb)
47
+ - s8_[hb|lb]: data is an signed 8-bit integer,
48
+ in the high (hb) or low byte (lb)
49
+ - f88: data is a signed fixed point value with
50
+ 1 sign bit, 7 integer bits, 8 fractional bits
51
+ - u16: data is an unsigned 16-bit integer
52
+ - s16: data is a signed 16-bit integer
53
+ """
54
+
55
+
56
+ TSchema = TypeVar("TSchema", bound=EntitySchema)
57
+
58
+
59
+ @dataclass
60
+ class SensorSchema(EntitySchema):
61
+ accuracy_decimals: int
62
+ state_class: str
63
+ unit_of_measurement: Optional[str] = None
64
+ icon: Optional[str] = None
65
+ device_class: Optional[str] = None
66
+ disabled_by_default: bool = False
67
+
68
+
69
+ SENSORS: dict[str, SensorSchema] = {
70
+ "rel_mod_level": SensorSchema(
71
+ description="Relative modulation level",
72
+ unit_of_measurement=UNIT_PERCENT,
73
+ accuracy_decimals=2,
74
+ icon="mdi:percent",
75
+ state_class=STATE_CLASS_MEASUREMENT,
76
+ message="MODULATION_LEVEL",
77
+ keep_updated=True,
78
+ message_data="f88",
79
+ ),
80
+ "ch_pressure": SensorSchema(
81
+ description="Water pressure in CH circuit",
82
+ unit_of_measurement="bar",
83
+ accuracy_decimals=2,
84
+ device_class=DEVICE_CLASS_PRESSURE,
85
+ state_class=STATE_CLASS_MEASUREMENT,
86
+ message="CH_WATER_PRESSURE",
87
+ keep_updated=True,
88
+ message_data="f88",
89
+ ),
90
+ "dhw_flow_rate": SensorSchema(
91
+ description="Water flow rate in DHW circuit",
92
+ unit_of_measurement="l/min",
93
+ accuracy_decimals=2,
94
+ icon="mdi:waves-arrow-right",
95
+ state_class=STATE_CLASS_MEASUREMENT,
96
+ message="DHW_FLOW_RATE",
97
+ keep_updated=True,
98
+ message_data="f88",
99
+ ),
100
+ "t_boiler": SensorSchema(
101
+ description="Boiler water temperature",
102
+ unit_of_measurement=UNIT_CELSIUS,
103
+ accuracy_decimals=2,
104
+ device_class=DEVICE_CLASS_TEMPERATURE,
105
+ state_class=STATE_CLASS_MEASUREMENT,
106
+ message="FEED_TEMP",
107
+ keep_updated=True,
108
+ message_data="f88",
109
+ ),
110
+ "t_dhw": SensorSchema(
111
+ description="DHW temperature",
112
+ unit_of_measurement=UNIT_CELSIUS,
113
+ accuracy_decimals=2,
114
+ device_class=DEVICE_CLASS_TEMPERATURE,
115
+ state_class=STATE_CLASS_MEASUREMENT,
116
+ message="DHW_TEMP",
117
+ keep_updated=True,
118
+ message_data="f88",
119
+ ),
120
+ "t_outside": SensorSchema(
121
+ description="Outside temperature",
122
+ unit_of_measurement=UNIT_CELSIUS,
123
+ accuracy_decimals=2,
124
+ device_class=DEVICE_CLASS_TEMPERATURE,
125
+ state_class=STATE_CLASS_MEASUREMENT,
126
+ message="OUTSIDE_TEMP",
127
+ keep_updated=True,
128
+ message_data="f88",
129
+ ),
130
+ "t_ret": SensorSchema(
131
+ description="Return water temperature",
132
+ unit_of_measurement=UNIT_CELSIUS,
133
+ accuracy_decimals=2,
134
+ device_class=DEVICE_CLASS_TEMPERATURE,
135
+ state_class=STATE_CLASS_MEASUREMENT,
136
+ message="RETURN_WATER_TEMP",
137
+ keep_updated=True,
138
+ message_data="f88",
139
+ ),
140
+ "t_storage": SensorSchema(
141
+ description="Solar storage temperature",
142
+ unit_of_measurement=UNIT_CELSIUS,
143
+ accuracy_decimals=2,
144
+ device_class=DEVICE_CLASS_TEMPERATURE,
145
+ state_class=STATE_CLASS_MEASUREMENT,
146
+ message="SOLAR_STORE_TEMP",
147
+ keep_updated=True,
148
+ message_data="f88",
149
+ ),
150
+ "t_collector": SensorSchema(
151
+ description="Solar collector temperature",
152
+ unit_of_measurement=UNIT_CELSIUS,
153
+ accuracy_decimals=0,
154
+ device_class=DEVICE_CLASS_TEMPERATURE,
155
+ state_class=STATE_CLASS_MEASUREMENT,
156
+ message="SOLAR_COLLECT_TEMP",
157
+ keep_updated=True,
158
+ message_data="s16",
159
+ ),
160
+ "t_flow_ch2": SensorSchema(
161
+ description="Flow water temperature CH2 circuit",
162
+ unit_of_measurement=UNIT_CELSIUS,
163
+ accuracy_decimals=2,
164
+ device_class=DEVICE_CLASS_TEMPERATURE,
165
+ state_class=STATE_CLASS_MEASUREMENT,
166
+ message="FEED_TEMP_CH2",
167
+ keep_updated=True,
168
+ message_data="f88",
169
+ ),
170
+ "t_dhw2": SensorSchema(
171
+ description="Domestic hot water temperature 2",
172
+ unit_of_measurement=UNIT_CELSIUS,
173
+ accuracy_decimals=2,
174
+ device_class=DEVICE_CLASS_TEMPERATURE,
175
+ state_class=STATE_CLASS_MEASUREMENT,
176
+ message="DHW2_TEMP",
177
+ keep_updated=True,
178
+ message_data="f88",
179
+ ),
180
+ "t_exhaust": SensorSchema(
181
+ description="Boiler exhaust temperature",
182
+ unit_of_measurement=UNIT_CELSIUS,
183
+ accuracy_decimals=0,
184
+ device_class=DEVICE_CLASS_TEMPERATURE,
185
+ state_class=STATE_CLASS_MEASUREMENT,
186
+ message="EXHAUST_TEMP",
187
+ keep_updated=True,
188
+ message_data="s16",
189
+ ),
190
+ "fan_speed": SensorSchema(
191
+ description="Boiler fan speed",
192
+ unit_of_measurement=UNIT_REVOLUTIONS_PER_MINUTE,
193
+ accuracy_decimals=0,
194
+ icon="mdi:fan",
195
+ device_class=DEVICE_CLASS_EMPTY,
196
+ state_class=STATE_CLASS_MEASUREMENT,
197
+ message="FAN_SPEED",
198
+ keep_updated=True,
199
+ message_data="u8_lb_60",
200
+ ),
201
+ "fan_speed_setpoint": SensorSchema(
202
+ description="Boiler fan speed setpoint",
203
+ unit_of_measurement=UNIT_REVOLUTIONS_PER_MINUTE,
204
+ accuracy_decimals=0,
205
+ icon="mdi:fan",
206
+ device_class=DEVICE_CLASS_EMPTY,
207
+ state_class=STATE_CLASS_MEASUREMENT,
208
+ message="FAN_SPEED",
209
+ keep_updated=True,
210
+ message_data="u8_hb_60",
211
+ ),
212
+ "flame_current": SensorSchema(
213
+ description="Boiler flame current",
214
+ unit_of_measurement=UNIT_MICROAMP,
215
+ accuracy_decimals=0,
216
+ device_class=DEVICE_CLASS_CURRENT,
217
+ state_class=STATE_CLASS_MEASUREMENT,
218
+ message="FLAME_CURRENT",
219
+ keep_updated=True,
220
+ message_data="f88",
221
+ ),
222
+ "burner_starts": SensorSchema(
223
+ description="Number of starts burner",
224
+ accuracy_decimals=0,
225
+ icon="mdi:gas-burner",
226
+ state_class=STATE_CLASS_TOTAL_INCREASING,
227
+ message="BURNER_STARTS",
228
+ keep_updated=True,
229
+ message_data="u16",
230
+ ),
231
+ "ch_pump_starts": SensorSchema(
232
+ description="Number of starts CH pump",
233
+ accuracy_decimals=0,
234
+ icon="mdi:pump",
235
+ state_class=STATE_CLASS_TOTAL_INCREASING,
236
+ message="CH_PUMP_STARTS",
237
+ keep_updated=True,
238
+ message_data="u16",
239
+ ),
240
+ "dhw_pump_valve_starts": SensorSchema(
241
+ description="Number of starts DHW pump/valve",
242
+ accuracy_decimals=0,
243
+ icon="mdi:water-pump",
244
+ state_class=STATE_CLASS_TOTAL_INCREASING,
245
+ message="DHW_PUMP_STARTS",
246
+ keep_updated=True,
247
+ message_data="u16",
248
+ ),
249
+ "dhw_burner_starts": SensorSchema(
250
+ description="Number of starts burner during DHW mode",
251
+ accuracy_decimals=0,
252
+ icon="mdi:gas-burner",
253
+ state_class=STATE_CLASS_TOTAL_INCREASING,
254
+ message="DHW_BURNER_STARTS",
255
+ keep_updated=True,
256
+ message_data="u16",
257
+ ),
258
+ "burner_operation_hours": SensorSchema(
259
+ description="Number of hours that burner is in operation",
260
+ accuracy_decimals=0,
261
+ icon="mdi:clock-outline",
262
+ state_class=STATE_CLASS_TOTAL_INCREASING,
263
+ message="BURNER_HOURS",
264
+ keep_updated=True,
265
+ message_data="u16",
266
+ ),
267
+ "ch_pump_operation_hours": SensorSchema(
268
+ description="Number of hours that CH pump has been running",
269
+ accuracy_decimals=0,
270
+ icon="mdi:clock-outline",
271
+ state_class=STATE_CLASS_TOTAL_INCREASING,
272
+ message="CH_PUMP_HOURS",
273
+ keep_updated=True,
274
+ message_data="u16",
275
+ ),
276
+ "dhw_pump_valve_operation_hours": SensorSchema(
277
+ description="Number of hours that DHW pump has been running or DHW valve has been opened",
278
+ accuracy_decimals=0,
279
+ icon="mdi:clock-outline",
280
+ state_class=STATE_CLASS_TOTAL_INCREASING,
281
+ message="DHW_PUMP_HOURS",
282
+ keep_updated=True,
283
+ message_data="u16",
284
+ ),
285
+ "dhw_burner_operation_hours": SensorSchema(
286
+ description="Number of hours that burner is in operation during DHW mode",
287
+ accuracy_decimals=0,
288
+ icon="mdi:clock-outline",
289
+ state_class=STATE_CLASS_TOTAL_INCREASING,
290
+ message="DHW_BURNER_HOURS",
291
+ keep_updated=True,
292
+ message_data="u16",
293
+ ),
294
+ "t_dhw_set_ub": SensorSchema(
295
+ description="Upper bound for adjustment of DHW setpoint",
296
+ unit_of_measurement=UNIT_CELSIUS,
297
+ accuracy_decimals=0,
298
+ device_class=DEVICE_CLASS_TEMPERATURE,
299
+ state_class=STATE_CLASS_MEASUREMENT,
300
+ message="DHW_BOUNDS",
301
+ keep_updated=False,
302
+ message_data="s8_hb",
303
+ ),
304
+ "t_dhw_set_lb": SensorSchema(
305
+ description="Lower bound for adjustment of DHW setpoint",
306
+ unit_of_measurement=UNIT_CELSIUS,
307
+ accuracy_decimals=0,
308
+ device_class=DEVICE_CLASS_TEMPERATURE,
309
+ state_class=STATE_CLASS_MEASUREMENT,
310
+ message="DHW_BOUNDS",
311
+ keep_updated=False,
312
+ message_data="s8_lb",
313
+ ),
314
+ "max_t_set_ub": SensorSchema(
315
+ description="Upper bound for adjustment of max CH setpoint",
316
+ unit_of_measurement=UNIT_CELSIUS,
317
+ accuracy_decimals=0,
318
+ device_class=DEVICE_CLASS_TEMPERATURE,
319
+ state_class=STATE_CLASS_MEASUREMENT,
320
+ message="CH_BOUNDS",
321
+ keep_updated=False,
322
+ message_data="s8_hb",
323
+ ),
324
+ "max_t_set_lb": SensorSchema(
325
+ description="Lower bound for adjustment of max CH setpoint",
326
+ unit_of_measurement=UNIT_CELSIUS,
327
+ accuracy_decimals=0,
328
+ device_class=DEVICE_CLASS_TEMPERATURE,
329
+ state_class=STATE_CLASS_MEASUREMENT,
330
+ message="CH_BOUNDS",
331
+ keep_updated=False,
332
+ message_data="s8_lb",
333
+ ),
334
+ "t_dhw_set": SensorSchema(
335
+ description="Domestic hot water temperature setpoint",
336
+ unit_of_measurement=UNIT_CELSIUS,
337
+ accuracy_decimals=2,
338
+ device_class=DEVICE_CLASS_TEMPERATURE,
339
+ state_class=STATE_CLASS_MEASUREMENT,
340
+ message="DHW_SETPOINT",
341
+ keep_updated=True,
342
+ message_data="f88",
343
+ ),
344
+ "max_t_set": SensorSchema(
345
+ description="Maximum allowable CH water setpoint",
346
+ unit_of_measurement=UNIT_CELSIUS,
347
+ accuracy_decimals=2,
348
+ device_class=DEVICE_CLASS_TEMPERATURE,
349
+ state_class=STATE_CLASS_MEASUREMENT,
350
+ message="MAX_CH_SETPOINT",
351
+ keep_updated=True,
352
+ message_data="f88",
353
+ ),
354
+ "oem_fault_code": SensorSchema(
355
+ description="OEM fault code",
356
+ unit_of_measurement=UNIT_EMPTY,
357
+ accuracy_decimals=0,
358
+ state_class=STATE_CLASS_NONE,
359
+ message="FAULT_FLAGS",
360
+ keep_updated=True,
361
+ message_data="u8_lb",
362
+ ),
363
+ "oem_diagnostic_code": SensorSchema(
364
+ description="OEM diagnostic code",
365
+ unit_of_measurement=UNIT_EMPTY,
366
+ accuracy_decimals=0,
367
+ state_class=STATE_CLASS_NONE,
368
+ message="OEM_DIAGNOSTIC",
369
+ keep_updated=True,
370
+ message_data="u16",
371
+ ),
372
+ "max_capacity": SensorSchema(
373
+ description="Maximum boiler capacity (KW)",
374
+ unit_of_measurement=UNIT_KILOWATT,
375
+ accuracy_decimals=0,
376
+ state_class=STATE_CLASS_MEASUREMENT,
377
+ disabled_by_default=True,
378
+ message="MAX_BOILER_CAPACITY",
379
+ keep_updated=False,
380
+ message_data="u8_hb",
381
+ ),
382
+ "min_mod_level": SensorSchema(
383
+ description="Minimum modulation level",
384
+ unit_of_measurement=UNIT_PERCENT,
385
+ accuracy_decimals=0,
386
+ icon="mdi:percent",
387
+ disabled_by_default=True,
388
+ state_class=STATE_CLASS_MEASUREMENT,
389
+ message="MAX_BOILER_CAPACITY",
390
+ keep_updated=False,
391
+ message_data="u8_lb",
392
+ ),
393
+ "opentherm_version_device": SensorSchema(
394
+ description="Version of OpenTherm implemented by device",
395
+ unit_of_measurement=UNIT_EMPTY,
396
+ accuracy_decimals=0,
397
+ state_class=STATE_CLASS_NONE,
398
+ disabled_by_default=True,
399
+ message="OT_VERSION_DEVICE",
400
+ keep_updated=False,
401
+ message_data="f88",
402
+ ),
403
+ "device_type": SensorSchema(
404
+ description="Device product type",
405
+ unit_of_measurement=UNIT_EMPTY,
406
+ accuracy_decimals=0,
407
+ state_class=STATE_CLASS_NONE,
408
+ disabled_by_default=True,
409
+ message="VERSION_DEVICE",
410
+ keep_updated=False,
411
+ message_data="u8_hb",
412
+ ),
413
+ "device_version": SensorSchema(
414
+ description="Device product version",
415
+ unit_of_measurement=UNIT_EMPTY,
416
+ accuracy_decimals=0,
417
+ state_class=STATE_CLASS_NONE,
418
+ disabled_by_default=True,
419
+ message="VERSION_DEVICE",
420
+ keep_updated=False,
421
+ message_data="u8_lb",
422
+ ),
423
+ "device_id": SensorSchema(
424
+ description="Device ID code",
425
+ unit_of_measurement=UNIT_EMPTY,
426
+ accuracy_decimals=0,
427
+ state_class=STATE_CLASS_NONE,
428
+ disabled_by_default=True,
429
+ message="DEVICE_CONFIG",
430
+ keep_updated=False,
431
+ message_data="u8_lb",
432
+ ),
433
+ "otc_hc_ratio_ub": SensorSchema(
434
+ description="OTC heat curve ratio upper bound",
435
+ unit_of_measurement=UNIT_EMPTY,
436
+ accuracy_decimals=0,
437
+ state_class=STATE_CLASS_NONE,
438
+ disabled_by_default=True,
439
+ message="OTC_CURVE_BOUNDS",
440
+ keep_updated=False,
441
+ message_data="u8_hb",
442
+ ),
443
+ "otc_hc_ratio_lb": SensorSchema(
444
+ description="OTC heat curve ratio lower bound",
445
+ unit_of_measurement=UNIT_EMPTY,
446
+ accuracy_decimals=0,
447
+ state_class=STATE_CLASS_NONE,
448
+ disabled_by_default=True,
449
+ message="OTC_CURVE_BOUNDS",
450
+ keep_updated=False,
451
+ message_data="u8_lb",
452
+ ),
453
+ }
454
+
455
+
456
+ @dataclass
457
+ class BinarySensorSchema(EntitySchema):
458
+ icon: Optional[str] = None
459
+ device_class: Optional[str] = None
460
+
461
+
462
+ BINARY_SENSORS: dict[str, BinarySensorSchema] = {
463
+ "fault_indication": BinarySensorSchema(
464
+ description="Status: Fault indication",
465
+ device_class=DEVICE_CLASS_PROBLEM,
466
+ message="STATUS",
467
+ keep_updated=True,
468
+ message_data="flag8_lb_0",
469
+ ),
470
+ "ch_active": BinarySensorSchema(
471
+ description="Status: Central Heating active",
472
+ device_class=DEVICE_CLASS_HEAT,
473
+ icon="mdi:radiator",
474
+ message="STATUS",
475
+ keep_updated=True,
476
+ message_data="flag8_lb_1",
477
+ ),
478
+ "dhw_active": BinarySensorSchema(
479
+ description="Status: Domestic Hot Water active",
480
+ device_class=DEVICE_CLASS_HEAT,
481
+ icon="mdi:faucet",
482
+ message="STATUS",
483
+ keep_updated=True,
484
+ message_data="flag8_lb_2",
485
+ ),
486
+ "flame_on": BinarySensorSchema(
487
+ description="Status: Flame on",
488
+ device_class=DEVICE_CLASS_HEAT,
489
+ icon="mdi:fire",
490
+ message="STATUS",
491
+ keep_updated=True,
492
+ message_data="flag8_lb_3",
493
+ ),
494
+ "cooling_active": BinarySensorSchema(
495
+ description="Status: Cooling active",
496
+ device_class=DEVICE_CLASS_COLD,
497
+ message="STATUS",
498
+ keep_updated=True,
499
+ message_data="flag8_lb_4",
500
+ ),
501
+ "ch2_active": BinarySensorSchema(
502
+ description="Status: Central Heating 2 active",
503
+ device_class=DEVICE_CLASS_HEAT,
504
+ icon="mdi:radiator",
505
+ message="STATUS",
506
+ keep_updated=True,
507
+ message_data="flag8_lb_5",
508
+ ),
509
+ "diagnostic_indication": BinarySensorSchema(
510
+ description="Status: Diagnostic event",
511
+ device_class=DEVICE_CLASS_PROBLEM,
512
+ message="STATUS",
513
+ keep_updated=True,
514
+ message_data="flag8_lb_6",
515
+ ),
516
+ "electricity_production": BinarySensorSchema(
517
+ description="Status: Electricity production",
518
+ device_class=DEVICE_CLASS_PROBLEM,
519
+ message="STATUS",
520
+ keep_updated=True,
521
+ message_data="flag8_lb_7",
522
+ ),
523
+ "dhw_present": BinarySensorSchema(
524
+ description="Configuration: DHW present",
525
+ message="DEVICE_CONFIG",
526
+ keep_updated=False,
527
+ message_data="flag8_hb_0",
528
+ ),
529
+ "control_type_on_off": BinarySensorSchema(
530
+ description="Configuration: Control type is on/off",
531
+ message="DEVICE_CONFIG",
532
+ keep_updated=False,
533
+ message_data="flag8_hb_1",
534
+ ),
535
+ "cooling_supported": BinarySensorSchema(
536
+ description="Configuration: Cooling supported",
537
+ message="DEVICE_CONFIG",
538
+ keep_updated=False,
539
+ message_data="flag8_hb_2",
540
+ ),
541
+ "dhw_storage_tank": BinarySensorSchema(
542
+ description="Configuration: DHW storage tank",
543
+ message="DEVICE_CONFIG",
544
+ keep_updated=False,
545
+ message_data="flag8_hb_3",
546
+ ),
547
+ "controller_pump_control_allowed": BinarySensorSchema(
548
+ description="Configuration: Controller pump control allowed",
549
+ message="DEVICE_CONFIG",
550
+ keep_updated=False,
551
+ message_data="flag8_hb_4",
552
+ ),
553
+ "ch2_present": BinarySensorSchema(
554
+ description="Configuration: CH2 present",
555
+ message="DEVICE_CONFIG",
556
+ keep_updated=False,
557
+ message_data="flag8_hb_5",
558
+ ),
559
+ "water_filling": BinarySensorSchema(
560
+ description="Configuration: Remote water filling",
561
+ message="DEVICE_CONFIG",
562
+ keep_updated=False,
563
+ message_data="flag8_hb_6",
564
+ ),
565
+ "heat_mode": BinarySensorSchema(
566
+ description="Configuration: Heating or cooling",
567
+ message="DEVICE_CONFIG",
568
+ keep_updated=False,
569
+ message_data="flag8_hb_7",
570
+ ),
571
+ "dhw_setpoint_transfer_enabled": BinarySensorSchema(
572
+ description="Remote boiler parameters: DHW setpoint transfer enabled",
573
+ message="REMOTE",
574
+ keep_updated=False,
575
+ message_data="flag8_hb_0",
576
+ ),
577
+ "max_ch_setpoint_transfer_enabled": BinarySensorSchema(
578
+ description="Remote boiler parameters: CH maximum setpoint transfer enabled",
579
+ message="REMOTE",
580
+ keep_updated=False,
581
+ message_data="flag8_hb_1",
582
+ ),
583
+ "dhw_setpoint_rw": BinarySensorSchema(
584
+ description="Remote boiler parameters: DHW setpoint read/write",
585
+ message="REMOTE",
586
+ keep_updated=False,
587
+ message_data="flag8_lb_0",
588
+ ),
589
+ "max_ch_setpoint_rw": BinarySensorSchema(
590
+ description="Remote boiler parameters: CH maximum setpoint read/write",
591
+ message="REMOTE",
592
+ keep_updated=False,
593
+ message_data="flag8_lb_1",
594
+ ),
595
+ "service_request": BinarySensorSchema(
596
+ description="Service required",
597
+ device_class=DEVICE_CLASS_PROBLEM,
598
+ message="FAULT_FLAGS",
599
+ keep_updated=True,
600
+ message_data="flag8_hb_0",
601
+ ),
602
+ "lockout_reset": BinarySensorSchema(
603
+ description="Lockout Reset",
604
+ device_class=DEVICE_CLASS_PROBLEM,
605
+ message="FAULT_FLAGS",
606
+ keep_updated=True,
607
+ message_data="flag8_hb_1",
608
+ ),
609
+ "low_water_pressure": BinarySensorSchema(
610
+ description="Low water pressure fault",
611
+ device_class=DEVICE_CLASS_PROBLEM,
612
+ message="FAULT_FLAGS",
613
+ keep_updated=True,
614
+ message_data="flag8_hb_2",
615
+ ),
616
+ "flame_fault": BinarySensorSchema(
617
+ description="Flame fault",
618
+ device_class=DEVICE_CLASS_PROBLEM,
619
+ message="FAULT_FLAGS",
620
+ keep_updated=True,
621
+ message_data="flag8_hb_3",
622
+ ),
623
+ "air_pressure_fault": BinarySensorSchema(
624
+ description="Air pressure fault",
625
+ device_class=DEVICE_CLASS_PROBLEM,
626
+ message="FAULT_FLAGS",
627
+ keep_updated=True,
628
+ message_data="flag8_hb_4",
629
+ ),
630
+ "water_over_temp": BinarySensorSchema(
631
+ description="Water overtemperature",
632
+ device_class=DEVICE_CLASS_PROBLEM,
633
+ message="FAULT_FLAGS",
634
+ keep_updated=True,
635
+ message_data="flag8_hb_5",
636
+ ),
637
+ }
638
+
639
+
640
+ @dataclass
641
+ class SwitchSchema(EntitySchema):
642
+ default_mode: Optional[str] = None
643
+
644
+
645
+ SWITCHES: dict[str, SwitchSchema] = {
646
+ "ch_enable": SwitchSchema(
647
+ description="Central Heating enabled",
648
+ message="STATUS",
649
+ keep_updated=True,
650
+ message_data="flag8_hb_0",
651
+ default_mode="restore_default_off",
652
+ ),
653
+ "dhw_enable": SwitchSchema(
654
+ description="Domestic Hot Water enabled",
655
+ message="STATUS",
656
+ keep_updated=True,
657
+ message_data="flag8_hb_1",
658
+ default_mode="restore_default_off",
659
+ ),
660
+ "cooling_enable": SwitchSchema(
661
+ description="Cooling enabled",
662
+ message="STATUS",
663
+ keep_updated=True,
664
+ message_data="flag8_hb_2",
665
+ default_mode="restore_default_off",
666
+ ),
667
+ "otc_active": SwitchSchema(
668
+ description="Outside temperature compensation active",
669
+ message="STATUS",
670
+ keep_updated=True,
671
+ message_data="flag8_hb_3",
672
+ default_mode="restore_default_off",
673
+ ),
674
+ "ch2_active": SwitchSchema(
675
+ description="Central Heating 2 active",
676
+ message="STATUS",
677
+ keep_updated=True,
678
+ message_data="flag8_hb_4",
679
+ default_mode="restore_default_off",
680
+ ),
681
+ "summer_mode_active": SwitchSchema(
682
+ description="Summer mode active",
683
+ message="STATUS",
684
+ keep_updated=True,
685
+ message_data="flag8_hb_5",
686
+ default_mode="restore_default_off",
687
+ ),
688
+ "dhw_block": SwitchSchema(
689
+ description="DHW blocked",
690
+ message="STATUS",
691
+ keep_updated=True,
692
+ message_data="flag8_hb_6",
693
+ default_mode="restore_default_off",
694
+ ),
695
+ }
696
+
697
+
698
+ @dataclass
699
+ class AutoConfigure:
700
+ message: str
701
+ message_data: str
702
+
703
+
704
+ @dataclass
705
+ class InputSchema(EntitySchema):
706
+ unit_of_measurement: str
707
+ step: float
708
+ range: tuple[int, int]
709
+ icon: Optional[str] = None
710
+ auto_max_value: Optional[AutoConfigure] = None
711
+ auto_min_value: Optional[AutoConfigure] = None
712
+
713
+
714
+ INPUTS: dict[str, InputSchema] = {
715
+ "t_set": InputSchema(
716
+ description="Control setpoint: temperature setpoint for the boiler's supply water",
717
+ unit_of_measurement=UNIT_CELSIUS,
718
+ step=0.1,
719
+ message="CH_SETPOINT",
720
+ keep_updated=True,
721
+ message_data="f88",
722
+ range=(0, 100),
723
+ auto_max_value=AutoConfigure(message="MAX_CH_SETPOINT", message_data="f88"),
724
+ ),
725
+ "t_set_ch2": InputSchema(
726
+ description="Control setpoint 2: temperature setpoint for the boiler's supply water on the second heating circuit",
727
+ unit_of_measurement=UNIT_CELSIUS,
728
+ step=0.1,
729
+ message="CH2_SETPOINT",
730
+ keep_updated=True,
731
+ message_data="f88",
732
+ range=(0, 100),
733
+ auto_max_value=AutoConfigure(message="MAX_CH_SETPOINT", message_data="f88"),
734
+ ),
735
+ "cooling_control": InputSchema(
736
+ description="Cooling control signal",
737
+ unit_of_measurement=UNIT_PERCENT,
738
+ step=1.0,
739
+ message="COOLING_CONTROL",
740
+ keep_updated=True,
741
+ message_data="f88",
742
+ range=(0, 100),
743
+ ),
744
+ "t_dhw_set": InputSchema(
745
+ description="Domestic hot water temperature setpoint",
746
+ unit_of_measurement=UNIT_CELSIUS,
747
+ step=0.1,
748
+ message="DHW_SETPOINT",
749
+ keep_updated=True,
750
+ message_data="f88",
751
+ range=(0, 127),
752
+ auto_min_value=AutoConfigure(message="DHW_BOUNDS", message_data="s8_lb"),
753
+ auto_max_value=AutoConfigure(message="DHW_BOUNDS", message_data="s8_hb"),
754
+ ),
755
+ "max_t_set": InputSchema(
756
+ description="Maximum allowable CH water setpoint",
757
+ unit_of_measurement=UNIT_CELSIUS,
758
+ step=0.1,
759
+ message="MAX_CH_SETPOINT",
760
+ keep_updated=True,
761
+ message_data="f88",
762
+ range=(0, 127),
763
+ auto_min_value=AutoConfigure(message="CH_BOUNDS", message_data="s8_lb"),
764
+ auto_max_value=AutoConfigure(message="CH_BOUNDS", message_data="s8_hb"),
765
+ ),
766
+ "t_room_set": InputSchema(
767
+ description="Current room temperature setpoint (informational)",
768
+ unit_of_measurement=UNIT_CELSIUS,
769
+ step=0.1,
770
+ message="ROOM_SETPOINT",
771
+ keep_updated=True,
772
+ message_data="f88",
773
+ range=(-40, 127),
774
+ ),
775
+ "t_room_set_ch2": InputSchema(
776
+ description="Current room temperature setpoint on CH2 (informational)",
777
+ unit_of_measurement=UNIT_CELSIUS,
778
+ step=0.1,
779
+ message="ROOM_SETPOINT_CH2",
780
+ keep_updated=True,
781
+ message_data="f88",
782
+ range=(-40, 127),
783
+ ),
784
+ "t_room": InputSchema(
785
+ description="Current sensed room temperature (informational)",
786
+ unit_of_measurement=UNIT_CELSIUS,
787
+ step=0.1,
788
+ message="ROOM_TEMP",
789
+ keep_updated=True,
790
+ message_data="f88",
791
+ range=(-40, 127),
792
+ ),
793
+ "max_rel_mod_level": InputSchema(
794
+ description="Maximum relative modulation level",
795
+ unit_of_measurement=UNIT_PERCENT,
796
+ step=1,
797
+ icon="mdi:percent",
798
+ message="MAX_MODULATION_LEVEL",
799
+ keep_updated=True,
800
+ message_data="f88",
801
+ range=(0, 100),
802
+ ),
803
+ "otc_hc_ratio": InputSchema(
804
+ description="OTC heat curve ratio",
805
+ unit_of_measurement=UNIT_CELSIUS,
806
+ step=0.1,
807
+ message="OTC_CURVE_RATIO",
808
+ keep_updated=True,
809
+ message_data="f88",
810
+ range=(0, 127),
811
+ auto_min_value=AutoConfigure(message="OTC_CURVE_BOUNDS", message_data="u8_lb"),
812
+ auto_max_value=AutoConfigure(message="OTC_CURVE_BOUNDS", message_data="u8_hb"),
813
+ ),
814
+ }