Ready for synching test
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Gitignore settings for ESPHome
|
||||
# This is an example and may include too much for your use-case.
|
||||
# You can modify this file to suit your needs.
|
||||
/.esphome/
|
||||
/secrets.yaml
|
||||
1086
ades-office-control-panel.yaml
Normal file
1086
ades-office-control-panel.yaml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,89 +1,17 @@
|
||||
substitutions:
|
||||
device_name: "ades-office-control-panel"
|
||||
friendly_name: Ade's Office Control Panel
|
||||
|
||||
esphome:
|
||||
name: $device_name
|
||||
friendly_name: $friendly_name
|
||||
on_boot:
|
||||
- delay: 2s
|
||||
name: adesoffice_resistive_control
|
||||
friendly_name: Ade's office Resistive control panel
|
||||
|
||||
esp32:
|
||||
board: esp32dev
|
||||
framework:
|
||||
type: arduino
|
||||
|
||||
logger:
|
||||
|
||||
ota:
|
||||
platform: esphome
|
||||
password: !secret ota_password
|
||||
|
||||
wifi:
|
||||
ssid: !secret wifi_ssid
|
||||
password: !secret wifi_password
|
||||
fast_connect: true
|
||||
on_connect:
|
||||
- lvgl.widget.show: wifiStatusIcon
|
||||
on_disconnect:
|
||||
- lvgl.widget.hide: wifiStatusIcon
|
||||
|
||||
|
||||
light:
|
||||
- platform: monochromatic
|
||||
output: backlight_pwm
|
||||
name: Display Backlight
|
||||
id: backlight
|
||||
restore_mode: ALWAYS_ON
|
||||
|
||||
time:
|
||||
- platform: homeassistant
|
||||
id: esptime
|
||||
|
||||
spi:
|
||||
- id: tft
|
||||
clk_pin: GPIO14
|
||||
mosi_pin: GPIO13
|
||||
miso_pin: GPIO12
|
||||
|
||||
i2c:
|
||||
sda: GPIO33
|
||||
scl: GPIO32
|
||||
|
||||
touchscreen:
|
||||
platform: cst816
|
||||
id: my_touchscreen
|
||||
display: mainDisplay
|
||||
reset_pin: GPIO25
|
||||
update_interval: 50ms
|
||||
transform:
|
||||
mirror_x: true
|
||||
mirror_y: true
|
||||
on_touch:
|
||||
- lambda: |-
|
||||
ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%0d",
|
||||
touch.x,
|
||||
touch.y,
|
||||
touch.x_raw,
|
||||
touch.y_raw
|
||||
);
|
||||
on_release:
|
||||
then:
|
||||
- if:
|
||||
condition: lvgl.is_paused
|
||||
then:
|
||||
- logger.log: "LVGL resuming"
|
||||
- lvgl.resume:
|
||||
- lvgl.widget.redraw:
|
||||
- light.turn_on: backlight
|
||||
|
||||
output:
|
||||
- platform: ledc
|
||||
pin: GPIO27
|
||||
id: backlight_pwm
|
||||
|
||||
api:
|
||||
encryption:
|
||||
key: "FdLcYGMsxFkCFoY8UUu0q/huDesKrcy4+vNQujhbXVE="
|
||||
key: "yDySAAGJIQIgZcDURBrLtWiVYNteCm155yyZUnrMjZY="
|
||||
on_client_connected:
|
||||
- lvgl.widget.show: haStatusIcon
|
||||
on_client_disconnected:
|
||||
@@ -95,10 +23,151 @@ api:
|
||||
else:
|
||||
- lvgl.widget.hide: haStatusIcon
|
||||
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: !secret ota_password
|
||||
|
||||
wifi:
|
||||
ssid: !secret wifi_ssid
|
||||
password: !secret wifi_password
|
||||
on_connect:
|
||||
- lvgl.widget.show: wifiStatusIcon
|
||||
on_disconnect:
|
||||
- lvgl.widget.hide: wifiStatusIcon
|
||||
|
||||
i2c:
|
||||
sda: 27
|
||||
scl: 22
|
||||
scan: true
|
||||
|
||||
spi:
|
||||
- id: tft
|
||||
clk_pin: 14
|
||||
mosi_pin: 13
|
||||
miso_pin:
|
||||
number: 12
|
||||
ignore_strapping_warning: true
|
||||
- id: touch
|
||||
clk_pin: 25
|
||||
mosi_pin: 32
|
||||
miso_pin: 39
|
||||
|
||||
output:
|
||||
- id: backlightPwm
|
||||
platform: ledc
|
||||
pin: 21
|
||||
- id: outputRed
|
||||
platform: ledc
|
||||
pin: 4
|
||||
inverted: true
|
||||
- id: outputGreen
|
||||
platform: ledc
|
||||
pin: 16
|
||||
inverted: true
|
||||
- id: outputBlue
|
||||
platform: ledc
|
||||
pin: 17
|
||||
inverted: true
|
||||
|
||||
light:
|
||||
- id: backlight
|
||||
platform: monochromatic
|
||||
output: backlightPwm
|
||||
name: "Display Backlight"
|
||||
restore_mode: ALWAYS_ON
|
||||
- id: rgbLed
|
||||
platform: rgb
|
||||
red: outputRed
|
||||
green: outputGreen
|
||||
blue: outputBlue
|
||||
name: "RGB LED"
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
sensor:
|
||||
- platform: adc
|
||||
pin: 34
|
||||
name: "Brightness"
|
||||
update_interval: 60s
|
||||
id: lsr
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k1max_progress
|
||||
id: sensor_3dprinter_percentage
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_percentage
|
||||
text:
|
||||
format: "Percentage: %.0f%%"
|
||||
args: [x]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k1max_extruder_temperature
|
||||
id: sensor_3dprinter_nozzle
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.indicator.update:
|
||||
id: gauge_3dprinter_nozzle_needle
|
||||
value: !lambda return x;
|
||||
- lvgl.label.update:
|
||||
id: gauge_3dprinter_nozzle_text
|
||||
text:
|
||||
format: "%.0f°C"
|
||||
args: [ 'x' ]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k1max_bed_temperature_2
|
||||
id: sensor_3dprinter_bed
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.indicator.update:
|
||||
id: gauge_3dprinter_bed_needle
|
||||
value: !lambda return x;
|
||||
- lvgl.label.update:
|
||||
id: gauge_3dprinter_bed_text
|
||||
text:
|
||||
format: "%.0f°C"
|
||||
args: [ 'x' ]
|
||||
|
||||
text_sensor:
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k1max_current_print_state
|
||||
id: printerStatus
|
||||
on_value:
|
||||
then:
|
||||
- if:
|
||||
condition:
|
||||
lambda: 'return x == "printing";'
|
||||
then:
|
||||
- lvgl.widget.update:
|
||||
id: button3dPrinter
|
||||
state:
|
||||
disabled: ON
|
||||
else:
|
||||
- lvgl.widget.update:
|
||||
id: button3dPrinter
|
||||
state:
|
||||
disabled: OFF
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_status
|
||||
text:
|
||||
format: "Status: %s"
|
||||
args: [x.c_str()]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k1max_filename
|
||||
id: printer_modelname
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_modelname
|
||||
text:
|
||||
format: "Model: %s"
|
||||
args: [x.c_str()]
|
||||
|
||||
|
||||
|
||||
display:
|
||||
- id: mainDisplay
|
||||
platform: ili9xxx
|
||||
model: ili9341
|
||||
model: ILI9341
|
||||
spi_id: tft
|
||||
cs_pin:
|
||||
number: 15
|
||||
@@ -109,15 +178,8 @@ display:
|
||||
invert_colors: false
|
||||
update_interval: never
|
||||
auto_clear_enabled: false
|
||||
pixel_mode: 16bit
|
||||
transform:
|
||||
mirror_y: true
|
||||
mirror_x: true
|
||||
swap_xy: false
|
||||
dimensions:
|
||||
height: 320
|
||||
width: 240
|
||||
color_order: rgb
|
||||
init_sequence:
|
||||
- [0x01 ]
|
||||
- [0xcf, 0x00, 0xC1, 0x30 ]
|
||||
@@ -142,119 +204,31 @@ display:
|
||||
- [0x11 ] # SLPOUT Exit sleep
|
||||
- [0x29 ] # DISPLAY_ON
|
||||
|
||||
sensor:
|
||||
- platform: adc
|
||||
pin: 34
|
||||
name: "Brightness"
|
||||
update_interval: 60s
|
||||
id: lsr
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_print_progress
|
||||
id: sensor_3dprinter_percentage
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_percentage
|
||||
text:
|
||||
format: "Percentage: %.0f%%"
|
||||
args: [x]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_nozzle_temperature
|
||||
id: sensor_3dprinter_nozzle
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.indicator.update:
|
||||
id: gauge_3dprinter_nozzle_needle
|
||||
value: !lambda return x;
|
||||
- lvgl.label.update:
|
||||
id: gauge_3dprinter_nozzle_text
|
||||
text:
|
||||
format: "%.0fC"
|
||||
args: [ 'x' ]
|
||||
- platform: homeassistant
|
||||
entity_id: number.k2plus_c06b_nozzle_target
|
||||
id: number_3dprinter_nozzle_target
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.arc.update:
|
||||
id: arc_nozzle_target
|
||||
value: !lambda return x;
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_bed_temperature
|
||||
id: sensor_3dprinter_bed
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.indicator.update:
|
||||
id: gauge_3dprinter_bed_needle
|
||||
value: !lambda return x;
|
||||
- lvgl.label.update:
|
||||
id: gauge_3dprinter_bed_text
|
||||
text:
|
||||
format: "%.0fC"
|
||||
args: [ 'x' ]
|
||||
- platform: homeassistant
|
||||
entity_id: number.k2plus_c06b_bed_target
|
||||
id: number_3dprinter_bed_target
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.arc.update:
|
||||
id: arc_bed_target
|
||||
value: !lambda return x;
|
||||
|
||||
text_sensor:
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_print_status
|
||||
id: printerStatus
|
||||
on_value:
|
||||
touchscreen:
|
||||
platform: xpt2046
|
||||
id: mainTouchscreen
|
||||
spi_id: touch
|
||||
cs_pin: 33
|
||||
interrupt_pin: 36
|
||||
threshold: 800
|
||||
calibration:
|
||||
x_min: 410
|
||||
x_max: 3349
|
||||
y_min: 179
|
||||
y_max: 3958
|
||||
on_release:
|
||||
then:
|
||||
- if:
|
||||
condition:
|
||||
lambda: 'return x == "printing";'
|
||||
condition: lvgl.is_paused
|
||||
then:
|
||||
- lvgl.widget.update:
|
||||
id: button3dPrinter
|
||||
state:
|
||||
disabled: ON
|
||||
else:
|
||||
- lvgl.widget.update:
|
||||
id: button3dPrinter
|
||||
state:
|
||||
disabled: OFF
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_status
|
||||
text:
|
||||
format: "Status: %s"
|
||||
args: [x.c_str()]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_current_object
|
||||
id: printer_modelname
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_modelname
|
||||
text:
|
||||
format: "Model: %s"
|
||||
args: [x.c_str()]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_working_layer
|
||||
id: printer_working_layer
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_layer
|
||||
text:
|
||||
format: "Layer: %s"
|
||||
args: [x.c_str()]
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.k2plus_c06b_print_time_left
|
||||
id: printer_print_time_left
|
||||
on_value:
|
||||
then:
|
||||
- lvgl.label.update:
|
||||
id: lbl_3dprinter_print_time_left
|
||||
text:
|
||||
format: "Time remaining: %s"
|
||||
args: [x.c_str()]
|
||||
- logger.log: "LVGL resuming"
|
||||
- lvgl.resume:
|
||||
- lvgl.widget.redraw:
|
||||
- light.turn_on: backlight
|
||||
transform:
|
||||
mirror_x: false
|
||||
mirror_y: true
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: "LVGL Screen Timeout"
|
||||
@@ -601,24 +575,6 @@ lvgl:
|
||||
id: lbl_3dprinter_modelname
|
||||
width: 240
|
||||
text: "Model: None"
|
||||
- label:
|
||||
align_to:
|
||||
id: lbl_3dprinter_modelname
|
||||
align: OUT_BOTTOM_LEFT
|
||||
y: 3
|
||||
long_mode: scroll
|
||||
id: lbl_3dprinter_layer
|
||||
width: 240
|
||||
text: "Layer: 0 of 0"
|
||||
- label:
|
||||
align_to:
|
||||
id: lbl_3dprinter_layer
|
||||
align: OUT_BOTTOM_LEFT
|
||||
y: 3
|
||||
long_mode: scroll
|
||||
id: lbl_3dprinter_print_time_left
|
||||
width: 240
|
||||
text: "Print time left: NaN"
|
||||
- meter:
|
||||
id: meter_3dprinter_nozzle
|
||||
align: BOTTOM_LEFT
|
||||
@@ -637,6 +593,12 @@ lvgl:
|
||||
width: 2
|
||||
color: 0xFF0000
|
||||
r_mod: -4
|
||||
- tick_style:
|
||||
start_value: 0
|
||||
end_value: 380
|
||||
color_start: 0x0000bd
|
||||
color_end: 0xbd0000
|
||||
width: 1
|
||||
- range_from: 0 # scale for the value labels
|
||||
range_to: 380
|
||||
angle_range: 240
|
||||
@@ -656,7 +618,7 @@ lvgl:
|
||||
widgets:
|
||||
- label:
|
||||
id: gauge_3dprinter_nozzle_text
|
||||
text: "-.-C"
|
||||
text: "-.-°C"
|
||||
align_to:
|
||||
id: meter_3dprinter_nozzle
|
||||
align: CENTER
|
||||
@@ -667,30 +629,6 @@ lvgl:
|
||||
id: meter_3dprinter_nozzle
|
||||
align: CENTER
|
||||
y: 45
|
||||
- arc:
|
||||
align: BOTTOM_LEFT
|
||||
y: -35
|
||||
x: 5
|
||||
height: 110
|
||||
width: 110
|
||||
id: arc_nozzle_target
|
||||
value: !lambda "return id(number_3dprinter_nozzle_target).state;"
|
||||
min_value: 0
|
||||
max_value: 380
|
||||
adjustable: true
|
||||
start_angle: 150
|
||||
end_angle: 30
|
||||
knob:
|
||||
pad_all: 0
|
||||
arc_rounded: false
|
||||
arc_width: 6
|
||||
on_value:
|
||||
then:
|
||||
- homeassistant.service:
|
||||
service: number.set_value
|
||||
data:
|
||||
entity_id: number.k2plus_c06b_nozzle_target
|
||||
value: !lambda "return x;"
|
||||
- meter:
|
||||
id: meter_3dprinter_bed
|
||||
align: BOTTOM_LEFT
|
||||
@@ -709,6 +647,12 @@ lvgl:
|
||||
width: 2
|
||||
color: 0xFF0000
|
||||
r_mod: -4
|
||||
- tick_style:
|
||||
start_value: 0
|
||||
end_value: 130
|
||||
color_start: 0x0000bd
|
||||
color_end: 0xbd0000
|
||||
width: 1
|
||||
- range_from: 0 # scale for the value labels
|
||||
range_to: 130
|
||||
angle_range: 240
|
||||
@@ -728,7 +672,7 @@ lvgl:
|
||||
widgets:
|
||||
- label:
|
||||
id: gauge_3dprinter_bed_text
|
||||
text: "-.-C"
|
||||
text: "-.-°C"
|
||||
align_to:
|
||||
id: meter_3dprinter_bed
|
||||
align: CENTER
|
||||
@@ -739,30 +683,6 @@ lvgl:
|
||||
id: meter_3dprinter_bed
|
||||
align: CENTER
|
||||
y: 45
|
||||
- arc:
|
||||
align: BOTTOM_LEFT
|
||||
y: -35
|
||||
x: 125
|
||||
height: 110
|
||||
width: 110
|
||||
id: arc_bed_target
|
||||
value: !lambda "return id(number_3dprinter_bed_target).state;"
|
||||
min_value: 0
|
||||
max_value: 130
|
||||
adjustable: true
|
||||
start_angle: 150
|
||||
end_angle: 30
|
||||
knob:
|
||||
pad_all: 0
|
||||
arc_rounded: false
|
||||
arc_width: 6
|
||||
on_value:
|
||||
then:
|
||||
- homeassistant.service:
|
||||
service: number.set_value
|
||||
data:
|
||||
entity_id: number.k2plus_c06b_bed_target
|
||||
value: !lambda "return x;"
|
||||
|
||||
|
||||
on_idle:
|
||||
@@ -871,4 +791,3 @@ switch:
|
||||
id: buttonScreens
|
||||
state:
|
||||
checked: OFF
|
||||
|
||||
45
ns-panel-ground-floor.yaml
Normal file
45
ns-panel-ground-floor.yaml
Normal file
@@ -0,0 +1,45 @@
|
||||
substitutions:
|
||||
# Settings - Editable values
|
||||
device_name: ns-panel-ground-floor
|
||||
wifi_ssid: !secret wifi_ssid
|
||||
wifi_password: !secret wifi_password
|
||||
nextion_update_url: "http://192.168.17.44:8123/local/nspanel_eu.tft" # Optional for `esp-idf` framework
|
||||
# Add-on configuration (if needed)
|
||||
# heater_relay: "1" # Possible values: "1" or "2"
|
||||
|
||||
api:
|
||||
encryption:
|
||||
key: "DVkkntEil08ex4e7xjnKTz4o2z/ZM/UHnkjOJP7KUfA="
|
||||
# Customization area
|
||||
##### My customization - Start #####
|
||||
##### My customization - End #####
|
||||
|
||||
# Core and optional configurations
|
||||
packages:
|
||||
remote_package:
|
||||
url: https://github.com/Blackymas/NSPanel_HA_Blueprint
|
||||
ref: main
|
||||
files:
|
||||
- nspanel_esphome.yaml # Core package
|
||||
# Optional advanced and add-on configurations
|
||||
# - advanced/esphome/nspanel_esphome_advanced.yaml
|
||||
# - nspanel_esphome_addon_climate_cool.yaml
|
||||
# - nspanel_esphome_addon_climate_heat.yaml
|
||||
# - nspanel_esphome_addon_climate_dual.yaml
|
||||
refresh: 300s
|
||||
|
||||
esp32:
|
||||
framework:
|
||||
type: esp-idf
|
||||
|
||||
time:
|
||||
- id: !extend time_provider
|
||||
timezone: "Europe/Berlin"
|
||||
|
||||
wifi:
|
||||
networks:
|
||||
- id: !extend wifi_default
|
||||
manual_ip:
|
||||
static_ip: 192.168.17.139
|
||||
gateway: 192.168.17.1
|
||||
subnet: 255.255.255.0
|
||||
634
oekoboiler-interface.yaml
Normal file
634
oekoboiler-interface.yaml
Normal file
@@ -0,0 +1,634 @@
|
||||
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
|
||||
|
||||
# Defrost End Temperature (40032
|
||||
@@ -148,4 +148,3 @@ script:
|
||||
|
||||
logger:
|
||||
level: DEBUG
|
||||
|
||||
77
powermeter.yaml
Normal file
77
powermeter.yaml
Normal file
@@ -0,0 +1,77 @@
|
||||
esphome:
|
||||
name: powermeter
|
||||
friendly_name: PowerMeter
|
||||
|
||||
esp8266:
|
||||
board: esp01_1m
|
||||
|
||||
# Enable logging
|
||||
logger:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
encryption:
|
||||
key: "sRMMr/ojhCUtZukAFSRT/fZpvI0bcTPHAqs0CzXY/q0="
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "8383401f9c2ff3b99a166c2782307e8b"
|
||||
|
||||
wifi:
|
||||
ssid: !secret wifi_ssid
|
||||
password: !secret wifi_password
|
||||
manual_ip:
|
||||
static_ip: 192.168.20.152
|
||||
gateway: 192.168.20.1
|
||||
subnet: 255.255.255.0
|
||||
|
||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||
ap:
|
||||
ssid: "Powermeter Fallback Hotspot"
|
||||
password: "kmSJk2j8Lpak"
|
||||
|
||||
captive_portal:
|
||||
|
||||
sensor:
|
||||
- platform: pulse_meter
|
||||
name: 'Power'
|
||||
id: sensor_pulse_meter # Optional ID, necessary if you want to calculate the total daily energy
|
||||
unit_of_measurement: 'W'
|
||||
device_class: power
|
||||
state_class: measurement
|
||||
accuracy_decimals: 0
|
||||
internal_filter: 100ms
|
||||
pin:
|
||||
number: 12
|
||||
inverted: true
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
filters:
|
||||
- multiply: 60
|
||||
total:
|
||||
name: "Electricity Total"
|
||||
unit_of_measurement: "kWh"
|
||||
device_class: energy
|
||||
state_class: total_increasing
|
||||
accuracy_decimals: 3
|
||||
filters:
|
||||
- multiply: 0.001
|
||||
- platform: total_daily_energy
|
||||
name: 'Total Daily Energy'
|
||||
id: sensor_total_daily_energy
|
||||
power_id: sensor_pulse_meter
|
||||
unit_of_measurement: 'kWh'
|
||||
state_class: total_increasing
|
||||
device_class: energy
|
||||
accuracy_decimals: 3
|
||||
filters:
|
||||
# Multiplication factor from W to kW is 0.001
|
||||
- multiply: 0.001
|
||||
|
||||
time:
|
||||
- platform: homeassistant
|
||||
id: homeassistant_time
|
||||
Reference in New Issue
Block a user