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:
|
esphome:
|
||||||
name: $device_name
|
name: adesoffice_resistive_control
|
||||||
friendly_name: $friendly_name
|
friendly_name: Ade's office Resistive control panel
|
||||||
on_boot:
|
|
||||||
- delay: 2s
|
|
||||||
|
|
||||||
esp32:
|
esp32:
|
||||||
board: esp32dev
|
board: esp32dev
|
||||||
framework:
|
framework:
|
||||||
type: arduino
|
type: arduino
|
||||||
|
|
||||||
logger:
|
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:
|
api:
|
||||||
encryption:
|
encryption:
|
||||||
key: "FdLcYGMsxFkCFoY8UUu0q/huDesKrcy4+vNQujhbXVE="
|
key: "yDySAAGJIQIgZcDURBrLtWiVYNteCm155yyZUnrMjZY="
|
||||||
on_client_connected:
|
on_client_connected:
|
||||||
- lvgl.widget.show: haStatusIcon
|
- lvgl.widget.show: haStatusIcon
|
||||||
on_client_disconnected:
|
on_client_disconnected:
|
||||||
@@ -95,10 +23,151 @@ api:
|
|||||||
else:
|
else:
|
||||||
- lvgl.widget.hide: haStatusIcon
|
- 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:
|
display:
|
||||||
- id: mainDisplay
|
- id: mainDisplay
|
||||||
platform: ili9xxx
|
platform: ili9xxx
|
||||||
model: ili9341
|
model: ILI9341
|
||||||
spi_id: tft
|
spi_id: tft
|
||||||
cs_pin:
|
cs_pin:
|
||||||
number: 15
|
number: 15
|
||||||
@@ -109,15 +178,8 @@ display:
|
|||||||
invert_colors: false
|
invert_colors: false
|
||||||
update_interval: never
|
update_interval: never
|
||||||
auto_clear_enabled: false
|
auto_clear_enabled: false
|
||||||
pixel_mode: 16bit
|
|
||||||
transform:
|
transform:
|
||||||
mirror_y: true
|
mirror_y: true
|
||||||
mirror_x: true
|
|
||||||
swap_xy: false
|
|
||||||
dimensions:
|
|
||||||
height: 320
|
|
||||||
width: 240
|
|
||||||
color_order: rgb
|
|
||||||
init_sequence:
|
init_sequence:
|
||||||
- [0x01 ]
|
- [0x01 ]
|
||||||
- [0xcf, 0x00, 0xC1, 0x30 ]
|
- [0xcf, 0x00, 0xC1, 0x30 ]
|
||||||
@@ -142,119 +204,31 @@ display:
|
|||||||
- [0x11 ] # SLPOUT Exit sleep
|
- [0x11 ] # SLPOUT Exit sleep
|
||||||
- [0x29 ] # DISPLAY_ON
|
- [0x29 ] # DISPLAY_ON
|
||||||
|
|
||||||
sensor:
|
touchscreen:
|
||||||
- platform: adc
|
platform: xpt2046
|
||||||
pin: 34
|
id: mainTouchscreen
|
||||||
name: "Brightness"
|
spi_id: touch
|
||||||
update_interval: 60s
|
cs_pin: 33
|
||||||
id: lsr
|
interrupt_pin: 36
|
||||||
- platform: homeassistant
|
threshold: 800
|
||||||
entity_id: sensor.k2plus_c06b_print_progress
|
calibration:
|
||||||
id: sensor_3dprinter_percentage
|
x_min: 410
|
||||||
on_value:
|
x_max: 3349
|
||||||
then:
|
y_min: 179
|
||||||
- lvgl.label.update:
|
y_max: 3958
|
||||||
id: lbl_3dprinter_percentage
|
on_release:
|
||||||
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:
|
|
||||||
then:
|
then:
|
||||||
- if:
|
- if:
|
||||||
condition:
|
condition: lvgl.is_paused
|
||||||
lambda: 'return x == "printing";'
|
|
||||||
then:
|
then:
|
||||||
- lvgl.widget.update:
|
- logger.log: "LVGL resuming"
|
||||||
id: button3dPrinter
|
- lvgl.resume:
|
||||||
state:
|
- lvgl.widget.redraw:
|
||||||
disabled: ON
|
- light.turn_on: backlight
|
||||||
else:
|
transform:
|
||||||
- lvgl.widget.update:
|
mirror_x: false
|
||||||
id: button3dPrinter
|
mirror_y: true
|
||||||
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()]
|
|
||||||
number:
|
number:
|
||||||
- platform: template
|
- platform: template
|
||||||
name: "LVGL Screen Timeout"
|
name: "LVGL Screen Timeout"
|
||||||
@@ -601,24 +575,6 @@ lvgl:
|
|||||||
id: lbl_3dprinter_modelname
|
id: lbl_3dprinter_modelname
|
||||||
width: 240
|
width: 240
|
||||||
text: "Model: None"
|
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:
|
- meter:
|
||||||
id: meter_3dprinter_nozzle
|
id: meter_3dprinter_nozzle
|
||||||
align: BOTTOM_LEFT
|
align: BOTTOM_LEFT
|
||||||
@@ -637,6 +593,12 @@ lvgl:
|
|||||||
width: 2
|
width: 2
|
||||||
color: 0xFF0000
|
color: 0xFF0000
|
||||||
r_mod: -4
|
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_from: 0 # scale for the value labels
|
||||||
range_to: 380
|
range_to: 380
|
||||||
angle_range: 240
|
angle_range: 240
|
||||||
@@ -656,7 +618,7 @@ lvgl:
|
|||||||
widgets:
|
widgets:
|
||||||
- label:
|
- label:
|
||||||
id: gauge_3dprinter_nozzle_text
|
id: gauge_3dprinter_nozzle_text
|
||||||
text: "-.-C"
|
text: "-.-°C"
|
||||||
align_to:
|
align_to:
|
||||||
id: meter_3dprinter_nozzle
|
id: meter_3dprinter_nozzle
|
||||||
align: CENTER
|
align: CENTER
|
||||||
@@ -667,30 +629,6 @@ lvgl:
|
|||||||
id: meter_3dprinter_nozzle
|
id: meter_3dprinter_nozzle
|
||||||
align: CENTER
|
align: CENTER
|
||||||
y: 45
|
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:
|
- meter:
|
||||||
id: meter_3dprinter_bed
|
id: meter_3dprinter_bed
|
||||||
align: BOTTOM_LEFT
|
align: BOTTOM_LEFT
|
||||||
@@ -709,6 +647,12 @@ lvgl:
|
|||||||
width: 2
|
width: 2
|
||||||
color: 0xFF0000
|
color: 0xFF0000
|
||||||
r_mod: -4
|
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_from: 0 # scale for the value labels
|
||||||
range_to: 130
|
range_to: 130
|
||||||
angle_range: 240
|
angle_range: 240
|
||||||
@@ -728,7 +672,7 @@ lvgl:
|
|||||||
widgets:
|
widgets:
|
||||||
- label:
|
- label:
|
||||||
id: gauge_3dprinter_bed_text
|
id: gauge_3dprinter_bed_text
|
||||||
text: "-.-C"
|
text: "-.-°C"
|
||||||
align_to:
|
align_to:
|
||||||
id: meter_3dprinter_bed
|
id: meter_3dprinter_bed
|
||||||
align: CENTER
|
align: CENTER
|
||||||
@@ -739,30 +683,6 @@ lvgl:
|
|||||||
id: meter_3dprinter_bed
|
id: meter_3dprinter_bed
|
||||||
align: CENTER
|
align: CENTER
|
||||||
y: 45
|
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:
|
on_idle:
|
||||||
@@ -871,4 +791,3 @@ switch:
|
|||||||
id: buttonScreens
|
id: buttonScreens
|
||||||
state:
|
state:
|
||||||
checked: OFF
|
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:
|
logger:
|
||||||
level: DEBUG
|
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