This commit is contained in:
2026-08-07 10:09:42 +02:00
parent 52d11bfff0
commit 52442c50f1
15 changed files with 827 additions and 252 deletions

View File

@@ -263,6 +263,40 @@ def recorder_config(all_devices):
}
def merge_configs(base_config, override_config):
"""
Merge two configuration dictionaries by combining list-type entries.
For keys that exist in both configs and have list values in override_config,
the lists are concatenated. If base_config has a dict value for that key,
it's first converted to a single-element list before extending.
Keys with list values are moved from override_config to base_config.
Non-list entries in override_config remain unchanged.
Args:
base_config: The base configuration dict to merge into (modified in place)
override_config: The override configuration dict (list entries are removed)
Returns:
tuple: (base_config, override_config) after merging
"""
keys_to_merge = []
for key in override_config:
if isinstance(override_config[key], list):
keys_to_merge.append(key)
for key in keys_to_merge:
override_value = override_config[key]
if key not in base_config:
base_config[key] = []
# Handle case where base_config[key] is a dict (convert to list first)
if isinstance(base_config[key], dict):
base_config[key] = [base_config[key]]
base_config[key].extend(override_value)
del override_config[key]
return base_config, override_config
def create_config(target_directory, development=False):
groups_yaml_path = os.path.join(script_path, 'groups.yaml')
manual_config_path = os.path.join(script_path, 'manual_config.yaml')
@@ -282,12 +316,20 @@ def create_config(target_directory, development=False):
with open(os.path.join(target_directory, 'configuration.yaml'), 'w', encoding="utf-8") as output:
output.write("# Dont' edit manually! this is generated!\n\n")
for key in ['sensor', 'switch', 'light', 'cover', 'binary_sensor']:
if key in manual_config_dict:
if key not in all_devices:
all_devices[key] = []
all_devices[key].extend(manual_config_dict[key])
del manual_config_dict[key]
# Merge list-type configurations from manual_config into all_devices
keys_to_merge = []
for key in manual_config_dict:
if isinstance(manual_config_dict[key], list):
keys_to_merge.append(key)
for key in keys_to_merge:
manual_value = manual_config_dict[key]
if key not in all_devices:
all_devices[key] = []
# Handle case where all_devices[key] is a dict (convert to list first)
if isinstance(all_devices[key], dict):
all_devices[key] = [all_devices[key]]
all_devices[key].extend(manual_value)
del manual_config_dict[key]
yaml.dump(manual_config_dict, output)
yaml.dump(all_devices, output)
yaml.dump(logbook_config(all_devices), output)

View File

@@ -9,7 +9,7 @@ person:
sun:
system_health:
#logbook:
input_boolean:
input_datetime:
input_number:
@@ -178,7 +178,7 @@ ios:
color: "#ffffff"
show_in_carplay: false
show_in_watch: true
- name: schlafzimmer_bett_bringen
- name: schlafzimmer_bett_bringen
background_color: "#6D4C41"
label:
text: "Schlafzimmer Bett bringen"
@@ -366,7 +366,7 @@ homekit:
- light.wohnzimmer_deckenlampe
- light.kuche_deckenlampe
- light.esszimmer_deckenlampe_west
- light.esszimmer_deckenlampe_mitte
- light.esszimmer_deckenlampe_mitte
- cover.wohnzimmer_fenster_rollo
- cover.wohnzimmer_terrassentur_rollo
- cover.kuche_fenster_rollo
@@ -430,6 +430,10 @@ homekit:
- cover.kinderzimmer_rollo
- light.music_mouse_regal_licht
- light.kinderzimmer_fluter
# -- Arbeitszimmer Oben
- light.arbeitszimmer_oben_fluter
- cover.arbeitszimmer_oben_rollo_ost
- cover.arbeitszimmer_oben_rollo_west
#google_assistant:
# project_id: homeassistant-d3afc
@@ -521,7 +525,7 @@ sysdweb:
services:
- lircd
- squeezelite
- shairport-sync
- shairport-sync
- dht22_sensing
- host: bedroompi.fritz.box
port: 10080
@@ -530,7 +534,7 @@ sysdweb:
services:
- lircd
- squeezelite
- shairport-sync
- shairport-sync
- dht22_sensing
#- host: esszimmerradio.fritz.box
# port: 10080
@@ -539,7 +543,7 @@ sysdweb:
# services:
# - lircd
# - squeezelite
# - shairport-sync
# - shairport-sync
# - sispmctl
- host: musikserverwohnzimmeroben.fritz.box
port: 10080
@@ -548,9 +552,9 @@ sysdweb:
services:
- irserver
- squeezelite
- shairport-sync
- shairport-sync
#- dht22_sensing
- logitechmediaserver
- logitechmediaserver
lirc_network:
- host: kitchenpi.fritz.box
@@ -566,7 +570,7 @@ lirc_network:
binary_sensor:
- platform: lirc_network # sensor to show for each host if it is currently connected
- platform: sysdweb
- platform: sysdweb
- platform: ffmpeg_noise
input: rtsp://camera:1238djie!d24yu@babycamera:554/stream2
extra_arguments: -filter:a highpass=f=300,lowpass=f=2500,volume=volume=2
@@ -578,12 +582,12 @@ media_player:
- platform: squeezebox_telnet
host: server.fritz.box
- platform: squeezebox_telnet
host: musikserverWohnzimmerOben.fritz.box
host: musikserverWohnzimmerOben.fritz.box
template:
- sensor:
- default_entity_id: motion_combined
friendly_name: Bewegung
- unique_id: motion_combined
name: Bewegung
state: >
{%- set pirs = {'Gang Mitte': states.binary_sensor.gang_bewegungsmelder_mitte,
'Eingang': states.binary_sensor.gang_bewegungsmelder_ost,
@@ -594,8 +598,8 @@ template:
{{ pir_name }}
{% endif %}
{% endfor %}
- default_entity_id: oxilife_ph_filtered
friendly_name: Oxilify pH Filtered
- unique_id: oxilife_ph_filtered
name: Oxilify pH Filtered
unit_of_measurement: "{{ states.sensor.oxilife_ph.attributes.unit_of_measurement }}"
state: >
{% if 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float %}
@@ -603,8 +607,8 @@ template:
{% else %}
unknown
{% endif %}
- default_entity_id: oxilife_redox_level_filtered
friendly_name: Oxilify Redox Filtered
- unique_id: oxilife_redox_level_filtered
name: Oxilify Redox Filtered
unit_of_measurement: "{{ states.sensor.oxilife_redox_level.attributes.unit_of_measurement }}"
state: >
{% if 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float %}
@@ -612,8 +616,8 @@ template:
{% else %}
unknown
{% endif %}
- default_entity_id: pool_temperatur_filtered
friendly_name: Oxilify Temperature Filtered
- unique_id: pool_temperatur_filtered
name: Oxilify Temperature Filtered
unit_of_measurement: "{{ states.sensor.pool_temperatur.attributes.unit_of_measurement }}"
state: >
{% if 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float %}
@@ -760,5 +764,3 @@ light:
entities:
- light.arbeitszimmer_oben_fluter_hinten
- light.arbeitszimmer_oben_fluter_vorne