diff --git a/config/logbook.yaml b/config/logbook.yaml index 50e3137e..86d8ec9e 100644 --- a/config/logbook.yaml +++ b/config/logbook.yaml @@ -7,6 +7,9 @@ #------------------------------------------- exclude: + domains: + - persistent_notification + - update entity_globs: - sensor.*_location - sensor.*_place @@ -16,6 +19,16 @@ exclude: - input_text.l10s_vacuum_* - input_datetime.l10s_vacuum_* - input_boolean.l10s_vacuum_* + - sensor.*_battery + - sensor.*_battery_state + - sensor.*_uptime* + - sensor.*_last_update* + - sensor.*_since + - sensor.*_last_boot + - sensor.sun_next_* + - sensor.*_activity + - sensor.*_bssid + - sensor.*_wifi_signal_strength entities: - automation.cuckoo_clock - automation.detect_lights_and_adjust_the_brightness_when_turned_on_based_on_time @@ -44,3 +57,4 @@ exclude: - sensor.small_garage_wifi_signal_strength - sensor.time - sensor.upstairs_ac_cooling_numeric + - sensor.vcloudinfo_com diff --git a/config/logger.yaml b/config/logger.yaml index f4a88ef4..55beb657 100755 --- a/config/logger.yaml +++ b/config/logger.yaml @@ -36,6 +36,7 @@ logs: homeassistant.components.mqtt: error homeassistant.components.mqtt.discovery: critical homeassistant.components.persistent_notification: critical + homeassistant.components.template: warn homeassistant.components.rest.sensor: critical homeassistant.components.recorder: error homeassistant.components.sensor.pi_hole: critical @@ -47,7 +48,7 @@ logs: homeassistant.components.switch.unifi: error homeassistant.components.zwave: warn homeassistant.exceptions: info - homeassistant.helpers.script: info + homeassistant.helpers.script: warn homeassistant.helpers.entity: critical homeassistant.loader: warn homeassistant.components.websocket_api: error @@ -58,4 +59,4 @@ logs: urllib3.connectionpool: error requests.packages.urllib3.connectionpool: critical root: warn - \ No newline at end of file + diff --git a/config/packages/logger.yaml b/config/packages/logger.yaml deleted file mode 100755 index a30ef171..00000000 --- a/config/packages/logger.yaml +++ /dev/null @@ -1,38 +0,0 @@ -#------------------------------------------- -# @CCOSTAN -# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig -# Logger Controls - Realtime debugging helpers. -#------------------------------------------- -###################################################################### -## Adjust Home Assistant log level from the UI. -###################################################################### -input_select: - log_level: - name: Log Level - options: - - critical - - fatal - - error - - warning - - warn - - info - - debug - - notset - initial: warn - icon: mdi:bug -################################### -## Dynamically set the log levels without having to restart HASS or edit configuration.yaml -#- Thanks @VDRainer -################################### -automation: - - alias: Log Level - id: 8196e9d4-5174-492e-8523-6ef70ccbd8dd - trigger: - platform: state - entity_id: - - input_select.log_level -# - input_select.log_component - action: - - service: logger.set_level - data: - homeassistant.components: "{{ states.input_select.log_level.state }}" diff --git a/config/packages/vacuum.yaml b/config/packages/vacuum.yaml index f12ff28c..474fdc57 100755 --- a/config/packages/vacuum.yaml +++ b/config/packages/vacuum.yaml @@ -54,19 +54,26 @@ script: - variables: # Weekday runs are sweeping (vacuum only), weekend runs are mopping cleaning_mode: "{{ 'mopping' if now().weekday() in [5, 6] else 'sweeping' }}" - catalog_raw: "{{ states('input_text.l10s_vacuum_room_catalog') | string | replace(' ', '') }}" - queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | string | replace(' ', '') }}" - last_reset: "{{ as_datetime(states('input_datetime.l10s_vacuum_last_weekday_cycle'), default=None) }}" + catalog_raw: "{{ states('input_text.l10s_vacuum_room_catalog') | default('', true) | string | replace(' ', '') }}" + queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}" + last_reset_raw: "{{ states('input_datetime.l10s_vacuum_last_weekday_cycle') }}" + last_reset_date_str: > + {% set dt = as_datetime(last_reset_raw, default=None) %} + {{ dt.date().isoformat() if dt is not none else '' }} + catalog_ints: "{{ catalog_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}" + queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}" # Seed if queue is empty AND last reset was not today - can_seed_today: "{{ last_reset is none or last_reset.date() != now().date() }}" - will_seed: "{{ queue_raw | length == 0 and can_seed_today and catalog_raw | length > 0 }}" - seeded_queue_list: > - {% set q = catalog_raw.split(',') if will_seed else queue_raw.split(',') %} - {{ q | map('int') | list }} + can_seed_today: "{{ last_reset_date_str == '' or last_reset_date_str != now().date().isoformat() }}" + will_seed: > + {% set empty_queue = queue_ints | length == 0 %} + {% set on_demand = is_state('input_boolean.l10s_vacuum_on_demand', 'on') %} + {{ (empty_queue or (on_demand and queue_ints | length <= 1)) and catalog_ints | length > 0 and (can_seed_today or on_demand) }} + seeded_queue_list: "{{ catalog_ints if will_seed else queue_ints }}" + valid_queue_list: "{{ seeded_queue_list }}" # Define bathroom IDs for mopping separation bath_ids: [1, 3, 4] - nonbath_list: "{{ seeded_queue_list | reject('in', bath_ids) | list }}" - bath_list: "{{ seeded_queue_list | select('in', bath_ids) | list }}" + nonbath_list: "{{ valid_queue_list | reject('in', bath_ids) | list }}" + bath_list: "{{ valid_queue_list | select('in', bath_ids) | list }}" # Prioritize non-bathrooms first, then bathrooms segments_to_clean: > {% if nonbath_list | length > 0 %} @@ -216,55 +223,64 @@ automation: - platform: state entity_id: sensor.l10s_vacuum_current_room for: '00:03:00' + - platform: state + entity_id: vacuum.l10s_vacuum + to: 'cleaning' + for: '00:03:00' variables: room_map: {14:'kitchen',12:'dining-room',10:'living room',7:'master-bedroom',15:'foyer',9:'stacey-office',17:'formal-dining',13:'hallway',8:'justin-bedroom',6:'paige-bedroom',4:'master-bathroom',2:'office',1:'pool-bath',3:'kids-bathroom'} + catalog_raw: "{{ states('input_text.l10s_vacuum_room_catalog') | default('', true) | string | replace(' ', '') }}" + catalog_ints: "{{ catalog_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}" queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}" - queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | list | default([], true) }}" + queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list | default([], true) }}" + working_queue: "{{ queue_ints if queue_ints | length > 0 else catalog_ints }}" current_room_id: "{{ trigger.to_state.attributes.room_id | default(state_attr('sensor.l10s_vacuum_current_room', 'room_id'), true) | int(0) }}" - matched_room_id: "{{ current_room_id if current_room_id > 0 and current_room_id in (queue_ints | default([], true)) else 0 }}" - remaining_rooms: > - {% if matched_room_id == 0 %} - {{ queue_ints | join(',') }} + matched_room_id: "{{ current_room_id if current_room_id > 0 and current_room_id in (working_queue | default([], true)) else 0 }}" + remaining_rooms: "{{ working_queue | reject('equalto', matched_room_id) | list | join(',') }}" + remaining_value: > + {% set rem = remaining_rooms | string %} + {% if rem | length == 0 and working_queue | length > 1 %} + {{ working_queue | join(',') }} {% else %} - {% set rem = [] %} - {% set removed = namespace(done=false) %} - {% for r in queue_ints %} - {% if not removed.done and r == matched_room_id %} - {% set removed.done = true %} - {% else %} - {% set rem = rem + [r] %} - {% endif %} - {% endfor %} - {{ rem | join(',') }} + {{ rem }} + {% endif %} + remaining_value_str: > + {% set rv = remaining_value %} + {% if rv is string %} + {{ rv }} + {% elif rv is iterable %} + {{ rv | map('string') | join(',') }} + {% else %} + {{ rv | string }} {% endif %} condition: # Only run if there's actually a queue and a room was successfully matched to the start of the queue - condition: template - value_template: "{{ queue_ints | length > 0 }}" + value_template: "{{ working_queue | length > 0 }}" + - condition: template + value_template: "{{ matched_room_id != 0 }}" - condition: template value_template: "{{ matched_room_id != 0 }}" - - condition: state - entity_id: vacuum.l10s_vacuum - state: 'cleaning' action: - service: input_text.set_value target: entity_id: input_text.l10s_vacuum_room_queue data: - value: "{{ remaining_rooms }}" + value: "{{ remaining_value_str }}" - variables: - cleaned_raw: "{{ states('input_text.l10s_vacuum_rooms_cleaned_today') }}" + cleaned_raw: "{{ states('input_text.l10s_vacuum_rooms_cleaned_today') | default('', true) | string }}" + cleaned_parts: "{{ cleaned_raw | regex_findall('[^,]+') | map('trim') | reject('equalto','') | list }}" room_name: "{{ room_map.get(matched_room_id, states('sensor.l10s_vacuum_current_room')) }}" updated_cleaned: > - {% set parts = cleaned_raw.split(',') if cleaned_raw | length > 0 else [] %} + {% set parts = cleaned_parts %} {% if room_name not in parts %} {{ (parts + [room_name]) | join(', ') }} {% else %} - {{ cleaned_raw }} + {{ parts | join(', ') }} {% endif %} - remaining_count: "{{ remaining_rooms.split(',') | length if remaining_rooms | length > 0 else 0 }}" + remaining_count: "{{ remaining_value_str | regex_findall('[^,]+') | length if remaining_value_str | length > 0 else 0 }}" - service: input_text.set_value target: entity_id: input_text.l10s_vacuum_rooms_cleaned_today @@ -272,8 +288,8 @@ automation: value: "{{ updated_cleaned }}" - service: script.notify_engine data: - title: 'Vacuum room done' - value1: "{{ room_name }} cleaned." + title: 'Vacuum Room Cleaned' + value1: "{{ room_name }} is clean." value2: "Remaining: {{ remaining_count }}." ios_category: 'camera' camera_entity: 'camera.l10s_vacuum_map' @@ -324,9 +340,6 @@ automation: data: datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}" - - alias: 'Away Vacuum: Start Bathrooms When Pending' - id: 6b8d7d0e-fc21-4a2f-bd9e-4c51f6b9c2c3 - - alias: 'Vacuum Sensor Cleaning Silencer' id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f trigger: @@ -371,7 +384,7 @@ automation: data: value1: > {{ "Vacuum error: " ~ states('sensor.l10s_vacuum_error') ~ " [ask Residents to help]" }} - Currently in {{states('sensor.l10s_vacuum_current_room')}}" + Currently in {{states('sensor.l10s_vacuum_current_room')}} - delay: 00:01:00 - service: vacuum.locate entity_id: vacuum.l10s_vacuum diff --git a/config/recorder.yaml b/config/recorder.yaml index 492a7875..2effd498 100755 --- a/config/recorder.yaml +++ b/config/recorder.yaml @@ -11,6 +11,8 @@ #------------------------------------------- #db_url: sqlite:///data/home-assistant_v2.db purge_keep_days: 30 +auto_purge: true +commit_interval: 30 exclude: domains: - camera @@ -47,6 +49,7 @@ exclude: - sensor.*uptime* - sensor.sun_next_* - sensor.vpn_client_* + - sensor.*_wifi_signal_strength - switch.*_do_not_disturb_* - switch.*_repeat_switch - input_text.l10s_vacuum_* @@ -60,6 +63,8 @@ exclude: - number.alarm_panel_1_screen_brightness - script.amp_settings - script.speech_processing + - button.l10s_vacuum_backup_map_1 + - binary_sensor.vcloudinfo_com - sensor.bear_stone - sensor.carlo_ap - sensor.carlo_fast