################################################################ ## Battery Alert Package by NotoriousBDG ## ## Source: https://raw.githubusercontent.com/notoriousbdg/Home-AssistantConfig/master/packages/battery_alert.yaml ################################################################ ################################################################ ## Changelog ################################################################ ## ## 1.0.0 (2018-02-14) ## Added ## - Added version number to enable better tracking ## ## 1.0.1 (2018-02-15) ## Added ## - Added battery_sensor_creation_disabled attibute to skip ## creating a battery sensor even when an battery attribute ## exists. ## ## 1.0.2 (2018-04-06) ## Added ## - Added battery icon to sensors. ## ## 1.0.3 (2018-05-10) ## Changed ## - Change device_class to battery and remove icon, which ## allows dynamic icons in 0.69. ## ## 1.0.4 (2018-05-11) ## Changed ## - Fixed condition battery_sensor_creation_disabled condition ## Added ## - Documented a jinja template that can be use to assist ## with creating a group containing all battery sensors. ## ## 1.0.5 (2018-05-14) ## Changed ## - Changed formatting of notifications to improve readability ## - Nofity via Slack immediately when thresholds are modified ## Added ## - Entities with device_class of battery no longer need ## battery in their friendly name to be monitored ## - Don't create a battery sensor from an entity if ## device_class is battery ## ## 1.0.6 (2018-05-14) ## Changed ## - Added object_id to notifications ## - Updated Battery Status group jinja code to check for ## battery device_class ## ## 1.0.7 (2018-05-16) ## Added ## - Added unique_id to disambiguate sensors with duplicate ## names ## - Added source info to mqtt config topic ## - Consider friendly names and entity_ids that end with _bat ## as a battery sensor (needed for rflink battery sensors) ## - Consider entities with icon of battery, battery-alert, or ## battery-unknown as a battery sensor regardles of its name ## - Consider entity_ids containing battery as a battery sensor ## Changed ## - Reduce code duplication using yaml anchors and references ## - Changed MQTT topic to be based on entity_id ## - Improve method of filtering non-battery devices that have ## battery in their name. Detection is now based on icon ## rather than keywords. ## ## 1.0.8 (2018-06-01) ## Added ## - Add support for defining battery_template attibute to ## allow manipulation of value of battery sensor ## - Support battery attributes that contain strings ## Removed ## - Cleaned up notifications by removing object id ## ## 1.0.9 (2018-06-08) ## Added ## - Automatically create Battery Status group containing all ## discovered batteries ## Removed ## - Removed sample jinja to create battery status group yaml ## ## 1.0.10 (2018-06-08) ## Added ## - Moved group.update_battery_status_group_members to Battery ## Alert group ## ## 1.1.0 (2018-08-09) ## Added ## - Added Batteries view ## - Added Telegram notification automation ## - Added Pushover notification automation ## - Added attributes to battery entities created via mqtt: ## entity_id, attribute, mqtt_config_topic, and mqtt_state_topic ## Changed ## - Simplified trigger for update_battery_status_group_members ## automation ## - Refactored conditions on automations to rely on ## group.battery_status members ## Breaking Changes ## - The attribute additions requires restarting Home Assistant ## after the first state change or clearing retained MQTT topics ## ## 1.1.1 (2018-08-11) ## Added ## - Added input text box named `MQTT Topic to Clear`, which can be used ## to clear MQTT topics with retained messages ## - Set initial_state to on for all automations to ensure they are enabled ## on startup ## Changed ## - Consider entities with battery in their entity_id or friendly_name a ## battery sensor if neither an icon nor a device class is defined ## - Consolidated the battery_sensor_from_* automations into a single ## automation ## ## 1.1.2 (2018-08-23) ## Fixed ## - Fixed issue where non-battery sensors with Battery in their name are ## added to group.battery_status ## ## 1.1.3 (2018-11-17) ## Fixed ## - Filter out trigger=none from automation.battery_sensor_from_attributes ## - Don't convert float to int in mqtt payload ## ## 1.1.4 (2018-11-17) ## Fixed ## - Ignore entities with null states ## - Fix issue causing TypeError: object of type 'NoneType' has no len() ## ## 1.1.5 (2018-11-18) ## Added ## - Add support for defining battery_template_string attibute to ## support templates that return strings ## ## 1.1.6 (2018-11-21) ## Removed ## - Removed attribute named attribute on the sensors ## Added ## - Added attribute to the MQTT sensors with the same name and value as the ## original entity ## ## 1.2.0 (2019-01-20) ## Breaking Changes ## - Setting up notifications have changed. Enter the name of the notifier in the `Notifier Name` input text box ## and select the notifier format using the `Notifier Format` input select. ## Changed ## - Migrate attributes from json_attributes to json_attributes_topic ## - Remove % unit for battery level attributes that contain strings ## - Replaced mqtt_config_topic and mqtt_state_topic attributes with delete_battery_sensor attribute ## to make deleting battery sensors easier ## - Renamed MQTT Topic to Clear input text box to Delete a Battery Sensor ## Added ## - Battery attributes containing strings now have dynamic icons that change with battery status ## - Added Notifier Name input text box to store name of the notifier to use for notifications (defaults to notify.notify) ## - Added Notifier Format input select to allow selection of notification format. Options are Default and Slack. ## - Added input_boolean.low_batteries to help with automations. True means there are low batteries. ## ## 1.2.1 (2019-01-23) ## Changed ## - Fixed Time platform to time_pattern platform ## ## 1.2.2 (2019-02-09) ## Added ## - Alert if battery state is unavailable ## Removed ## - Removed startup trigger from automation.update_battery_status_group_members ## Changed ## - Default to notify.notify if input_text.notifier_name doesn't contain "notify." ## ## 1.2.3 (2019-03-02) ## Changed ## - Handle null attributes gracefully ## ## 1.2.4 (2019-03-02) ## Added ## - Added support for battery_critical attributes by @Djebouh ## ## 1.3.0 (2020-11-05) by @KptnKMan ## Info ## - Running successfully with HA 0.117.2 ## Breaking Changes ## - Should be none, as far as I can tell. ## Fixed ## - Removed depreciated and defunct Group settings ## Removed ## - Persistent Notification of "None (Unavailable)" entities ## - Battery Status of "None (Unavailable)" entities ## - Battery Status Group no longer adds restored Unavailable entities ## - MQTT publish no longer adds restored Unavailable entities ## Added ## - Added Lovelace install instructions :) ## ################################################################ ################################################################ ################################################################ ## Install Instructions ################################################################ ## ## 1. Enable MQTT using your preferred MQTT broker ## https://home-assistant.io/components/mqtt/ ## ## 2. Enable MQTT Discovery by adding `discovery: true` and ## `discovery_prefix: homeassistant` under the `mqtt:` section ## of your configuration.yaml ## ## mqtt: ## discovery: true ## discovery_prefix: homeassistant ## ## 3. Save this file as CONFIGDIR/packages/battery_alert.yaml ## ## 4. Add `packages: !include_dir_named packages` under the ## `homeassistant:` section of your configuration.yaml ## ## homeassistant: ## packages: !include_dir_named packages ## ## 5. Restart Home Assistant ## ## 6. Adjust Min Alert Threshold slider to the minimum battery ## level to alert on. Note: the input slider requires the ## recorder component to keep it's state through restarts. ## If recorder is not enabled, the threshold can be set by ## un-remarking `initial` and setting the preferred default. ## ## 7. Adjust Max Alert Threshold slider to the maximum battery ## level to alert on. Note: the input slider requires the ## recorder component to keep it's state through restarts. ## If recorder is not enabled, the threshold can be set by ## un-remarking `initial` and setting the preferred default. ## ## 8. Setup notifications by entering the notifier name in the `Notifier Name` input text box. ## E.g. `notify.slack`. If no value is entered, it defaults to `notify.notify`. ## ## 9. Set the notifier format by selecting either `Default` or `Slack. Note: most notifiers ## are compatible with the `Default` format. ## ## 10. To disable alerts for a specific entity, use customize to ## set `battery_alert_disabled` to `true` ## ## homeassistant: ## customize: ## sensor.sensor_name_to_ignore_battery: ## battery_alert_disabled: true ## ## 11. To disable creating a sensor from battery attributes for a specific entity, use customize to ## set `battery_sensor_creation_disabled` to `true` ## ## homeassistant: ## customize: ## sensor.sensor_with_battery_attibute: ## battery_sensor_creation_disabled: true ## ## 12. If a battery attribute requires a template to convert it into a usable percent, use customize ## to add `battery_template` with the necessary template. The template result must be a number ## that represents a percentage. ## ## This example will create a battery sensor with the value of battery_level * 2 ## ## homeassistant: ## customize: ## sensor.sensor_with_battery_attibute_template: ## battery_template: "{{ value_json.value | int * 2 }}" ## ## 13. If a battery attribute requires a template to convert it into a string, use customize to add ## `battery_template_string` with the necessary template. The template result must be a string. ## For example, "Low" will trigger low battery notification). ## ## This example will create a battery sensor that contains "Low" if battery_level ## is less than 2 ## ## homeassistant: ## customize: ## sensor.sensor_with_battery_attibute_template: ## battery_template_string: >- ## {%- if value_json.value < 2 -%} ## Low ## {%- else -%} ## Full ## {%- endif -%} ################################################################ ################################################################ ## Lovelace Instructions - version 0.117+ ################################################################ ## ## If you are using a recent version of Home Asssistant, and want to add the Battery Alert ## to your Lovelace Dashboard, you should add the code snippet below to your Lovelace config. ## ## You can add this via the UI, select 'Edit Dashboard' -> 'Raw Configuration Editor'. ## You can also add it directly to your 'lovelace.yaml' file. ## ## You should just be able to add this to the bottom, and be good to go :) ## ## - title: Battery Alert ## path: battery-alert ## icon: 'mdi:battery-alert' ## badges: [] ## cards: ## - type: entities ## entities: ## - entity: input_boolean.low_batteries ## - entity: input_number.battery_alert_threshold_min ## - entity: input_number.battery_alert_threshold_max ## - entity: input_text.delete_battery_sensor ## - entity: input_text.notifier_name ## - entity: input_select.notifier_format ## - entity: automation.battery_persistent_notification ## - entity: automation.battery_persistent_notification_clear ## - entity: automation.battery_notification_default ## - entity: automation.battery_notification_slack ## - entity: automation.battery_sensor_from_attributes ## - entity: automation.update_battery_status_group_members ## - entity: automation.delete_battery_sensor ## title: Battery Alert Main ## show_header_toggle: false ## - type: entities ## entities: ## - entity: group.battery_status ## - entity: group.battery_alert ## - entity: group.battery_view ## title: Battery Alert View ## show_header_toggle: false ## ################################################################ ################################################################ ################################################ ## Customize ################################################ homeassistant: customize: ################################################ ## Node Anchors ################################################ package.node_anchors: customize: &customize package: 'battery_alert' ################################################ ## Group ################################################ group.battery_view: <<: *customize friendly_name: "Batteries" icon: mdi:battery-alert group.battery_alert: <<: *customize friendly_name: "Battery Alert" icon: mdi:steam group.battery_status: <<: *customize friendly_name: "Battery Status" icon: mdi:battery-charging ################################################ ## Automation ################################################ automation.battery_persistent_notification: <<: *customize friendly_name: "Battery Persistent Notification" icon: mdi:comment-alert-outline automation.battery_persistent_notification_clear: <<: *customize friendly_name: "Battery Persistent Notification Clear" icon: mdi:comment-remove-outline automation.battery_notification_default: <<: *customize friendly_name: "Battery Notification Default Format" icon: mdi:comment-alert-outline automation.battery_notification_slack: <<: *customize friendly_name: "Battery Notification Slack Format" icon: mdi:comment-alert-outline automation.battery_sensor_from_attributes: <<: *customize friendly_name: "Create Battery Sensor from Attributes" icon: mdi:battery-charging-wireless-outline automation.update_battery_status_group_members: <<: *customize friendly_name: "Update Battery Status Group Members" icon: mdi:group automation.delete_battery_sensor: <<: *customize friendly_name: "Delete a Battery Sensor" icon: mdi:server-remove ################################################ ## Group ################################################ group: battery_view: entities: - group.battery_status - group.battery_alert battery_alert: entities: - input_boolean.low_batteries - input_number.battery_alert_threshold_min - input_number.battery_alert_threshold_max - input_text.delete_battery_sensor - input_text.notifier_name - input_select.notifier_format - automation.battery_persistent_notification - automation.battery_persistent_notification_clear - automation.battery_notification_default - automation.battery_notification_slack - automation.battery_sensor_from_attributes - automation.update_battery_status_group_members - automation.delete_battery_sensor ################################################ ## Input Boolean ################################################ input_boolean: low_batteries: name: Low Batteries icon: mdi:battery-alert ################################################ ## Input Number ################################################ input_number: battery_alert_threshold_max: name: "Max Alert Threshold" icon: mdi:arrow-collapse-up mode: slider min: -1 max: 100 # initial: 40 battery_alert_threshold_min: name: "Min Alert Threshold" icon: mdi:arrow-collapse-down mode: slider min: -1 max: 100 # initial: -1 ################################################ ## Input Select ################################################ input_select: notifier_format: name: Notifier Format options: - Default - Slack icon: mdi:comment-question-outline ################################################ ## Input Text ################################################ input_text: delete_battery_sensor: name: Delete a Battery Sensor mode: text initial: '' notifier_name: name: Notifier Name mode: text ################################################ ## Automation ################################################ automation: - alias: battery_persistent_notification initial_state: 'on' trigger: - platform: time_pattern minutes: '/15' seconds: 00 - platform: state entity_id: - input_number.battery_alert_threshold_min - input_number.battery_alert_threshold_max action: - condition: template value_template: &low_battery_check > {% macro battery_level() %} {% for entity_id in states.group.battery_status.attributes.entity_id if ( not ( is_state_attr(entity_id, 'battery_alert_disabled', true) or is_state_attr(entity_id, 'restored', true) ) and states(entity_id) is not none and ( ( ( states(entity_id) is number or states(entity_id) | length == states(entity_id)| int | string | length or states(entity_id) | length == states(entity_id)| float | string | length ) and states(entity_id) | int < states.input_number.battery_alert_threshold_max.state | int and states(entity_id) | int > states.input_number.battery_alert_threshold_min.state | int ) or states(entity_id) | lower == 'low' or states(entity_id) | lower == 'unknown' or states(entity_id) | lower == 'unavailable' ) ) -%} {{ state_attr(entity_id, "friendly_name") }} ({{ states(entity_id) }}) {% endfor -%} {% endmacro %} {{ battery_level() | trim != "" }} - service: input_boolean.turn_on data: entity_id: input_boolean.low_batteries - service: persistent_notification.create data_template: title: "Low Battery Levels" notification_id: low_battery_alert message: &message > {% macro battery_level() %} {% for entity_id in states.group.battery_status.attributes.entity_id if ( not ( is_state_attr(entity_id, 'battery_alert_disabled', true) or is_state_attr(entity_id, 'restored', true) ) and states(entity_id) is not none and ( ( ( states(entity_id) is number or states(entity_id) | length == states(entity_id)| int | string | length or states(entity_id) | length == states(entity_id)| float | string | length ) and states(entity_id) | int < states.input_number.battery_alert_threshold_max.state | int and states(entity_id) | int > states.input_number.battery_alert_threshold_min.state | int ) or states(entity_id) | lower == 'low' or states(entity_id) | lower == 'unknown' or states(entity_id) | lower == 'unavailable' ) ) -%} {{ state_attr(entity_id, "friendly_name") }} ({{ states(entity_id) }}) {% endfor -%} {% endmacro %} {{ battery_level() }} - alias: battery_persistent_notification_clear initial_state: 'on' trigger: - platform: time_pattern minutes: '/15' seconds: 00 - platform: state entity_id: - input_number.battery_alert_threshold_min - input_number.battery_alert_threshold_max action: - condition: template value_template: &low_battery_clear > {% macro battery_level() %} {% for entity_id in states.group.battery_status.attributes.entity_id if ( not ( is_state_attr(entity_id, 'battery_alert_disabled', true) or is_state_attr(entity_id, 'restored', true) ) and states(entity_id) is not none and ( ( ( states(entity_id) is number or states(entity_id) | length == states(entity_id)| int | string | length or states(entity_id) | length == states(entity_id)| float | string | length ) and states(entity_id) | int < states.input_number.battery_alert_threshold_max.state | int and states(entity_id) | int > states.input_number.battery_alert_threshold_min.state | int ) or states(entity_id) | lower == 'low' or states(entity_id) | lower == 'unknown' or states(entity_id) | lower == 'unavailable' ) ) -%} {{ state_attr(entity_id, "friendly_name") }} ({{ states(entity_id) }}) {% endfor -%} {% endmacro %} {{ battery_level() | trim == "" }} - service: input_boolean.turn_off data: entity_id: input_boolean.low_batteries - service: persistent_notification.dismiss data: notification_id: low_battery_alert - alias: battery_notification_default initial_state: 'on' trigger: - platform: time at: '10:00:00' - platform: time at: '18:00:00' - platform: state entity_id: - input_number.battery_alert_threshold_min - input_number.battery_alert_threshold_max action: - condition: template value_template: *low_battery_check - condition: template value_template: "{{ states.input_select.notifier_format.state == 'Default' }}" - service_template: > {% if "notify." in states.input_text.notifier_name.state %} {{ states.input_text.notifier_name.state }} {% else %} notify.notify {% endif %} data_template: title: "Low Battery Levels" message: *message - alias: battery_notification_slack initial_state: 'on' trigger: - platform: time at: '10:00:00' - platform: time at: '18:00:00' - platform: state entity_id: - input_number.battery_alert_threshold_min - input_number.battery_alert_threshold_max action: - condition: template value_template: *low_battery_check - condition: template value_template: "{{ states.input_select.notifier_format.state == 'Slack' }}" - service_template: > {% if states.input_text.notifier_name.state != "" %} {{ states.input_text.notifier_name.state }} {% else %} notify.notify {% endif %} data_template: message: "Low Battery Levels" data: attachments: - color: '#52c0f2' title: "These devices have low battery levels" text: *message - alias: battery_sensor_from_attributes initial_state: 'on' trigger: - platform: event event_type: state_changed condition: - condition: template value_template: "{{ trigger is not none }}" - condition: template value_template: "{{ trigger.event.data is not none }}" - condition: template value_template: "{{ trigger.event.data.old_state is not none }}" - condition: template value_template: "{{ trigger.event.data.new_state is not none }}" - condition: template value_template: "{{ 'battery' not in trigger.event.data.new_state.name | lower }}" - condition: template value_template: "{{ not is_state_attr(trigger.event.data.entity_id, 'device_class', 'battery') }}" - condition: template value_template: "{{ not is_state_attr(trigger.event.data.entity_id, 'battery_sensor_creation_disabled', true) }}" - condition: template value_template: "{{ not is_state_attr(trigger.event.data.entity_id, 'restored', true) }}" - condition: or conditions: - condition: and conditions: - condition: template value_template: "{{ trigger.event.data.new_state.attributes.battery_level is defined }}" - condition: template value_template: "{{ trigger.event.data.new_state.attributes.battery_level is not none }}" - condition: and conditions: - condition: template value_template: "{{ trigger.event.data.new_state.attributes.battery is defined }}" - condition: template value_template: "{{ trigger.event.data.new_state.attributes.battery is not none }}" - condition: and conditions: - condition: template value_template: "{{ trigger.event.data.new_state.attributes['Battery numeric'] is defined }}" - condition: template value_template: "{{ trigger.event.data.new_state.attributes['Battery numeric'] is not none }}" - condition: and conditions: - condition: template value_template: "{{ trigger.event.data.new_state.attributes.battery_critical is defined }}" - condition: template value_template: "{{ trigger.event.data.new_state.attributes.battery_critical is not none }}" action: - service: mqtt.publish data_template: topic: "homeassistant/sensor/{{ trigger.event.data.entity_id.split('.')[1] }}_battery/config" retain: true payload: &config_payload >- { {% if trigger.event.data.new_state.attributes.battery_level is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery_level -%} {%- set attribname = 'battery_level' -%} {%- elif trigger.event.data.new_state.attributes.battery is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery -%} {%- set attribname = 'battery' -%} {%- elif trigger.event.data.new_state.attributes['Battery numeric'] is defined -%} {%- set attribval = (trigger.event.data.new_state.attributes['Battery numeric'] | int + 1) * 10 -%} {%- set attribname = 'Battery numeric' -%} {% elif trigger.event.data.new_state.attributes.battery_critical is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery_critical -%} {%- set attribname = 'battery_critical' -%} {%- endif -%} "name": "{{ trigger.event.data.new_state.name }} Battery", "state_topic": "homeassistant/sensor/{{ trigger.event.data.entity_id.split('.')[1] }}_battery/state", {% if trigger.event.data.new_state.attributes.battery_template is defined -%} "value_template": "{{ trigger.event.data.new_state.attributes.battery_template }}", "unit_of_measurement": "%", "device_class": "battery", {% elif trigger.event.data.new_state.attributes.battery_template_string is defined -%} "value_template": "{{ trigger.event.data.new_state.attributes.battery_template_string }}", "icon": "mdi:battery", {% elif trigger.event.data.new_state.attributes.battery_critical is defined -%} "value_template": "{{ "{{" }} 'low' if value_json.value else 'full' {{ "}}" }}", "icon": "mdi:battery", {% else -%} "value_template": "{{ "{{" }} value_json.value | int {{ "}}" }}", {% if attribval | int == attribval or attribval | float == attribval or attribval | length == attribval | float | string | length or attribval | length == attribval | int | string | length -%} "unit_of_measurement": "%", "device_class": "battery", {%- elif attribval == "High" or attribval == "Full" -%} "icon": "mdi:battery", {%- elif attribval == "Medium" or attribval == "Med"-%} "icon": "mdi:battery-50", {%- elif attribval == "Low" -%} "icon": "mdi:battery-alert", {%- else -%} "icon": "mdi:battery-unknown", {%- endif %} {% endif -%} "unique_id": "{{ trigger.event.data.entity_id.split('.')[1] }}_battery", "json_attributes_topic": "homeassistant/sensor/{{ trigger.event.data.entity_id.split('.')[1] }}_battery/attributes" } - service: mqtt.publish data_template: topic: "homeassistant/sensor/{{ trigger.event.data.entity_id.split('.')[1] }}_battery/state" retain: true payload: >- { {% if trigger.event.data.new_state.attributes.battery_level is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery_level -%} {%- elif trigger.event.data.new_state.attributes.battery is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery -%} {%- elif trigger.event.data.new_state.attributes['Battery numeric'] is defined -%} {%- set attribval = (trigger.event.data.new_state.attributes['Battery numeric'] | int + 1) * 10 -%} {%- elif trigger.event.data.new_state.attributes.battery_critical is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery_critical -%} {%- endif -%} "value": {% if attribval | int == attribval -%} {{ attribval | int }} {%- elif attribval | float == attribval -%} {{ attribval | float }} {%- elif attribval | length == attribval | float | string | length -%} {{ attribval | float }} {%- elif attribval | length == attribval | int | string | length -%} {{ attribval | int }} {%- else -%} "{{ attribval }}" {%- endif %} } - service: mqtt.publish data_template: topic: "homeassistant/sensor/{{ trigger.event.data.entity_id.split('.')[1] }}_battery/attributes" retain: true payload: >- { {% if trigger.event.data.new_state.attributes.battery_level is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery_level -%} {%- set attribname = 'battery_level' -%} {%- elif trigger.event.data.new_state.attributes.battery is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery -%} {%- set attribname = 'battery' -%} {%- elif trigger.event.data.new_state.attributes['Battery numeric'] is defined -%} {%- set attribval = (trigger.event.data.new_state.attributes['Battery numeric'] | int + 1) * 10 -%} {%- set attribname = 'Battery numeric' -%} {%- elif trigger.event.data.new_state.attributes.battery_critical is defined -%} {%- set attribval = trigger.event.data.new_state.attributes.battery_critical -%} {%- set attribname = 'battery_critical' -%} {%- endif -%} "entity_id": "{{ trigger.event.data.entity_id }}", {% if attribname is defined -%} "{{ attribname }}": "{{ attribval }}", {%- endif %} "delete_battery_sensor": "homeassistant/sensor/{{ trigger.event.data.entity_id.split('.')[1] }}_battery" } - alias: update_battery_status_group_members initial_state: 'on' trigger: - platform: time_pattern minutes: '/1' seconds: 00 action: - service: group.set data_template: object_id: "battery_status" entities: >- {%- for item in states.sensor if ( not is_state_attr(item.entity_id, 'hidden', true) and ( is_state_attr(item.entity_id, 'device_class', 'battery') or 'battery' in item.attributes.icon | lower or (item.entity_id | lower).endswith('_bat') or (item.name | lower).endswith('_bat') ) or ( ( 'battery' in item.entity_id | lower or 'battery' in item.name | lower ) and ( item.attributes.icon is not defined ) and ( not is_state_attr(item.entity_id, 'battery_alert_disabled', true) ) and ( not is_state_attr(item.entity_id, 'restored', true) ) ) ) -%} {{ item.entity_id }}{% if not loop.last %}, {% endif %} {%- endfor -%} - alias: delete_battery_sensor initial_state: 'on' trigger: - platform: state entity_id: - input_text.delete_battery_sensor condition: - condition: template value_template: "{{ 'homeassistant/sensor/' in states.input_text.delete_battery_sensor.state }}" action: - service: mqtt.publish data_template: topic: "{{ states.input_text.delete_battery_sensor.state }}" retain: true - service: mqtt.publish data_template: topic: "{{ states.input_text.delete_battery_sensor.state }}/attributes" retain: true - service: mqtt.publish data_template: topic: "{{ states.input_text.delete_battery_sensor.state }}/state" retain: true - service: mqtt.publish data_template: topic: "{{ states.input_text.delete_battery_sensor.state }}/config" retain: true