Update Home Assistant configuration and automations
- Updated .ha_run.lock to reflect the new Home Assistant version 2026.4.2. - Enhanced automations.yaml with improved entity targeting and additional automation actions for window shading. - Refactored configuration.yaml to include templates from a separate file for better organization. - Added new ESPHome configurations for window sensors and updated KNX configurations for door contacts and buttons. - Removed deprecated pv_to_dhw.yaml package to streamline the project.
This commit is contained in:
+2
-10
@@ -1,11 +1,3 @@
|
|||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {}
|
||||||
"postgres": {
|
}
|
||||||
"command": "npx",
|
|
||||||
"args": ["-y", "@modelcontextprotocol/server-postgres"],
|
|
||||||
"env": {
|
|
||||||
"POSTGRES_CONNECTION_STRING": "postgresql://hass:FTXZ9r8iw0fTT655Q6tePTzp@synology.cobe.space:5433/hass"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
{"pid": 67, "version": 1, "ha_version": "2026.3.1", "start_ts": 1772977331.1190224}
|
{"pid": 67, "version": 1, "ha_version": "2026.4.2", "start_ts": 1776243874.2238262}
|
||||||
+291
-667
File diff suppressed because it is too large
Load Diff
+1
-13
@@ -34,16 +34,4 @@ automation: !include automations.yaml
|
|||||||
script: !include scripts.yaml
|
script: !include scripts.yaml
|
||||||
scene: !include scenes.yaml
|
scene: !include scenes.yaml
|
||||||
knx: !include knx/knx.yaml
|
knx: !include knx/knx.yaml
|
||||||
|
template: !include templates.yaml
|
||||||
# Storage for Bubble Card Modules
|
|
||||||
template:
|
|
||||||
- trigger:
|
|
||||||
- trigger: event
|
|
||||||
event_type: bubble_card_update_modules
|
|
||||||
sensor:
|
|
||||||
- name: "Bubble Card Modules"
|
|
||||||
state: "saved"
|
|
||||||
icon: "mdi:puzzle"
|
|
||||||
attributes:
|
|
||||||
modules: "{{ trigger.event.data.modules }}"
|
|
||||||
last_updated: "{{ trigger.event.data.last_updated }}"
|
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
esphome:
|
||||||
|
name: fenstersensor
|
||||||
|
friendly_name: Fenstersensor
|
||||||
|
|
||||||
|
esp8266:
|
||||||
|
board: d1_mini
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
fast_connect: true
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
deep_sleep:
|
||||||
|
id: deep_sleep_control
|
||||||
|
run_duration: 15s
|
||||||
|
sleep_duration: 60min
|
||||||
|
|
||||||
|
binary_sensor:
|
||||||
|
- platform: gpio
|
||||||
|
pin:
|
||||||
|
number: D1
|
||||||
|
mode: INPUT_PULLUP
|
||||||
|
inverted: true
|
||||||
|
name: "Fenster 1"
|
||||||
|
device_class: window
|
||||||
|
filters:
|
||||||
|
- delayed_on: 50ms
|
||||||
|
- delayed_off: 50ms
|
||||||
|
|
||||||
|
- platform: gpio
|
||||||
|
pin:
|
||||||
|
number: D2
|
||||||
|
mode: INPUT_PULLUP
|
||||||
|
inverted: true
|
||||||
|
name: "Fenster 2"
|
||||||
|
device_class: window
|
||||||
|
filters:
|
||||||
|
- delayed_on: 50ms
|
||||||
|
- delayed_off: 50ms
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
esphome:
|
||||||
|
name: fenstersensor
|
||||||
|
friendly_name: Fenstersensor
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
variant: esp32
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
fast_connect: true
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
deep_sleep:
|
||||||
|
id: deep_sleep_control
|
||||||
|
run_duration: 8s
|
||||||
|
esp32_ext1_wakeup:
|
||||||
|
pins:
|
||||||
|
- number: GPIO4
|
||||||
|
allow_other_uses: true
|
||||||
|
- number: GPIO13
|
||||||
|
allow_other_uses: true
|
||||||
|
mode: ANY_HIGH
|
||||||
|
|
||||||
|
binary_sensor:
|
||||||
|
- platform: gpio
|
||||||
|
pin:
|
||||||
|
number: GPIO4
|
||||||
|
mode: INPUT_PULLUP
|
||||||
|
inverted: true
|
||||||
|
allow_other_uses: true
|
||||||
|
name: "Fenster 1"
|
||||||
|
device_class: window
|
||||||
|
filters:
|
||||||
|
- delayed_on: 50ms
|
||||||
|
- delayed_off: 50ms
|
||||||
|
|
||||||
|
- platform: gpio
|
||||||
|
pin:
|
||||||
|
number: GPIO13
|
||||||
|
mode: INPUT_PULLUP
|
||||||
|
inverted: true
|
||||||
|
allow_other_uses: true
|
||||||
|
name: "Fenster 2"
|
||||||
|
device_class: window
|
||||||
|
filters:
|
||||||
|
- delayed_on: 50ms
|
||||||
|
- delayed_off: 50ms
|
||||||
+5
-2
@@ -1,5 +1,8 @@
|
|||||||
- name: 'Garagentor 1'
|
- name: 'Garagentor Conny öffnen'
|
||||||
address: '5/4/0'
|
address: '5/4/0'
|
||||||
|
|
||||||
- name: 'Garagentor 2'
|
- name: 'Garagentor Ben öffnen'
|
||||||
address: '5/4/1'
|
address: '5/4/1'
|
||||||
|
|
||||||
|
- name: 'Haustür öffnen'
|
||||||
|
address: '0/0/2'
|
||||||
+1
-1
@@ -64,4 +64,4 @@
|
|||||||
target_temperature_state_address: "4/3/10"
|
target_temperature_state_address: "4/3/10"
|
||||||
operation_mode_address: "4/3/16"
|
operation_mode_address: "4/3/16"
|
||||||
operation_mode_state_address: "4/3/16"
|
operation_mode_state_address: "4/3/16"
|
||||||
active_state_address: "4/3/18"
|
active_state_address: "4/3/18"
|
||||||
|
|||||||
+1
-1
@@ -97,4 +97,4 @@
|
|||||||
move_short_address: "4/2/11"
|
move_short_address: "4/2/11"
|
||||||
stop_address: "4/2/11"
|
stop_address: "4/2/11"
|
||||||
position_address: "4/2/13"
|
position_address: "4/2/13"
|
||||||
position_state_address: "4/2/12"
|
position_state_address: "4/2/12"
|
||||||
|
|||||||
@@ -226,4 +226,3 @@
|
|||||||
brightness_state_address: "2/1/14"
|
brightness_state_address: "2/1/14"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,3 +13,22 @@
|
|||||||
- name: 'SS_OG1_FL_Tablet'
|
- name: 'SS_OG1_FL_Tablet'
|
||||||
address: '3/4/2'
|
address: '3/4/2'
|
||||||
state_address: '3/4/3'
|
state_address: '3/4/3'
|
||||||
|
|
||||||
|
- name: 'SE_EG_WZ_01 Door Contact'
|
||||||
|
address: '2/5/4'
|
||||||
|
state_address: '2/5/4'
|
||||||
|
|
||||||
|
|
||||||
|
- name: 'SE_EG_WZ_02 Door Contact'
|
||||||
|
address: '2/5/6'
|
||||||
|
state_address: '2/5/6'
|
||||||
|
|
||||||
|
|
||||||
|
- name: 'SE_EG_WZ_03 Door Contact'
|
||||||
|
address: '2/5/7'
|
||||||
|
state_address: '2/5/7'
|
||||||
|
|
||||||
|
|
||||||
|
- name: 'SE_EG_WC_01 Door Contact'
|
||||||
|
address: '2/5/8'
|
||||||
|
state_address: '2/5/8'
|
||||||
|
|||||||
@@ -1,135 +0,0 @@
|
|||||||
# ems-esp
|
|
||||||
|
|
||||||
# Aktuelle Warmwassertemperatur: sensor.boiler_dhw_current_intern_temperature
|
|
||||||
# Soll Warmwassertemperatur: sensor.boiler_dhw_set_temperature
|
|
||||||
# Soll Warmwassertemperatur: (einstellen) number.boiler_dhw_comfort_switch_off
|
|
||||||
# DHW Heizen aktiv: binary_sensor.boiler_dhw_charging
|
|
||||||
|
|
||||||
# sh15t
|
|
||||||
|
|
||||||
# MPPT Total Power: sensor.sh15t_mppt_total_power
|
|
||||||
# Total Export Active Power: sensor.sh15t_total_export_active_power
|
|
||||||
|
|
||||||
|
|
||||||
template:
|
|
||||||
- sensor:
|
|
||||||
- name: "DHW Boost available"
|
|
||||||
state: >
|
|
||||||
{% set dhw_temp = states('sensor.boiler_dhw_current_intern_temperature') | float %}
|
|
||||||
{% set dhw_setpoint = states('sensor.boiler_dhw_set_temperature') | float %}
|
|
||||||
{% set temp_diff = dhw_setpoint - dhw_temp %}
|
|
||||||
{{ temp_diff > 5 }}
|
|
||||||
|
|
||||||
- name: "DHW Boost Demand"
|
|
||||||
state: >
|
|
||||||
{% set excess = states('sensor.sh15t_total_export_active_power') | float(0) %}
|
|
||||||
{% set dhw_available = states('sensor.dhw_boost_available') %}
|
|
||||||
{% set wp_power = states('input_number.dhw_pv_min_excess') | float %}
|
|
||||||
{{ excess > wp_power and dhw_available }}
|
|
||||||
|
|
||||||
- binary_sensor:
|
|
||||||
- name: "DHW PV Boost active"
|
|
||||||
state: >
|
|
||||||
{{ states('input_boolean.dhw_pv_boost_enabled') == 'on' and
|
|
||||||
states('sensor.dhw_boost_demand') }}
|
|
||||||
|
|
||||||
input_boolean:
|
|
||||||
dhw_pv_boost_enabled:
|
|
||||||
name: "DHW PV Boost enabled"
|
|
||||||
icon: mdi:water-boiler-auto
|
|
||||||
initial: false
|
|
||||||
|
|
||||||
input_number:
|
|
||||||
dhw_pv_boost_temp:
|
|
||||||
name: "DHW PV Boost Setpoint temperature"
|
|
||||||
min: 45
|
|
||||||
max: 65
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: "°C"
|
|
||||||
initial: 60
|
|
||||||
|
|
||||||
dhw_pv_min_excess:
|
|
||||||
name: "Minimal PV Excess for DHW"
|
|
||||||
min: 1
|
|
||||||
max: 5
|
|
||||||
step: 0.1
|
|
||||||
unit_of_measurement: "kW"
|
|
||||||
initial: 2
|
|
||||||
|
|
||||||
input_datetime:
|
|
||||||
dhw_pv_boost_start:
|
|
||||||
name: "PV-Boost Earliest Start Time"
|
|
||||||
has_time: true
|
|
||||||
initial: "10:00:00"
|
|
||||||
|
|
||||||
dhw_pv_boost_end:
|
|
||||||
name: "PV-Boost Latest End Time"
|
|
||||||
has_time: true
|
|
||||||
initial: "17:00:00"
|
|
||||||
|
|
||||||
# automation:
|
|
||||||
# - id: 'dhw_pv_boost_start'
|
|
||||||
# alias: "DHW PV-Boost Start"
|
|
||||||
# trigger:
|
|
||||||
# - platform: numeric_state
|
|
||||||
# entity_id: sensor.sh15t_total_export_active_power
|
|
||||||
# above: input_number.dhw_pv_min_excess
|
|
||||||
# for:
|
|
||||||
# minutes: 5
|
|
||||||
# condition:
|
|
||||||
# - condition: state
|
|
||||||
# entity_id: input_boolean.dhw_pv_boost_enabled
|
|
||||||
# state: 'on'
|
|
||||||
# - condition: time
|
|
||||||
# after: input_datetime.dhw_pv_boost_start
|
|
||||||
# before: input_datetime.dhw_pv_boost_end
|
|
||||||
# - condition: numeric_state
|
|
||||||
# entity_id: sensor.boiler_dhw_current_intern_temperature
|
|
||||||
# below: input_number.dhw_pv_boost_temp
|
|
||||||
# - condition: state
|
|
||||||
# entity_id: binary_sensor.boiler_dhw_charging
|
|
||||||
# state: 'off'
|
|
||||||
# action:
|
|
||||||
# - service: number.set_value
|
|
||||||
# target:
|
|
||||||
# entity_id: number.boiler_dhw_set_temperature
|
|
||||||
# data:
|
|
||||||
# value: "{{ states('input_number.dhw_pv_boost_temp') }}"
|
|
||||||
# - service: switch.turn_on
|
|
||||||
# target:
|
|
||||||
# entity_id: switch.boiler_dhw_comfort
|
|
||||||
# - service: script.cobe_haus_benachrichtigung
|
|
||||||
# data:
|
|
||||||
# message: "DHW PV-Boost started - Excess: {{ states('sensor.sh15t_total_export_active_power') }}kW"
|
|
||||||
# title: "COBE Haus - DHW PV-Boost"
|
|
||||||
|
|
||||||
# - id: 'dhw_pv_boost_stop'
|
|
||||||
# alias: "DHW PV-Boost Stop"
|
|
||||||
# trigger:
|
|
||||||
# - platform: numeric_state
|
|
||||||
# entity_id: sensor.sh15t_total_export_active_power
|
|
||||||
# below: 1.0
|
|
||||||
# for:
|
|
||||||
# minutes: 10
|
|
||||||
# - platform: numeric_state
|
|
||||||
# entity_id: sensor.boiler_dhw_current_intern_temperature
|
|
||||||
# above: input_number.dhw_pv_boost_temp
|
|
||||||
# - platform: time
|
|
||||||
# at: input_datetime.dhw_pv_boost_end
|
|
||||||
# condition:
|
|
||||||
# - condition: state
|
|
||||||
# entity_id: binary_sensor.dhw_pv_boost_aktiv
|
|
||||||
# state: 'on'
|
|
||||||
# action:
|
|
||||||
# - service: number.set_value
|
|
||||||
# target:
|
|
||||||
# entity_id: number.boiler_dhw_set_temperature
|
|
||||||
# data:
|
|
||||||
# value: 50
|
|
||||||
# - service: switch.turn_off
|
|
||||||
# target:
|
|
||||||
# entity_id: switch.boiler_dhw_comfort
|
|
||||||
# - service: script.cobe_haus_benachrichtigung
|
|
||||||
# data:
|
|
||||||
# message: "DHW PV-Boost stopped - Temperature reached or excess too low"
|
|
||||||
# title: "COBE Haus - DHW PV-Boost"
|
|
||||||
@@ -62,95 +62,6 @@ cobe_haus_benachrichtigung_mit_bild:
|
|||||||
required: true
|
required: true
|
||||||
alias: COBE Haus Benachrichtigung mit Bild
|
alias: COBE Haus Benachrichtigung mit Bild
|
||||||
description: ''
|
description: ''
|
||||||
smarte_beschattung:
|
|
||||||
sequence: []
|
|
||||||
fields:
|
|
||||||
cover_entity:
|
|
||||||
description: Entity ID des Rollladens
|
|
||||||
example: cover.wohnzimmer_rolladen
|
|
||||||
required: true
|
|
||||||
selector:
|
|
||||||
entity:
|
|
||||||
domain: cover
|
|
||||||
window_azimuth_start:
|
|
||||||
description: Start-Azimut des Fensters (Grad)
|
|
||||||
example: 135
|
|
||||||
required: true
|
|
||||||
default: 90
|
|
||||||
selector:
|
|
||||||
number:
|
|
||||||
min: 0
|
|
||||||
max: 360
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: °
|
|
||||||
window_azimuth_end:
|
|
||||||
description: End-Azimut des Fensters (Grad)
|
|
||||||
example: 225
|
|
||||||
required: true
|
|
||||||
default: 270
|
|
||||||
selector:
|
|
||||||
number:
|
|
||||||
min: 0
|
|
||||||
max: 360
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: °
|
|
||||||
min_elevation:
|
|
||||||
description: Minimale Sonnenhöhe für Beschattung
|
|
||||||
example: 15
|
|
||||||
default: 10
|
|
||||||
selector:
|
|
||||||
number:
|
|
||||||
min: 0
|
|
||||||
max: 90
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: °
|
|
||||||
max_elevation:
|
|
||||||
description: Maximale Sonnenhöhe für stärkste Beschattung
|
|
||||||
example: 60
|
|
||||||
default: 50
|
|
||||||
selector:
|
|
||||||
number:
|
|
||||||
min: 0
|
|
||||||
max: 90
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: °
|
|
||||||
max_closed_position:
|
|
||||||
description: Maximal geschlossene Position (0=ganz zu, 100=ganz auf)
|
|
||||||
example: 20
|
|
||||||
default: 15
|
|
||||||
selector:
|
|
||||||
number:
|
|
||||||
min: 0
|
|
||||||
max: 100
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: '%'
|
|
||||||
fully_open_position:
|
|
||||||
description: Vollständig geöffnete Position
|
|
||||||
example: 100
|
|
||||||
default: 100
|
|
||||||
selector:
|
|
||||||
number:
|
|
||||||
min: 0
|
|
||||||
max: 100
|
|
||||||
step: 1
|
|
||||||
unit_of_measurement: '%'
|
|
||||||
block_entity:
|
|
||||||
description: Block-Entity (wenn aktiviert, wird Rolladen nicht bewegt)
|
|
||||||
example: input_boolean.wohnzimmer_rolladen_block
|
|
||||||
required: false
|
|
||||||
selector:
|
|
||||||
entity:
|
|
||||||
domain:
|
|
||||||
- input_boolean
|
|
||||||
- binary_sensor
|
|
||||||
- switch
|
|
||||||
enable_logging:
|
|
||||||
description: Debug-Logging aktivieren
|
|
||||||
default: false
|
|
||||||
selector:
|
|
||||||
boolean:
|
|
||||||
alias: Smarte Beschattung
|
|
||||||
description: ''
|
|
||||||
cobe_haus_kritische_benachrichtigung:
|
cobe_haus_kritische_benachrichtigung:
|
||||||
sequence:
|
sequence:
|
||||||
- action: notify.mobile_app_kn0x_tech_iphone
|
- action: notify.mobile_app_kn0x_tech_iphone
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
- trigger:
|
||||||
|
- trigger: event
|
||||||
|
event_type: bubble_card_update_modules
|
||||||
|
sensor:
|
||||||
|
- name: "Bubble Card Modules"
|
||||||
|
state: "saved"
|
||||||
|
icon: "mdi:puzzle"
|
||||||
|
attributes:
|
||||||
|
modules: "{{ trigger.event.data.modules }}"
|
||||||
|
last_updated: "{{ trigger.event.data.last_updated }}"
|
||||||
|
|
||||||
|
- sensor:
|
||||||
|
- name: "Interpolated Brightness from Azimuth"
|
||||||
|
unit_of_measurement: "lx"
|
||||||
|
state: >
|
||||||
|
{% set azimut = state_attr('sun.sun', 'azimuth') | float %}
|
||||||
|
|
||||||
|
{% set brightness_south = states('sensor.se_au_gt_lux_south') | float(0) %}
|
||||||
|
{% set brightness_west = states('sensor.se_au_gt_lux_west') | float(0) %}
|
||||||
|
{% set brightness_east = states('sensor.se_au_gt_lux_east') | float(0) %}
|
||||||
|
|
||||||
|
{% if azimut >= 90 and azimut < 180 %}
|
||||||
|
{# Ost → Süd: Interpolation #}
|
||||||
|
{% set t = (azimut - 90) / 90 %}
|
||||||
|
{{ (brightness_east * (1 - t) + brightness_south * t) | round(0) }}
|
||||||
|
|
||||||
|
{% elif azimut >= 180 and azimut < 270 %}
|
||||||
|
{# Süd → West: Interpolation #}
|
||||||
|
{% set t = (azimut - 180) / 90 %}
|
||||||
|
{{ (brightness_south * (1 - t) + brightness_west * t) | round(0) }}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{# Nachts / Nord: 0 #}
|
||||||
|
0
|
||||||
|
{% endif %}
|
||||||
|
|||||||
Reference in New Issue
Block a user