Skip to content

Commit f066f61

Browse files
author
Samuel Sieb
committed
add ETA SH component
1 parent 2e08d43 commit f066f61

File tree

4 files changed

+485
-0
lines changed

4 files changed

+485
-0
lines changed

components/eta_sh/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# component to read and control an ETA SH system
2+
3+
A configured uart is required.
4+
5+
Example:
6+
```yaml
7+
eta_sh:
8+
boiler_temperature:
9+
name: Kesseltemperatur (Boiler temp)
10+
fan_speed:
11+
name: Gebläsedrehzahl (Speed of boiler Fan)
12+
unit_of_measurement: RPM
13+
return_temperature:
14+
name: Kesselruecklauf (Boiler water return temp)
15+
buffer_bottom_temperature:
16+
name: Puffer unten (Water buffer bottom temp)
17+
buffer_middle_temperature:
18+
name: Puffer mitte (Water buffer middle temp)
19+
buffer_top_temperature:
20+
name: Puffer oben (Water buffer top temp)
21+
exhaust_temperature:
22+
name: Abgastemperatur (Exhaust temp)
23+
room1_temperature:
24+
name: Raumtemperatur (Room1 temp)
25+
room1_output_temperature:
26+
name: Vorlauf Raum 1 (Water to room1 temp)
27+
outside_temperature:
28+
name: Aussentemperatur (Outside temp)
29+
buffer_load:
30+
name: Pufferladezustand (Buffer load in %)
31+
external_heater_temperature:
32+
name: Externer Brenner (External Oven (expansion, e.g. Oil or Gas)
33+
oxygen_sensor:
34+
name: Restsauerstoff (o2 Sensor Percent / Lambda Sond. Returns 0 when oven off)
35+
heater_status:
36+
name: "Status" Status of the heater,
37+
0: "Tür offen" (Door open)
38+
1: "heizt an" (starting Fire)
39+
2: "in Betrieb" (working)
40+
3: "Übertemperatur" (over temperature Limit)
41+
4: "Glutabbrand" (embers burning)
42+
5: "Feuer aus" (no Fire)
43+
6: "Ausgeschaltet" (heater off)
44+
7: "Störung" (fault)
45+
```
46+
47+
All sensors are optional.
48+

