updates
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user