Oekoboiler added
This commit is contained in:
632
Oekoboiler/main.yaml
Normal file
632
Oekoboiler/main.yaml
Normal 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
|
||||
Reference in New Issue
Block a user