components/eta_sh/__init__.py

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
import esphome.codegen as cg
2+
import esphome.config_validation as cv
3+
from esphome import automation
4+
from esphome.components import uart, sensor
5+
from esphome.const import (
6+
CONF_ID,
7+
CONF_TEMPERATURE,
8+
DEVICE_CLASS_TEMPERATURE,
9+
DEVICE_CLASS_VOLUME,
10+
ICON_FAN,
11+
ICON_GAUGE,
12+
ICON_ROTATE_RIGHT,
13+
ICON_THERMOMETER,
14+
UNIT_CELSIUS,
15+
UNIT_PERCENT,
16+
)
17+
18+
MULTI_CONF = True
19+
DEPENDENCIES = ['uart']
20+
AUTO_LOAD = ['sensor']
21+
22+
eta_sh_ns = cg.esphome_ns.namespace('eta_sh')
23+
24+
ETA_SH = eta_sh_ns.class_('ETA_SH', cg.Component, uart.UARTDevice)
25+
26+
CONF_BOILER_TEMPERATURE = "boiler_temperature"
27+
CONF_BUFFER_BOTTOM_TEMPERATURE = "buffer_bottom_temperature"
28+
CONF_BUFFER_MIDDLE_TEMPERATURE = "buffer_middle_temperature"
29+
CONF_BUFFER_TOP_TEMPERATURE = "buffer_top_temperature"
30+
CONF_BUFFER_LOAD = "buffer_load"
31+
CONF_EXHAUST_TEMPERATURE = "exhaust_temperature"
32+
CONF_EXTERNAL_HEATER_TEMPERATURE = "external_heater_temperature"
33+
CONF_FAN_SPEED = "fan_speed"
34+
CONF_HEATER_STATUS = "heater_status"
35+
CONF_OUTSIDE_TEMPERATURE = "outside_temperature"
36+
CONF_OXYGEN_SENSOR = "oxygen_sensor"
37+
CONF_RETURN_TEMPERATURE = "return_temperature"
38+
CONF_ROOM1_TEMPERATURE = "room1_temperature"
39+
CONF_ROOM1_OUTPUT_TEMPERATURE = "room1_output_temperature"
40+
41+
42+
CONFIG_SCHEMA = cv.Schema(
43+
{
44+
cv.GenerateID(): cv.declare_id(ETA_SH),
45+
cv.Optional(CONF_BOILER_TEMPERATURE): sensor.sensor_schema(
46+
unit_of_measurement=UNIT_CELSIUS,
47+
icon=ICON_THERMOMETER,
48+
accuracy_decimals=1,
49+
device_class=DEVICE_CLASS_TEMPERATURE,
50+
),
51+
cv.Optional(CONF_BUFFER_BOTTOM_TEMPERATURE): sensor.sensor_schema(
52+
unit_of_measurement=UNIT_CELSIUS,
53+
icon=ICON_THERMOMETER,
54+
accuracy_decimals=1,
55+
device_class=DEVICE_CLASS_TEMPERATURE,
56+
),
57+
cv.Optional(CONF_BUFFER_MIDDLE_TEMPERATURE): sensor.sensor_schema(
58+
unit_of_measurement=UNIT_CELSIUS,
59+
icon=ICON_THERMOMETER,
60+
accuracy_decimals=1,
61+
device_class=DEVICE_CLASS_TEMPERATURE,
62+
),
63+
cv.Optional(CONF_BUFFER_TOP_TEMPERATURE): sensor.sensor_schema(
64+
unit_of_measurement=UNIT_CELSIUS,
65+
icon=ICON_THERMOMETER,
66+
accuracy_decimals=1,
67+
device_class=DEVICE_CLASS_TEMPERATURE,
68+
),
69+
cv.Optional(CONF_BUFFER_LOAD): sensor.sensor_schema(
70+
unit_of_measurement=UNIT_PERCENT,
71+
icon=ICON_GAUGE,
72+
accuracy_decimals=0,
73+
device_class=DEVICE_CLASS_VOLUME,
74+
),
75+
cv.Optional(CONF_EXHAUST_TEMPERATURE): sensor.sensor_schema(
76+
unit_of_measurement=UNIT_CELSIUS,
77+
icon=ICON_THERMOMETER,
78+
accuracy_decimals=1,
79+
device_class=DEVICE_CLASS_TEMPERATURE,
80+
),
81+
cv.Optional(CONF_EXTERNAL_HEATER_TEMPERATURE): sensor.sensor_schema(
82+
unit_of_measurement=UNIT_CELSIUS,
83+
icon=ICON_THERMOMETER,
84+
accuracy_decimals=1,
85+
device_class=DEVICE_CLASS_TEMPERATURE,
86+
),
87+
cv.Optional(CONF_FAN_SPEED): sensor.sensor_schema(
88+
icon=ICON_FAN,
89+
accuracy_decimals=0,
90+
),
91+
cv.Optional(CONF_HEATER_STATUS) : sensor.sensor_schema(
92+
accuracy_decimals=0,
93+
device_class=DEVICE_CLASS_VOLUME,
94+
),
95+
cv.Optional(CONF_OUTSIDE_TEMPERATURE): sensor.sensor_schema(
96+
unit_of_measurement=UNIT_CELSIUS,
97+
icon=ICON_THERMOMETER,
98+
accuracy_decimals=1,
99+
device_class=DEVICE_CLASS_TEMPERATURE,
100+
),
101+
cv.Optional(CONF_OXYGEN_SENSOR): sensor.sensor_schema(
102+
unit_of_measurement=UNIT_PERCENT,
103+
icon=ICON_GAUGE,
104+
accuracy_decimals=1,
105+
device_class=DEVICE_CLASS_VOLUME,
106+
),
107+
cv.Optional(CONF_RETURN_TEMPERATURE): sensor.sensor_schema(
108+
unit_of_measurement=UNIT_CELSIUS,
109+
icon=ICON_THERMOMETER,
110+
accuracy_decimals=1,
111+
device_class=DEVICE_CLASS_TEMPERATURE,
112+
),
113+
cv.Optional(CONF_ROOM1_TEMPERATURE): sensor.sensor_schema(
114+
unit_of_measurement=UNIT_CELSIUS,
115+
icon=ICON_THERMOMETER,
116+
accuracy_decimals=1,
117+
device_class=DEVICE_CLASS_TEMPERATURE,
118+
),
119+
cv.Optional(CONF_ROOM1_OUTPUT_TEMPERATURE): sensor.sensor_schema(
120+
unit_of_measurement=UNIT_CELSIUS,
121+
icon=ICON_THERMOMETER,
122+
accuracy_decimals=1,
123+
device_class=DEVICE_CLASS_TEMPERATURE,
124+
),
125+
}
126+
).extend(uart.UART_DEVICE_SCHEMA)
127+
128+
129+
async def to_code(config):
130+
var = cg.new_Pvariable(config[CONF_ID])
131+
await cg.register_component(var, config)
132+
await uart.register_uart_device(var, config)
133+
134+
if CONF_BOILER_TEMPERATURE in config:
135+
sens = await sensor.new_sensor(config[CONF_BOILER_TEMPERATURE])
136+
cg.add(var.set_boiler_temp_sensor(sens))
137+
138+
if CONF_BUFFER_BOTTOM_TEMPERATURE in config:
139+
sens = await sensor.new_sensor(config[CONF_BUFFER_BOTTOM_TEMPERATURE])
140+
cg.add(var.set_buffer_bottom_temp_sensor(sens))
141+
142+
if CONF_BUFFER_MIDDLE_TEMPERATURE in config:
143+
sens = await sensor.new_sensor(config[CONF_BUFFER_MIDDLE_TEMPERATURE])
144+
cg.add(var.set_buffer_middle_temp_sensor(sens))
145+
146+
if CONF_BUFFER_TOP_TEMPERATURE in config:
147+
sens = await sensor.new_sensor(config[CONF_BUFFER_TOP_TEMPERATURE])
148+
cg.add(var.set_buffer_top_temp_sensor(sens))
149+
150+
if CONF_BUFFER_LOAD in config:
151+
sens = await sensor.new_sensor(config[CONF_BUFFER_LOAD])
152+
cg.add(var.set_buffer_load_sensor(sens))
153+
154+
if CONF_EXHAUST_TEMPERATURE in config:
155+
sens = await sensor.new_sensor(config[CONF_EXHAUST_TEMPERATURE])
156+
cg.add(var.set_exhaust_temp_sensor(sens))
157+
158+
if CONF_EXTERNAL_HEATER_TEMPERATURE in config:
159+
sens = await sensor.new_sensor(config[CONF_EXTERNAL_HEATER_TEMPERATURE])
160+
cg.add(var.set_external_heater_temp_sensor(sens))
161+
162+
if CONF_FAN_SPEED in config:
163+
sens = await sensor.new_sensor(config[CONF_FAN_SPEED])
164+
cg.add(var.set_fan_speed_sensor(sens))
165+
166+
if CONF_HEATER_STATUS in config:
167+
sens = await sensor.new_sensor(config[CONF_HEATER_STATUS])
168+
cg.add(var.set_heater_status_sensor(sens))
169+
170+
if CONF_OUTSIDE_TEMPERATURE in config:
171+
sens = await sensor.new_sensor(config[CONF_OUTSIDE_TEMPERATURE])
172+
cg.add(var.set_outside_temp_sensor(sens))
173+
174+
if CONF_OXYGEN_SENSOR in config:
175+
sens = await sensor.new_sensor(config[CONF_OXYGEN_SENSOR])
176+
cg.add(var.set_oxygen_sensor(sens))
177+
178+
if CONF_RETURN_TEMPERATURE in config:
179+
sens = await sensor.new_sensor(config[CONF_RETURN_TEMPERATURE])
180+
cg.add(var.set_return_temp_sensor(sens))
181+
182+
if CONF_ROOM1_TEMPERATURE in config:
183+
sens = await sensor.new_sensor(config[CONF_ROOM1_TEMPERATURE])
184+
cg.add(var.set_room1_temp_sensor(sens))
185+
186+
if CONF_ROOM1_OUTPUT_TEMPERATURE in config:
187+
sens = await sensor.new_sensor(config[CONF_ROOM1_OUTPUT_TEMPERATURE])
188+
cg.add(var.set_room1_output_temp_sensor(sens))
189+

0 commit comments

Comments
 (0)