Oekoboiler added

This commit is contained in:
2025-10-29 10:10:26 +01:00
parent d85696dc17
commit 1cb58b01d4
2 changed files with 633 additions and 0 deletions

632
Oekoboiler/main.yaml Normal file
View File

@@ -0,0 +1,632 @@
esphome:
name: oekoboiler-interface
friendly_name: Oekoboiler-Interface
esp8266:
board: nodemcuv2
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
encryption:
key: !secret oekoboiler_encryptionkey
reboot_timeout: 0s
ota:
- platform: esphome
password: !secret oekoboiler_otapassword
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: none # Disable power saving
fast_connect: true # Skip scanning, connect faster
reboot_timeout: 0s # Disable auto-reboot on wifi loss
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Oekoboiler-Interface"
password: !secret oekoboiler_fallbackpassword
captive_portal:
#web_server:
# port: 80
# UART configuration for Modbus (0-based register addressing)
uart:
id: mod_bus
tx_pin: GPIO1 # D10/TX
rx_pin: GPIO3 # D9/RX
baud_rate: 9600
stop_bits: 1
data_bits: 8
parity: NONE
# Modbus RTU
modbus:
flow_control_pin: GPIO5 # D1 - DE/RE pin for MAX485
id: modbus1
send_wait_time: 200ms
modbus_controller:
- id: oekoboiler
address: 0x1
modbus_id: modbus1
setup_priority: -10
update_interval: 10s
command_throttle: 200ms
sensor:
# WiFi Signal
- platform: wifi_signal
name: "WiFi Signal"
update_interval: 60s
# Uptime
- platform: uptime
name: "Uptime"
update_interval: 60s
# ========================================
# INPUT REGISTERS (3x) - Documentation address MINUS 1
# ========================================
# A1 - Water Temperature (30001 -> 0)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Water Temperature"
address: 0
register_type: read
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# A2 - Evaporator Temperature (30002 -> 1)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Evaporator Temperature"
address: 1
register_type: read
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# A4 - Ambient Temperature (30003 -> 2)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Ambient Temperature"
address: 2
register_type: read
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# A3 - Exhaust Temperature (30004 -> 3)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Exhaust Temperature"
address: 3
register_type: read
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# A9 - Return Gas Temperature (30005 -> 4)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Return Gas Temperature"
address: 4
register_type: read
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# ========================================
# HOLDING REGISTERS (4x) - Read-only values
# ========================================
# Controller Status (41102 -> 1101)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Controller Status Raw"
id: controller_status_raw
address: 1101
register_type: holding
value_type: U_WORD
internal: true
# Operating Mode (41105 -> 1104)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Mode Raw"
id: mode_raw
address: 1104
register_type: holding
value_type: U_WORD
internal: true
# Econ Mode Time Window (41106 -> 1105)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Econ Mode Time Window"
address: 1105
register_type: holding
value_type: U_WORD
skip_updates: 4
# Alarm sensors (41121-41133 -> 1120-1132)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A1 Sensor"
address: 1120
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a1
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A2 Sensor"
address: 1121
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a2
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A3 Sensor"
address: 1122
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a3
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A6 Sensor"
address: 1125
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a6
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A5 High Pressure"
address: 1126
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a5
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A4 Sensor"
address: 1127
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a4
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Water Temp Warning 55C"
address: 1128
register_type: holding
value_type: U_WORD
internal: true
id: alarm_water_temp
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A9 Sensor"
address: 1129
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a9
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Alarm A8 Condensate"
address: 1130
register_type: holding
value_type: U_WORD
internal: true
id: alarm_a8
binary_sensor:
- platform: status
name: "Connection Status"
# ========================================
# COILS (0x) - Documentation address MINUS 1
# ========================================
# Compressor (00001 -> 0)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Compressor Running"
address: 1
register_type: coil
device_class: running
# Heating Element (00002 -> 1)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Heating Element"
address: 2
register_type: coil
device_class: heat
# Fan (00004 -> 3)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Four-Way Valve"
address: 3
register_type: coil
device_class: running
# Fan (00004 -> 3)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Fan Running"
address: 4
register_type: coil
device_class: running
# ========================================
# DISCRETE INPUTS (1x) - Documentation address MINUS 1
# ========================================
# Template binary sensors for alarms
- platform: template
name: "Alarm: A1 Water Temp Sensor"
device_class: problem
lambda: |-
return id(alarm_a1).state != 0;
- platform: template
name: "Alarm: A2 Evaporator Sensor"
device_class: problem
lambda: |-
return id(alarm_a2).state != 0;
- platform: template
name: "Alarm: A3 Ambient Sensor"
device_class: problem
lambda: |-
return id(alarm_a3).state != 0;
- platform: template
name: "Alarm: A6 Heating Element"
device_class: problem
lambda: |-
return id(alarm_a6).state != 0;
- platform: template
name: "Alarm: A5 High Pressure"
device_class: problem
lambda: |-
return id(alarm_a5).state != 0;
- platform: template
name: "Alarm: A4 Exhaust Sensor"
device_class: problem
lambda: |-
return id(alarm_a4).state != 0;
- platform: template
name: "Warning: Water Temperature 55°C"
device_class: problem
lambda: |-
return id(alarm_water_temp).state != 0;
- platform: template
name: "Alarm: A9 Return Gas Sensor"
device_class: problem
lambda: |-
return id(alarm_a9).state != 0;
- platform: template
name: "Alarm: A8 Condensate Overflow"
device_class: problem
lambda: |-
return id(alarm_a8).state != 0;
text_sensor:
- platform: template
name: "Controller Status"
lambda: |-
int status = (int)id(controller_status_raw).state;
switch(status) {
case 0: return {"Power Off"};
case 1: return {"Standby"};
case 2: return {"Preheating"};
case 3: return {"Heating"};
case 4: return {"Before Defrost"};
case 5: return {"Defrosting"};
case 6: return {"After Defrost"};
case 8: return {"Alarm"};
default: return {"Unknown (" + to_string(status) + ")"};
}
- platform: template
name: "Operating Mode"
lambda: |-
int mode = (int)id(mode_raw).state;
switch(mode) {
case 0: return {"Econ Mode"};
case 1: return {"Auto Mode"};
case 2: return {"Heater Mode"};
default: return {"Unknown (" + to_string(mode) + ")"};
}
switch:
# ========================================
# WRITABLE HOLDING REGISTERS - Switches
# ========================================
# PV Mode (40067 -> 66)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "PV Mode"
address: 66
register_type: holding
bitmask: 1
entity_category: config
icon: "mdi:solar-power"
# Heating Element Enable (40015 -> 14)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Heating Element Enable"
address: 14
register_type: holding
bitmask: 1
entity_category: config
icon: "mdi:heating-coil"
# Heating Element for Sterilization (40017 -> 16)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Sterilization Enable"
address: 16
register_type: holding
bitmask: 1
entity_category: config
icon: "mdi:bacteria"
# Heating Element in Econ Mode (40028 -> 27)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Heating Element in Econ Mode"
address: 27
register_type: holding
bitmask: 1
entity_category: config
# Heat Pump in Heater Mode (40029 -> 28)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Heat Pump in Heater Mode"
address: 28
register_type: holding
bitmask: 1
entity_category: config
# Save Status on Power Off (40061 -> 60)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Save Status on Power Off"
address: 60
register_type: holding
bitmask: 1
entity_category: config
# Electronic Anode (40068 -> 67)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Electronic Anode"
address: 67
register_type: holding
bitmask: 1
entity_category: config
number:
# ========================================
# WRITABLE HOLDING REGISTERS - Numbers
# ========================================
# Set Temperature PV (40009 -> 8)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Target Temperature (PV Mode)"
address: 8
value_type: U_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: 5
max_value: 70
step: 1
mode: box
use_write_multiple: true
entity_category: config
icon: "mdi:solar-power"
# Set Temperature Normal (40010 -> 9)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Target Temperature (Normal)"
address: 9
value_type: U_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: 5
max_value: 70
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Set Temperature F62=0 (40011 -> 10)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Target Temperature (F62=0)"
address: 10
value_type: U_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: 5
max_value: 70
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Temperature Delta/Hysteresis (40012 -> 11)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Temperature Hysteresis"
address: 11
value_type: U_WORD
unit_of_measurement: "°C"
min_value: 1
max_value: 20
step: 1
mode: box
use_write_multiple: true
entity_category: config
icon: "mdi:thermometer-lines"
# Ambient Temperature Shutdown (40013 -> 12)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Heat Pump Shutdown Temperature"
address: 12
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: -10
max_value: 5
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Maximum Temperature with Heat Pump (40014 -> 13)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Max Temperature Heat Pump"
address: 13
value_type: U_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: 20
max_value: 60
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Ambient Temperature for Heating Element Start (40016 -> 15)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Heating Element Start Temperature"
address: 15
value_type: U_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: 10
max_value: 20
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Sterilization Cycle (40018 -> 17)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Sterilization Cycle Hours"
address: 17
value_type: U_WORD
unit_of_measurement: "h"
min_value: 1
max_value: 990
step: 1
mode: box
use_write_multiple: true
entity_category: config
icon: "mdi:bacteria"
# A1 Temperature Sensor Offset (40019 -> 18)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "A1 Sensor Offset"
address: 18
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: -5
max_value: 5
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Compressor Delay (40021 -> 20)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Compressor Delay"
address: 20
value_type: U_WORD
unit_of_measurement: "min"
min_value: 0
max_value: 10
step: 1
mode: box
use_write_multiple: true
entity_category: config
# Defrost Start Temperature (40031 -> 30)
- platform: modbus_controller
modbus_controller_id: oekoboiler
name: "Defrost Start Temperature"
address: 30
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
min_value: -20
max_value: 20
step: 1
mode: box
use_write_multiple: true
entity_category: config

View File

@@ -1,2 +1,3 @@
# ESP-Home-Scripts
Device description files for my ESPHome-devices - currently still transmitted "manually"...