From c6315ede9b2b2117c0f3de3d2160ddbf6307640b Mon Sep 17 00:00:00 2001 From: ttrabatt Date: Thu, 5 Feb 2026 17:26:04 +0100 Subject: [PATCH] Added low battery monitor --- ...low-battery-notifications-and-actions.yaml | 2197 ++++++++++++----- 1 file changed, 1544 insertions(+), 653 deletions(-) diff --git a/blueprints/automation/Blackshome/low-battery-notifications-and-actions.yaml b/blueprints/automation/Blackshome/low-battery-notifications-and-actions.yaml index 45ac0cc..ec1f5e4 100644 --- a/blueprints/automation/Blackshome/low-battery-notifications-and-actions.yaml +++ b/blueprints/automation/Blackshome/low-battery-notifications-and-actions.yaml @@ -1,7 +1,6 @@ blueprint: name: Low Battery Notifications & Actions - description: - "# \U0001FAAB Low Battery Notifications & Actions\n**Version: 2.5**\n\n\U0001F680 + description: "# \U0001FAAB Low Battery Notifications & Actions\n**Version: 3.3**\n\n\U0001F680 Stay Charged, Stay Smart! Let's automate and take charge of your battery maintenance!\U0001F50B⚡\n\n**If you like my blueprints, and would like to show your support or just say thank you?** [Click Here](https://www.paypal.com/donate/?hosted_button_id=WAZS3QSDTPGA8) @@ -10,21 +9,24 @@ blueprint: interface (UI) to check battery levels.\n - **Time & Day:** Automatically periodically checks battery levels on any given time and day.\n\n - **Battery Sensors:**\n \ - Automatically detects all battery sensors used in Home Assistant.\n - - Set a battery low warning percentage to identify all batteries below this level.\n - \ - Detects 'Low' and unavailable batteries.\n - Excludes specific battery - sensors from notifications.\n - Create a custom group of battery sensors with - its own independent low battery warning percentage.\n\n - **Notification Options:**\n - \ - Opt to send messages to one or multiple devices.\n - Opt to display your - notifications directly within the Home Assistant user interface (UI).\n - Choose - which battery sensors to use, and then select their states from one of three preset - messages:\n - Low battery sensors + Battery level % + Unavailable sensors.\n - \ - Low battery sensors + Battery level %.\n - Unavailable sensors.\n + Choose one or more battery sensor fields to include in notifications — e.g., Friendly + Name, Floor, Area, Device, or Entity ID.\n - Set a battery low warning percentage + to identify all batteries below this level.\n - Detects Low, unavailable & + unknown batteries.\n - Excludes specific battery sensors from notifications.\n + \ - Create a custom group of battery sensors with its own independent low battery + warning percentage.\n\n - **Notification Options:**\n - Opt to send messages + to one or multiple devices.\n - Opt to display your notifications directly + within the Home Assistant user interface (UI).\n - Opt to display your low + battery alerts and status on a dashboard.\n - Choose which battery sensors + to use, and then select their states from one of three preset messages:\n - + Battery Low % Level + Low Battery Level + Unavailable + Unknown.\n - Battery + Low % Level & Low Battery Level.\n - Unavailable or Unknown Sensors.\n \ - Opt to receive a confirmation message if all batteries are okay.\n - Opt to use action buttons in your device notification that allows you to add your low batteries to a To-Do list.\n - Compatible with Apple iOS and Android devices.\n\n \ - **Custom Actions:**\n - Customize actions to suit your preferences and needs, enhancing the automations functionality.\n - Utilize 10 custom predetermined - battery sensors within the blueprint for more tailored and precise actions.\n + battery templates within the blueprint for more tailored and precise actions.\n \ - Configure custom actions to include features like customizing notifications or playing announcements on platforms like The Voice (HA), Google, Alexa, TTS, etc.\n\n - **Custom Conditions:**\n - Enter any custom conditions to further @@ -36,294 +38,384 @@ blueprint: trigger_settings: name: Triggers * icon: mdi:cog-outline - description: You must select at least one trigger * + description: 'You must select at least one trigger * + + ' collapsed: true input: include_button: name: Use The Button Helper Trigger (Optional) - description: - "Select if you would like a button helper to trigger the automation. + description: 'Select if you would like a button helper to trigger the automation. This is useful if you would like to check the battery levels by pressing a button in the UI. - For more information on how to create a button helper [Click Here](https://community.home-assistant.io/t/653754/4)" + For more information on how to create a button helper [Click Here](https://community.home-assistant.io/t/653754/4) + + ' default: disable_button_trigger selector: select: options: - - label: Use a button trigger - value: enable_button_trigger - - label: Dont use a button trigger - value: disable_button_trigger - custom_value: false - # # sort: false + - label: Use a button trigger + value: enable_button_trigger + - label: Dont use a button trigger + value: disable_button_trigger multiple: false + custom_value: false + sort: false button_entity: name: Button Helper - description: Input your button helper. + description: 'Input your button helper. + + ' default: [] selector: entity: filter: - - domain: - - input_button + - domain: + - input_button multiple: false + reorder: false include_time: name: Use The Time Trigger (Optional) - description: - Select if you would like to use the time trigger. This is useful - if you would like to periodically check the battery levels on any given - time and day. + description: 'Select if you would like to use the time trigger. This is + useful if you would like to periodically check the battery levels on any + given time and day. + + ' default: time_disabled selector: select: options: - - label: Enable the time options - value: time_enabled - - label: Disable the time options - value: time_disabled - custom_value: false - # # sort: false + - label: Enable the time options + value: time_enabled + - label: Disable the time options + value: time_disabled multiple: false + custom_value: false + sort: false time: name: Time - description: Set the time you would like to run the automation. + description: 'Set the time you would like to run the automation. + + ' default: 00:00:00 selector: time: {} weekday_options: name: Weekdays - description: - Select the days of the week you would like the automation to - run. + description: 'Select the days of the week you would like the automation + to run. + + ' default: - - mon - - tue - - wed - - thu - - fri - - sat - - sun + - mon + - tue + - wed + - thu + - fri + - sat + - sun selector: select: multiple: true mode: list options: - - label: Monday - value: mon - - label: Tuesday - value: tue - - label: Wednesday - value: wed - - label: Thursday - value: thu - - label: Friday - value: fri - - label: Saturday - value: sat - - label: Sunday - value: sun + - label: Monday + value: mon + - label: Tuesday + value: tue + - label: Wednesday + value: wed + - label: Thursday + value: thu + - label: Friday + value: fri + - label: Saturday + value: sat + - label: Sunday + value: sun custom_value: false - # # sort: false + sort: false battery_settings: name: Battery Settings icon: mdi:battery-alert-variant-outline collapsed: true input: + battery_sensor_report_fields: + name: Battery Sensors - Report Fields + description: 'Select which fields to include when reporting your battery + sensors. You can choose multiple options, but you must select at least + one. It''s recommended to select the **Friendly Name** option for clear + identification. If not, select **Entity ID**, as **Floors**, **Areas**, + or **Devices** alone may not be assigned to every battery sensor. + + + **The fields will be reported in this format** + + + `Friendly Name {Floor} (Area) [Device] - Entity ID` + + + ***Note** - If many sensors are low, selecting all fields may make your + notifications very long. Some notifications may be cut off and not show + the full low battery report. It''s recommended to select only the fields + you need.* + + ' + default: + - friendly_name + selector: + select: + options: + - label: Friendly Name + value: friendly_name + - label: Floor + value: floor + - label: Area + value: area + - label: Device + value: device + - label: Entity ID + value: entity_id + multiple: true + custom_value: false + sort: false battery_level: name: Battery Low Warning Level - description: - Set the battery low warning percentage to identify all batteries + description: 'Set the battery low warning percentage to identify all batteries below this level. + + ' default: 20 selector: number: min: 1.0 max: 100.0 step: 1.0 - unit_of_measurement: "%" + unit_of_measurement: '%' mode: slider exclude_sensors: name: Excluded Battery Sensors (Optional) - description: - "Choose the battery sensors to be excluded when the automation - runs. The automation will attempt to detect all battery sensors used in - Home Assistant, including those of your phones, tablets, etc. However, - it may not always be necessary or desirable to monitor these batteries. - Selecting these batteries here will exclude them from your notifications. + description: 'Choose the battery sensors to exclude when the automation + runs. - **NOTE** - You can only use entities. Areas, devices and labels are not - supported." + The automation will attempt to detect all battery sensors in Home Assistant, + including those of your phones, tablets, smartwatches, and more. However, + it may not always be necessary or desirable to monitor all of these batteries. + Selecting those battery sensors here will exclude them from your notifications. + + ' default: entity_id: [] selector: target: entity: - - device_class: - - battery + - device_class: + - battery + exclude_hidden_entities: + name: Exclude Hidden Battery Sensors (Optional) + description: 'Enable this option to exclude all hidden battery sensors. + This is useful if you''ve hidden sensors from phones, tablets, smartwatches, + or other devices you don''t want included in the low battery report. + + ' + default: hidden_disabled + selector: + select: + options: + - label: Enable - Hidden battery sensors will be excluded + value: hidden_enabled + - label: Disable - Hidden battery sensors will be included + value: hidden_disabled + multiple: false + custom_value: false + sort: false custom_group: name: Battery Sensors - Custom Group (Optional) - description: - "You can select a custom group of battery sensors to be included - in your notifications. This custom group has its own independent 'Battery - Low Warning Level' setting below. When using all batteries along with - the custom group in a single automation, it is recommended to exclude - the custom group of batteries specified above in the 'Excluded Battery - Sensors' section. + description: 'You can select a custom group of battery sensors to be include + in your notifications, with its own independent `Battery Low Warning Level` + setting below. This allows you to either set a different warning level + for devices that require more power (for example, roller blinds) or monitor + your own custom group of batteries. - Excluded battery sensors are not linked to this custom group. + When using any **Easy Notify** option and selecting **Use All Battery + Sensors Minus Excluded Battery Sensors + Custom Group**, it is recommended + to exclude your custom group of batteries above in the `Excluded Battery + Sensors` input. This prevents any chance of receiving the same entity + multiple times in your notifications. - **NOTE** - You can only use entities. Areas, devices and labels are not - supported." + ***Note** - All excluded battery sensors are not linked to this custom + group.* + + ' default: entity_id: [] selector: target: entity: - - device_class: - - battery + - device_class: + - battery custom_group_battery_level: name: Custom Group - Battery Low Warning Level - description: - Set the battery low warning percentage to identify all batteries + description: 'Set the battery low warning percentage to identify all batteries below this level. + + ' default: 20 selector: number: min: 1.0 max: 100.0 step: 1.0 - unit_of_measurement: "%" + unit_of_measurement: '%' mode: slider - easy_notify_settings: - name: Easy Notify - icon: mdi:bell-check-outline + easy_notify_device: + name: Easy Notify - Device + icon: mdi:devices collapsed: true input: include_easy_notify: name: Use The Easy Notify - Device Notification Options (Optional) - description: - Enabling this option will send notifications to the selected + description: 'Enabling this option will send notifications to the selected devices below. It allows you to choose which battery sensors to use, and then select their states from one of three preset messages. You can also - opt to receive a confirmation message if all batteries are okay. For further - customization or to integrate with voice assistants like HA, Google, Alexa, - TTS, etc., please explore the custom action options below. + opt to receive a confirmation message if all batteries are okay. + + + To customize your automation further or integrate with voice assistants + such as The Voice (HA), Google Assistant, Alexa, or TTS, check out the + custom action options below. + + ' default: disabled_easy_notify selector: select: options: - - label: Enable Device Notification - value: enable_easy_notify - - label: Enable Device Notification + Okay Confirmation Message - value: enable_easy_okay_notify - - label: Disable Device Notification - value: disabled_easy_notify - custom_value: false - # # sort: false + - label: Enable Device Notification + value: enable_easy_notify + - label: Enable Device Notification + Okay Confirmation Message + value: enable_easy_okay_notify + - label: Disable Device Notification + value: disabled_easy_notify multiple: false - include_persistent_notification: - name: Use The Easy Notify - UI Notification Options (Optional) - description: - Enabling this option will display notifications directly within - the Home Assistant user interface (UI). It allows you to choose which - battery sensors to use, and then select their states from one of three - preset messages. You can also opt to receive a confirmation message in - the UI if all batteries are okay. For further customization or to integrate - with voice assistants like HA, Google, Alexa, TTS, etc., please explore - the custom action options below. - default: disabled_persistent_notification - selector: - select: - options: - - label: Enable UI Notification - value: enable_persistent_notification - - label: Enable UI Notification + Okay Confirmation Message - value: enable_persistent_okay_notification - - label: Disable UI Notification - value: disabled_persistent_notification custom_value: false - # sort: false - multiple: false + sort: false sensor_selection: name: Sensor Selection - description: - Please select which sensors you would like to include in your - notifications. + description: 'Select which battery sensors you''d like to include in your + devices notifications. + + ' default: enable_all_sensors selector: select: options: - - label: Use Battery Sensors - Custom Group - value: enable_battery_sensors_custom_group - - label: Use All Battery Sensors Minus Excluded Battery Sensors - value: enable_all_sensors - - label: - Use All Battery Sensors Minus Excluded Battery Sensors + Custom - Group - value: enable_all_and_custom_group_sensors - custom_value: false - # # sort: false + - label: Use Battery Sensors - Custom Group + value: enable_battery_sensors_custom_group + - label: Use All Battery Sensors Minus Excluded Battery Sensors + value: enable_all_sensors + - label: Use All Battery Sensors Minus Excluded Battery Sensors + Custom + Group + value: enable_all_and_custom_group_sensors multiple: false + custom_value: false + sort: false notify_device: name: Devices Notified (Optional) - description: - If you've enabled device notifications above, please select + description: 'If you''ve enabled device notifications above, please select the devices to receive the notifications. + + ' default: [] selector: device: filter: - - integration: mobile_app + - integration: mobile_app multiple: true notify_title: name: Title - description: Enter in the notification title of your message. + description: 'Enter in the notification title of your message. + + ' default: Low Battery Notification selector: - text: {} + text: + multiple: false + multiline: false notify_message: name: Message - description: - "Choose one of the three preset messages from the dropdown + description: 'Choose one of the three preset messages from the dropdown menu. - 1 - Low battery sensors + Battery level % + Unavailable sensors. + **1 - Battery Low % Level + Low Battery Level + Unavailable + Unknown** + Includes sensors with battery percentages below the low warning level, + in a low battery state, or marked as unavailable or unknown. - 2 - Low battery sensors + Battery level %. - 3 - Unavailable sensors." + **2 - Battery Low % Level & Low Battery Level** Includes sensors with + battery percentages below the low warning level or in a low battery state. + + + **3 - Unavailable or Unknown Sensors** Includes sensors that are unavailable + or have an unknown state. + + ' default: all_sensors selector: select: mode: dropdown options: - - label: Low battery sensors + Battery level % + Unavailable sensors - value: all_sensors - - label: Low battery sensors + Battery level % - value: sensors - - label: Unavailable sensors - value: unavailable_sensors - custom_value: false - # # sort: false + - label: 1 - Battery Low % Level + Low Battery Level + Unavailable + + Unknown + value: all_sensors + - label: 2 - Battery Low % Level & Low Battery Level + value: sensors + - label: 3 - Unavailable or Unknown Sensors + value: unavailable_sensors multiple: false + custom_value: false + sort: false notify_okay_message: name: Okay Confirmation Message - description: - Enter in the notification message you would like to receive + description: 'Enter in the notification message you would like to receive when all your batteries are okay. + + ' default: YES! All batteries are okay :) selector: - text: {} + text: + multiple: false + multiline: false + notify_tag: + name: Device Notification Tag + description: 'You can use a tag to keep your notifications organized. When + a new notification with the same tag is sent, it replaces the old one, + so you won''t get cluttered with duplicates. + + + If this input is left blank, no tag will be applied and each notification + will be treated as separate. + + + For best results, use short, unique tags for each automation - for example: + `low-batteries`, `low-batteries-custom-group`, `critical-low-batteries`, + etc. + + ' + default: [] + selector: + text: + multiple: false + multiline: false notify_interruption_level: name: Interruption Level - iOS Only - description: - "On devices running iOS 15 and later, you can configure the + description: 'On devices running iOS 15 and later, you can configure the interruption level for your notifications to ensure they are delivered according to your preferences. Choose the desired interruption level from the dropdown list. Critical and time-sensitive notifications must be turned @@ -331,27 +423,45 @@ blueprint: be allowed in your Focus settings. - For more information on interruption levels [Click Here](https://community.home-assistant.io/t/653754/192?u=blacky)" + For more information on interruption levels [Click Here](https://community.home-assistant.io/t/653754/192?u=blacky) + + ' default: active selector: select: mode: dropdown options: - - label: Default - value: active - - label: Critical Notifications - value: critical - - label: Time Sensitive Notifications - value: time-sensitive - - label: Quiet Notifications Without Waking Screen - value: passive - custom_value: false - # # sort: false + - label: Default + value: active + - label: Critical Notifications + value: critical + - label: Time Sensitive Notifications + value: time-sensitive + - label: Quiet Notifications Without Waking Screen + value: passive multiple: false + custom_value: false + sort: false + notify_sound: + name: Notification Sound - iOS Only + description: 'The Home Assistant app for iOS includes built-in notification + sounds, and you can import sounds from your iOS device into the app. Custom + sounds can also be added via iTunes or from your cloud storage. When entering + a sound, ensure you use the full filename, including the extension. + + + For more information on using sounds in the Home Assistant app, [Click + Here](https://community.home-assistant.io/t/653754/192?u=blacky) + + ' + default: [] + selector: + text: + multiple: false + multiline: false notify_data: name: Android Only Options (Optional) - description: - "**High Priority** notifications ensure that you receive important + description: '**High Priority** notifications ensure that you receive important alerts immediately. These notifications bypass normal delivery delays and are delivered instantly to your device. @@ -365,126 +475,432 @@ blueprint: **Notification Channel** allow you to easily organize different notification settings, including notification sounds, vibrations, and other device-specific features. If you choose this option, please enter your desired channel - name below." + name below. + + + **Icon** allows you to replace the default Home Assistant icon with one + of your choice. If selected, choose your preferred icon using the **Icon + - Android Only** option below, and set the icon colour using **Icon Colour + - Android Only**. + + ' default: [] selector: select: multiple: true options: - - label: High Priority - value: high_priority - - label: Sticky Notification - value: sticky - - label: Notification Channel - value: channel + - label: High Priority + value: high_priority + - label: Sticky Notification + value: sticky + - label: Notification Channel + value: channel + - label: Icon + value: icon custom_value: false - # # sort: false + sort: false notify_channel: name: Notification Channel - Android Only - description: - "If you have chosen to use a notification channel, simply enter + description: 'If you have chosen to use a notification channel, simply enter the name of an existing channel to apply its pre-configured settings. - If you don't have a channel yet, you can create a new one by entering + If you don''t have a channel yet, you can create a new one by entering a name here. When your automation sends the first notification, it will create the channel on your device. After the channel is created, you can customize its notification settings to your preference directly on your device. - For more information on notification channels [Click Here](https://community.home-assistant.io/t/653754/192?u=blacky)" + For more information on notification channels [Click Here](https://community.home-assistant.io/t/653754/192?u=blacky) + + ' default: [] selector: - text: {} - action_buttons_settings: - name: Action Buttons + text: + multiple: false + multiline: false + notify_icon: + name: Icon - Android Only + description: 'Select a custom icon to replace the default Home Assistant + icon in the notification. This setting applies only if the **Icon** option + is selected in **Android Only Options** above. + + ' + default: mdi:emoticon-happy-outline + selector: + icon: {} + notify_icon_colour: + name: Icon Colour - Android Only + description: 'Choose a colour for your custom notification icon. This setting + applies only if the **Icon** option is selected in **Android Only Options** + above. + + ' + default: + - 244 + - 67 + - 54 + selector: + color_rgb: {} + easy_notify_device_action_buttons: + name: Easy Notify - Device Action Buttons icon: mdi:gesture-tap-button collapsed: true input: notify_action_buttons: name: Easy Notify - Action Buttons (Optional) - description: - Enhance your device notifications with an actionable To-Do - list button feature. With just a hold, release and tap, effortlessly add - selected items from your low battery notification to any of your chosen - To-Do lists. Plus, for added assurance, you can opt to receive a confirmation - message confirming the action. + description: 'Add interactive buttons to your **device notifications**, + allowing you to send items from a low-battery alert directly to one of + your To-Do lists. + + + When pressing an action or cancel button, you can choose to do nothing, + receive a confirmation message, or automatically clear the notification + from all selected devices. + + + ***Note** - If you select **Add To-Do List Action Buttons + Clear on Action**, + make sure to set the **Device Notification Tag** in the **Easy Notify + - Device** section above for this option to work properly.* + + ' default: disabled_notify_action_buttons selector: select: options: - - label: Add To-Do List Action Buttons - value: enable_to_do_list_button - - label: Add To-Do List Action Buttons + Confirmation Message - value: enable_to_do_list_button_and_confirmation - - label: Disable Action Buttons - value: disabled_notify_action_buttons - custom_value: false - # # sort: false + - label: Add To-Do List Action Buttons + value: enable_to_do_list_button + - label: Add To-Do List Action Buttons + Confirmation Message + value: enable_to_do_list_button_and_confirmation + - label: Add To-Do List Action Buttons + Clear on Action + value: enable_to_do_list_button_and_clear + - label: Disable Action Buttons + value: disabled_notify_action_buttons multiple: false + custom_value: false + sort: false to_do_list: name: Easy Notify Action Buttons - To-Do List Selection - description: "Choose the To-Do list where you'd like to add your task. + description: 'Choose the To-Do list where you''d like to add your task. - **Note** - The default shopping list isn't compatible due to its lack - of description capability. However, all other To-Do lists are fully supported." + ***Note** - The default Shopping List is not compatible because it doesn''t + support task descriptions.* All other To-Do lists are fully supported. + + ' default: [] selector: entity: - domain: - # - todo + filter: + - domain: + - todo multiple: false + reorder: false to_do_task_title: name: Easy Notify Action Buttons - Task Title - description: - When the action button is pressed, it will add a task to your - chosen To-Do list. Please enter the title you would like for your To-Do - task + description: 'When the action button is pressed, a new task will be added + to your selected To-Do list. Enter the title you''d like to use for the + To-Do task. + + ' default: Batteries To Be Replaced selector: - text: {} + text: + multiple: false + multiline: false action_button_to_do: name: Easy Notify Action Buttons - Action Button - description: - Please specify the name for the action button to be displayed - in the notification. When pressed this button effortlessly adds a task - to your chosen To-Do list. + description: 'Specify the label for the action button that will appear in + your notification. When pressed, this button will add a task to your selected + To-Do list. + + ' default: Add To To-Do List! selector: - text: {} + text: + multiple: false + multiline: false action_button_cancel: name: Easy Notify Action Buttons - Cancel Button - description: - Please specify the name for the cancel button to be displayed - in the notification. This button allows you to cancel the task addition + description: 'Specify the label for the cancel button that will appear in + your notification. When pressed, this button cancels the task addition process. + + ' default: Cancel selector: - text: {} + text: + multiple: false + multiline: false action_button_confirmation_title: name: Easy Notify Action Buttons - Action & Cancel Button Confirmation Title - description: - Please enter in a title for the confirmation notification message - when an action button or a cancel button is pressed. + description: 'Enter the title for the confirmation notification shown when + either the action or cancel button is pressed. + + ' default: Low Battery Confirmation selector: - text: {} + text: + multiple: false + multiline: false action_button_confirmation_message: name: Easy Notify Action Buttons - Action Button Confirmation Message - description: - Please enter in the message for the confirmation notification - message when the action button is pressed. + description: 'Enter the message for the confirmation notification shown + when the action button is pressed. + + ' default: Your low batteries have been added to your To-Do list selector: - text: {} + text: + multiple: false + multiline: false cancel_action_button_confirmation_message: name: Easy Notify Action Buttons - Cancel Button Confirmation Message - description: - Please enter in the message for the confirmation notification - message when the cancel button is pressed. + description: 'Enter the message for the confirmation notification shown + when the cancel button is pressed. + + ' default: Cancelled - Nothing was added to your To-Do list selector: - text: {} + text: + multiple: false + multiline: false + easy_notify_ui: + name: Easy Notify - UI + icon: mdi:bell-check-outline + collapsed: true + input: + include_persistent_notification: + name: Use The Easy Notify - UI Notification Options (Optional) + description: 'Enabling this option will display notifications directly within + the Home Assistant user interface (UI). It allows you to choose which + battery sensors to use, and then select their states from one of three + preset messages. You can also opt to receive a confirmation message in + the UI if all batteries are okay. + + + To customize your automation further or integrate with voice assistants + such as The Voice (HA), Google Assistant, Alexa, or TTS, check out the + custom action options below. + + ' + default: disabled_persistent_notification + selector: + select: + options: + - label: Enable UI Notification + value: enable_persistent_notification + - label: Enable UI Notification + Okay Confirmation Message + value: enable_persistent_okay_notification + - label: Disable UI Notification + value: disabled_persistent_notification + multiple: false + custom_value: false + sort: false + persistent_sensor_selection: + name: Sensor Selection + description: 'Select which battery sensors you''d like to include in your + UI notifications. + + ' + default: enable_all_sensors + selector: + select: + options: + - label: Use Battery Sensors - Custom Group + value: enable_battery_sensors_custom_group + - label: Use All Battery Sensors Minus Excluded Battery Sensors + value: enable_all_sensors + - label: Use All Battery Sensors Minus Excluded Battery Sensors + Custom + Group + value: enable_all_and_custom_group_sensors + multiple: false + custom_value: false + sort: false + persistent_notify_title: + name: Title + description: 'Enter in the notification title of your message. + + ' + default: "\U0001FAAB Low Battery Notification" + selector: + text: + multiple: false + multiline: false + persistent_notify_message: + name: Message + description: 'Choose one of the three preset messages from the dropdown + menu. + + + **1 - Battery Low % Level + Low Battery Level + Unavailable + Unknown** + Includes sensors with battery percentages below the low warning level, + in a low battery state, or marked as unavailable or unknown. + + + **2 - Battery Low % Level & Low Battery Level** Includes sensors with + battery percentages below the low warning level or in a low battery state. + + + **3 - Unavailable or Unknown Sensors** Includes sensors that are unavailable + or have an unknown state. + + ' + default: all_sensors + selector: + select: + mode: dropdown + options: + - label: 1 - Battery Low % Level + Low Battery Level + Unavailable + + Unknown + value: all_sensors + - label: 2 - Battery Low % Level & Low Battery Level + value: sensors + - label: 3 - Unavailable or Unknown Sensors + value: unavailable_sensors + multiple: false + custom_value: false + sort: false + persistent_notify_okay_message: + name: Okay Confirmation Message + description: 'Enter in the notification message you would like to receive + when all your batteries are okay. + + ' + default: YES! All batteries are okay :) + selector: + text: + multiple: false + multiline: false + persistent_notify_id: + name: Notification ID + description: 'You can use a notification ID to keep your notifications organized. + When a new notification with the same notification ID is sent, it replaces + the old one, so you won''t get cluttered with duplicates. + + + If this input is left blank, no notification ID will be applied and each + notification will be treated as separate. + + + For best results, use short, unique ID''s for each automation - for example: + `low-batteries`, `low-batteries-custom-group`, `critical-low-batteries`, + etc. + + ' + default: [] + selector: + text: + multiple: false + multiline: false + easy_notify_dashboard: + name: Easy Notify - Dashboard + icon: mdi:view-dashboard-variant-outline + collapsed: true + input: + include_dashboard_notification: + name: Use The Easy Notify - Dashboard Notification Option (Optional) + description: 'Display your low battery alerts and status on a dashboard + so everyone can easily see the latest updates at a glance. + + + For more information on how to use this option and add it to a dashboard, + [Click Here](https://community.home-assistant.io/t/653754/494) + + ' + default: disabled_dashboard_notification + selector: + select: + options: + - label: Enable Dashboard Notification + Okay Confirmation Message + value: enable_dashboard_okay_notification + - label: Disable Dashboard Notification + value: disabled_dashboard_notification + multiple: false + custom_value: false + sort: false + dashboard_notification_text_helper: + name: Dashboard Notification - Text Helper + description: 'Select the **Text Helper** that will store the notification + message, which can then be shown on a dashboard. This helper will contain + both the timestamp and the message (up to 255 characters). + + + ***Note** - If there are too many batteries, some may not be displayed.* + + ' + default: [] + selector: + entity: + filter: + - domain: + - input_text + multiple: false + reorder: false + dashboard_sensor_selection: + name: Sensor Selection + description: 'Select which battery sensors you''d like to include in your + dashboard notifications. + + ' + default: enable_all_sensors + selector: + select: + options: + - label: Use Battery Sensors - Custom Group + value: enable_battery_sensors_custom_group + - label: Use All Battery Sensors Minus Excluded Battery Sensors + value: enable_all_sensors + - label: Use All Battery Sensors Minus Excluded Battery Sensors + Custom + Group + value: enable_all_and_custom_group_sensors + multiple: false + custom_value: false + sort: false + dashboard_notify_message: + name: Message + description: 'Choose one of the three preset messages from the dropdown + menu. + + + **1 - Battery Low % Level + Low Battery Level + Unavailable + Unknown** + Includes sensors with battery percentages below the low warning level, + in a low battery state, or marked as unavailable or unknown. + + + **2 - Battery Low % Level & Low Battery Level** Includes sensors with + battery percentages below the low warning level or in a low battery state. + + + **3 - Unavailable or Unknown Sensors** Includes sensors that are unavailable + or have an unknown state. + + ' + default: all_sensors + selector: + select: + mode: dropdown + options: + - label: 1 - Battery Low % Level + Low Battery Level + Unavailable + + Unknown + value: all_sensors + - label: 2 - Battery Low % Level & Low Battery Level + value: sensors + - label: 3 - Unavailable or Unknown Sensors + value: unavailable_sensors + multiple: false + custom_value: false + sort: false + dashboard_notify_okay_message: + name: Okay Confirmation Message + description: 'Enter in the notification message you would like to receive + when all your batteries are okay. + + ' + default: YES! All batteries are okay :) + selector: + text: + multiple: false + multiline: false custom_actions_settings: name: Custom Actions icon: mdi:code-tags @@ -492,63 +908,71 @@ blueprint: input: include_custom_actions: name: Use The Custom Action Options (Optional) - description: - You can add any custom actions you'd like to run when the automation - is triggered. This can include customizing notifications or playing announcements - on platforms like The Voice (HA), Google, Alexa, TTS, etc. + description: 'You can add any custom actions you''d like to run when the + automation is triggered. This can include sending custom notifications + or playing voice announcements through The Voice (HA), Google Assistant, + Alexa, TTS, and more. + + ' default: disabled_custom_actions selector: select: options: - - label: Enable Custom Actions - value: enable_custom_actions - - label: Disable Custom Actions - value: disabled_custom_actions - custom_value: false - # sort: false + - label: Enable Custom Actions + value: enable_custom_actions + - label: Disable Custom Actions + value: disabled_custom_actions multiple: false + custom_value: false + sort: false custom_actions: name: Custom Actions - description: - 'Add your custom actions that you''d like to run when the automation - is triggered. Below are 10 sensors you can include in your actions, depending - on your preferences. + description: 'Add your own custom actions to run when the automation is + triggered. + + + Below are 10 templates you can use in your actions to control how your + battery information is displayed or spoken. **All Battery Sensors Minus Excluded** - 1 - Use "{{all_sensors}}" for - Low battery sensors + Battery level % - + Unavailable sensors. + 1 - Use "{{all_sensors}}" for - Battery Low % Level + Low Battery Level + + Unavailable + Unknown. - 2 - Use "{{sensors}}" for - Low battery sensors + Battery level %. + 2 - Use "{{sensors}}" for - Battery Low % Level & Low Battery Level. - 3 - Use "{{unavailable_sensors}}" for - Unavailable sensors. + 3 - Use "{{unavailable_sensors}}" for - Unavailable or Unknown Sensors. - 4 - Use "{{sensors_names}}" for - Low battery sensors - Sensor name only. + 4 - Use "{{sensors_names}}" for - Battery Low % Level & Low Battery Level + - Sensor friendly name only. - 5 - Use "{{unavailable_sensors_names}}" for - Unavailable sensors - Sensor - name only. + 5 - Use "{{unavailable_sensors_names}}" for - Unavailable or Unknown Sensors + - Sensor friendly name only. **Battery Sensors - Custom Group** - 1 - Use "{{all_sensors_custom_group}}" for - Low battery sensors + Battery - level % + Unavailable sensors. + 1 - Use "{{all_sensors_custom_group}}" for - Battery Low % Level + Low + Battery Level + Unavailable + Unknown. - 2 - Use "{{sensors_custom_group}}" for - Low battery sensors + Battery - level %. + 2 - Use "{{sensors_custom_group}}" for - Battery Low % Level & Low Battery + Level. - 3 - Use "{{unavailable_sensors_custom_group}}" for - Unavailable sensors. + 3 - Use "{{unavailable_sensors_custom_group}}" for - Unavailable or Unknown + Sensors. - 4 - Use "{{sensors_names_custom_group}}" for - Low battery sensors - Sensor - name only. + 4 - Use "{{sensors_names_custom_group}}" for - Battery Low % Level & Low + Battery Level - Sensor friendly name only. 5 - Use "{{unavailable_sensors_names_custom_group}}" for - Unavailable - sensors - Sensor name only. + or Unknown Sensors - Sensor friendly name only. For more information on how to use these sensors in your actions [Click - Here](https://community.home-assistant.io/t/653754/21)' + Here](https://community.home-assistant.io/t/653754/21) + + ' default: [] selector: action: {} @@ -559,9 +983,10 @@ blueprint: input: global_conditions: name: Global Conditions - description: - Enter any global conditions you would like to apply to the + description: 'Enter any global conditions you would like to apply to the automation. + + ' default: [] selector: condition: {} @@ -574,20 +999,25 @@ variables: include_time: !input include_time time: !input time weekday_options: !input weekday_options + battery_sensor_report_fields: !input battery_sensor_report_fields battery_level: !input battery_level exclude_sensors: !input exclude_sensors + exclude_hidden_entities: !input exclude_hidden_entities custom_group: !input custom_group custom_group_battery_level: !input custom_group_battery_level include_easy_notify: !input include_easy_notify - include_persistent_notification: !input include_persistent_notification sensor_selection: !input sensor_selection notify_device: !input notify_device notify_title: !input notify_title notify_message: !input notify_message + notify_tag: !input notify_tag notify_okay_message: !input notify_okay_message notify_interruption_level: !input notify_interruption_level + notify_sound: !input notify_sound notify_data: !input notify_data notify_channel: !input notify_channel + notify_icon: !input notify_icon + notify_icon_colour: !input notify_icon_colour notify_action_buttons: !input notify_action_buttons to_do_list: !input to_do_list to_do_task_title: !input to_do_task_title @@ -596,182 +1026,522 @@ variables: action_button_confirmation_title: !input action_button_confirmation_title action_button_confirmation_message: !input action_button_confirmation_message cancel_action_button_confirmation_message: !input cancel_action_button_confirmation_message + include_persistent_notification: !input include_persistent_notification + persistent_sensor_selection: !input persistent_sensor_selection + persistent_notify_title: !input persistent_notify_title + persistent_notify_message: !input persistent_notify_message + persistent_notify_okay_message: !input persistent_notify_okay_message + persistent_notify_id: !input persistent_notify_id + include_dashboard_notification: !input include_dashboard_notification + dashboard_notification_text_helper: !input dashboard_notification_text_helper + dashboard_sensor_selection: !input dashboard_sensor_selection + dashboard_notify_message: !input dashboard_notify_message + dashboard_notify_okay_message: !input dashboard_notify_okay_message include_custom_actions: !input include_custom_actions + custom_actions: !input custom_actions global_conditions: !input global_conditions - device_message_data: - "{% set message = namespace(data={}) %} {% if notify_interruption_level - in ['active', 'critical', 'time-sensitive', 'passive'] %}\n {% set message.data - = dict(message.data, **{ 'push': {'interruption-level': notify_interruption_level - }}) %}\n{% endif %} {% if 'high_priority' in notify_data %}\n {% set message.data + all_exclude_sensors: "{% set areas = exclude_sensors.area_id if exclude_sensors.area_id + is defined else [] %} {% if areas is string %}\n {% set areas = [areas] %}\n{% + endif %} {% set area_entities_list = areas | map('area_entities') | sum(start=[]) + %} {% set devices = exclude_sensors.device_id if exclude_sensors.device_id is + defined else [] %} {% if devices is string %}\n {% set devices = [devices] %}\n{% + endif %} {% set device_entities_list = devices | map('device_entities') | sum(start=[]) + %} {% set entity_list = exclude_sensors.entity_id if exclude_sensors.entity_id + is defined else [] %} {% if entity_list is string %}\n {% set entity_list = [entity_list] + %}\n{% endif %} {% set labels = exclude_sensors.label_id if exclude_sensors.label_id + is defined else [] %} {% if labels is string %}\n {% set labels = [labels] %}\n{% + endif %} {% set label_entities_list = labels | map('label_entities') | sum(start=[]) + | unique | list %} {% if exclude_hidden_entities == 'hidden_enabled' %}\n {% + set hidden_entities = states | map(attribute='entity_id') | reject('none') | select('is_hidden_entity') + | unique | list %}\n{% else %}\n {% set hidden_entities = [] %}\n{% endif %} + {% set all_exclude_sensors = (area_entities_list + device_entities_list + entity_list + + label_entities_list + hidden_entities) | unique | list %} {{ all_exclude_sensors + }}" + custom_group_sensors: "{% set areas = custom_group.area_id if custom_group.area_id + is defined else [] %} {% if areas is string %}\n {% set areas = [areas] %}\n{% + endif %} {% set area_entities_list = areas | map('area_entities') | sum(start=[]) + %} {% set devices = custom_group.device_id if custom_group.device_id is defined + else [] %} {% if devices is string %}\n {% set devices = [devices] %}\n{% endif + %} {% set device_entities_list = devices | map('device_entities') | sum(start=[]) + %} {% set entity_list = custom_group.entity_id if custom_group.entity_id is defined + else [] %} {% if entity_list is string %}\n {% set entity_list = [entity_list] + %}\n{% endif %} {% set labels = custom_group.label_id if custom_group.label_id + is defined else [] %} {% if labels is string %}\n {% set labels = [labels] %}\n{% + endif %} {% set label_entities_list = labels | map('label_entities') | sum(start=[]) + | unique | list %} {% set custom_group_sensors = (area_entities_list + device_entities_list + + entity_list + label_entities_list) | unique | list %} {{ custom_group_sensors + }}" + device_message_data: "{% set message = namespace(data={}) %} {% set push = namespace(data={}) + %} {% if notify_interruption_level in ['active', 'critical', 'time-sensitive', + 'passive'] %}\n {% set push.data = dict(push.data, **{ 'interruption-level': + notify_interruption_level }) %}\n{% endif %} {% if notify_sound != [] %}\n {% + set push.data = dict(push.data, **{ 'sound': notify_sound }) %}\n{% endif %} {% + if push.data %}\n {% set message.data = dict(message.data, **{ 'push': push.data + }) %}\n{% endif %} {% if 'high_priority' in notify_data %}\n {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if 'channel' in notify_data %}\n {% set message.data = dict(message.data, **{ 'channel': notify_channel }) %}\n{% endif %} {% if 'sticky' in notify_data %}\n {% set message.data - = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {{ message.data - }}" - device_message_data_action_button: - "{% set message = namespace(data={}) %} {% if - notify_interruption_level in ['active', 'critical', 'time-sensitive', 'passive'] - %}\n {% set message.data = dict(message.data, **{ 'push': {'interruption-level': - notify_interruption_level }}) %}\n{% endif %} {% if 'high_priority' in notify_data - %}\n {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' - }) %}\n{% endif %} {% if 'channel' in notify_data %}\n {% set message.data = - dict(message.data, **{ 'channel': notify_channel }) %}\n{% endif %} {% if 'sticky' - in notify_data %}\n {% set message.data = dict(message.data, **{ 'sticky': \"true\" - }) %}\n{% endif %} {% set actions = [\n {'action': action_button_to_do, 'title': - action_button_to_do},\n {'action': action_button_cancel, 'title': action_button_cancel}\n] - %}\n {% set message.data = dict(message.data, **{ 'actions': actions }) %}\n{{ - message.data }}" - device_confirmation_message_data: - "{% set message = namespace(data={}) %} {% if - notify_interruption_level in ['active', 'critical', 'time-sensitive', 'passive'] - %}\n {% set message.data = dict(message.data, **{ 'push': {'interruption-level': - notify_interruption_level }}) %}\n{% endif %} {% if 'high_priority' in notify_data - %}\n {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' - }) %}\n{% endif %} {% if 'channel' in notify_data %}\n {% set message.data = - dict(message.data, **{ 'channel': notify_channel }) %}\n{% endif %} {% if 'sticky' - in notify_data %}\n {% set message.data = dict(message.data, **{ 'sticky': \"true\" - }) %}\n{% endif %}\n {% set message.data = dict(message.data, **{ 'url': \"/todo?entity_id=\" - ~ to_do_list, 'clickAction': \"/todo?entity_id=\" ~ to_do_list }) %}\n{{ message.data - }}" - all_sensors: - "{% set low_battery = namespace(sensors=[]) %} {% for state in states.sensor - | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', + = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {% if 'icon' in + notify_data %}\n {% set message.data = dict(message.data, **{ 'notification_icon': + notify_icon }) %}\n {% if notify_icon_colour | length == 3 %}\n {% set icon_colour + = '#%02x%02x%02x' | format(notify_icon_colour[0], notify_icon_colour[1], notify_icon_colour[2]) + %}\n {% set message.data = dict(message.data, **{ 'color': icon_colour }) %}\n + \ {% endif %}\n{% endif %} {% if notify_tag != [] %}\n {% set message.data = + dict(message.data, **{ 'tag': notify_tag }) %}\n{% endif %} {{ message.data }}" + device_message_data_action_button: "{% set message = namespace(data={}) %} {% set + push = namespace(data={}) %} {% if notify_interruption_level in ['active', 'critical', + 'time-sensitive', 'passive'] %}\n {% set push.data = dict(push.data, **{ 'interruption-level': + notify_interruption_level }) %}\n{% endif %} {% if notify_sound != [] %}\n {% + set push.data = dict(push.data, **{ 'sound': notify_sound }) %}\n{% endif %} {% + if push.data %}\n {% set message.data = dict(message.data, **{ 'push': push.data + }) %}\n{% endif %} {% if 'high_priority' in notify_data %}\n {% set message.data + = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if + 'channel' in notify_data %}\n {% set message.data = dict(message.data, **{ 'channel': + notify_channel }) %}\n{% endif %} {% if 'sticky' in notify_data %}\n {% set message.data + = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {% if 'icon' in + notify_data %}\n {% set message.data = dict(message.data, **{ 'notification_icon': + notify_icon }) %}\n {% if notify_icon_colour | length == 3 %}\n {% set icon_colour + = '#%02x%02x%02x' | format(notify_icon_colour[0], notify_icon_colour[1], notify_icon_colour[2]) + %}\n {% set message.data = dict(message.data, **{ 'color': icon_colour }) %}\n + \ {% endif %}\n{% endif %} {% if notify_tag != [] %}\n {% set message.data = + dict(message.data, **{ 'tag': notify_tag }) %}\n{% endif %} {% set actions = [\n + \ {'action': action_button_to_do, 'title': action_button_to_do},\n {'action': + action_button_cancel, 'title': action_button_cancel}\n] %}\n {% set message.data + = dict(message.data, **{ 'actions': actions }) %}\n{{ message.data }}" + device_confirmation_message_data: "{% set message = namespace(data={}) %} {% set + push = namespace(data={}) %} {% if notify_interruption_level in ['active', 'critical', + 'time-sensitive', 'passive'] %}\n {% set push.data = dict(push.data, **{ 'interruption-level': + notify_interruption_level }) %}\n{% endif %} {% if notify_sound != [] %}\n {% + set push.data = dict(push.data, **{ 'sound': notify_sound }) %}\n{% endif %} {% + if push.data %}\n {% set message.data = dict(message.data, **{ 'push': push.data + }) %}\n{% endif %} {% if 'high_priority' in notify_data %}\n {% set message.data + = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if + 'channel' in notify_data %}\n {% set message.data = dict(message.data, **{ 'channel': + notify_channel }) %}\n{% endif %} {% if 'sticky' in notify_data %}\n {% set message.data + = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {% if 'icon' in + notify_data %}\n {% set message.data = dict(message.data, **{ 'notification_icon': + notify_icon }) %}\n {% if notify_icon_colour | length == 3 %}\n {% set icon_colour + = '#%02x%02x%02x' | format(notify_icon_colour[0], notify_icon_colour[1], notify_icon_colour[2]) + %}\n {% set message.data = dict(message.data, **{ 'color': icon_colour }) %}\n + \ {% endif %}\n{% endif %} {% if notify_tag != [] %}\n {% set message.data = + dict(message.data, **{ 'tag': notify_tag }) %}\n{% endif %}\n {% set message.data + = dict(message.data, **{ 'url': \"/todo?entity_id=\" ~ to_do_list, 'clickAction': + \"/todo?entity_id=\" ~ to_do_list }) %}\n{{ message.data }}" + all_sensors: "{% set low_battery = namespace(sensors=[]) %} {% for state in states.sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state | int(-1) <= battery_level | int - and not state.entity_id in exclude_sensors.entity_id %}\n {% set low_battery.sensors - = low_battery.sensors + [state.name ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif - %}\n{% endfor %} {% for state in states.binary_sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', ['on', 'low']) %}\n {% if not state.entity_id in exclude_sensors.entity_id - %}\n {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' is - low' ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in states.sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') %}\n {% - if \"unavailable\" in state | string and not state.entity_id in exclude_sensors.entity_id - %}\n {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' is - ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor - | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', - '==', 'battery') | selectattr('state', 'in', 'unavailable') %}\n {% if not state.entity_id - in exclude_sensors.entity_id %}\n {% set low_battery.sensors = low_battery.sensors - + [state.name ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors - | # sort(attribute='battery_level') | join(', ')}}" - sensors: - "{% set low_battery = namespace(sensors=[]) %} {% for state in states.sensor - | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', + and state.entity_id not in all_exclude_sensors %}\n {% if 'friendly_name' in + battery_sensor_report_fields %}\n {% set friendly_name_text = state.name + %}\n {% else %}\n {% set friendly_name_text = '' %}\n {% endif %}\n + \ {% if 'floor' in battery_sensor_report_fields %}\n {% set floor = floor_name(state.entity_id) + %}\n {% set floor_text = ' {' ~ floor ~ '}' if floor is not none else '' + %}\n {% else %}\n {% set floor_text = '' %}\n {% endif %}\n {% if + 'area' in battery_sensor_report_fields %}\n {% set area = area_name(state.entity_id) + %}\n {% set area_text = ' (' ~ area ~ ')' if area is not none else '' %}\n + \ {% else %}\n {% set area_text = '' %}\n {% endif %}\n {% if 'device' + in battery_sensor_report_fields %}\n {% set dev_id = device_id(state.entity_id) + %}\n {% if dev_id is not none %}\n {% set dev_name = device_attr(dev_id, + 'name_by_user') or device_attr(dev_id, 'name') %}\n {% set device_text + = ' [' ~ dev_name ~ ']' if dev_name %}\n {% else %}\n {% set device_text + = '' %}\n {% endif %}\n {% else %}\n {% set device_text = '' %}\n + \ {% endif %}\n {% if 'entity_id' in battery_sensor_report_fields %}\n {% + set entity_id_text = state.entity_id %}\n {% else %}\n {% set entity_id_text + = '' %}\n {% endif %}\n {% set report_fields = [\n friendly_name_text + ~ floor_text ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', + '') | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', + '==', 'battery')\n | selectattr('state', 'in', ['on', 'low']) %}\n {% if state.entity_id + not in all_exclude_sensors %}\n {% if 'friendly_name' in battery_sensor_report_fields + %}\n {% set friendly_name_text = state.name %}\n {% else %}\n {% + set friendly_name_text = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields + %}\n {% set floor = floor_name(state.entity_id) %}\n {% set floor_text + = ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% + set floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is low!'] %}\n {% endif %}\n{% endfor %} {% for state in states.sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', + '==', 'battery')\n | selectattr('state', 'in', ['unavailable', 'unknown']) %}\n + \ {% if state.entity_id not in all_exclude_sensors %}\n {% if 'friendly_name' + in battery_sensor_report_fields %}\n {% set friendly_name_text = state.name + %}\n {% else %}\n {% set friendly_name_text = '' %}\n {% endif %}\n + \ {% if 'floor' in battery_sensor_report_fields %}\n {% set floor = floor_name(state.entity_id) + %}\n {% set floor_text = ' {' ~ floor ~ '}' if floor is not none else '' + %}\n {% else %}\n {% set floor_text = '' %}\n {% endif %}\n {% if + 'area' in battery_sensor_report_fields %}\n {% set area = area_name(state.entity_id) + %}\n {% set area_text = ' (' ~ area ~ ')' if area is not none else '' %}\n + \ {% else %}\n {% set area_text = '' %}\n {% endif %}\n {% if 'device' + in battery_sensor_report_fields %}\n {% set dev_id = device_id(state.entity_id) + %}\n {% if dev_id is not none %}\n {% set dev_name = device_attr(dev_id, + 'name_by_user') or device_attr(dev_id, 'name') %}\n {% set device_text + = ' [' ~ dev_name ~ ']' if dev_name %}\n {% else %}\n {% set device_text + = '' %}\n {% endif %}\n {% else %}\n {% set device_text = '' %}\n + \ {% endif %}\n {% if 'entity_id' in battery_sensor_report_fields %}\n {% + set entity_id_text = state.entity_id %}\n {% else %}\n {% set entity_id_text + = '' %}\n {% endif %}\n {% set report_fields = [\n friendly_name_text + ~ floor_text ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', + '') | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in + states.binary_sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id not in all_exclude_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors + | join(', ') }}" + sensors: "{% set low_battery = namespace(sensors=[]) %} {% for state in states.sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state | int(-1) <= battery_level | int - and not state.entity_id in exclude_sensors.entity_id %}\n {% set low_battery.sensors - = low_battery.sensors + [state.name ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif - %}\n{% endfor %} {% for state in states.binary_sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', ['on', 'low']) %}\n {% if not state.entity_id in exclude_sensors.entity_id - %}\n {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' is - low' ~ '!'] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors |# sort(attribute='battery_level') - | join(', ')}}" - unavailable_sensors: - "{% set low_battery = namespace(sensors=[]) %} {% for state - in states.sensor | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', - '==', 'battery') %}\n {% if \"unavailable\" in state | string and not state.entity_id - in exclude_sensors.entity_id %}\n {% set low_battery.sensors = low_battery.sensors - + [state.name ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% - for state in states.binary_sensor | rejectattr('attributes.device_class', 'undefined') - | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', 'unavailable') %}\n {% if not state.entity_id in exclude_sensors.entity_id - %}\n {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' is - ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors |# sort(attribute='battery_level') - | join(', ')}}" - sensors_names: - "{% set low_battery = namespace(sensors=[]) %} {% for state in states.sensor - | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', + and state.entity_id not in all_exclude_sensors %}\n {% if 'friendly_name' in + battery_sensor_report_fields %}\n {% set friendly_name_text = state.name + %}\n {% else %}\n {% set friendly_name_text = '' %}\n {% endif %}\n + \ {% if 'floor' in battery_sensor_report_fields %}\n {% set floor = floor_name(state.entity_id) + %}\n {% set floor_text = ' {' ~ floor ~ '}' if floor is not none else '' + %}\n {% else %}\n {% set floor_text = '' %}\n {% endif %}\n {% if + 'area' in battery_sensor_report_fields %}\n {% set area = area_name(state.entity_id) + %}\n {% set area_text = ' (' ~ area ~ ')' if area is not none else '' %}\n + \ {% else %}\n {% set area_text = '' %}\n {% endif %}\n {% if 'device' + in battery_sensor_report_fields %}\n {% set dev_id = device_id(state.entity_id) + %}\n {% if dev_id is not none %}\n {% set dev_name = device_attr(dev_id, + 'name_by_user') or device_attr(dev_id, 'name') %}\n {% set device_text + = ' [' ~ dev_name ~ ']' if dev_name %}\n {% else %}\n {% set device_text + = '' %}\n {% endif %}\n {% else %}\n {% set device_text = '' %}\n + \ {% endif %}\n {% if 'entity_id' in battery_sensor_report_fields %}\n {% + set entity_id_text = state.entity_id %}\n {% else %}\n {% set entity_id_text + = '' %}\n {% endif %}\n {% set report_fields = [\n friendly_name_text + ~ floor_text ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', + '') | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', + '==', 'battery')\n | selectattr('state', 'in', ['on', 'low']) %}\n {% if state.entity_id + not in all_exclude_sensors %}\n {% if 'friendly_name' in battery_sensor_report_fields + %}\n {% set friendly_name_text = state.name %}\n {% else %}\n {% + set friendly_name_text = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields + %}\n {% set floor = floor_name(state.entity_id) %}\n {% set floor_text + = ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% + set floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is low!'] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors | join(', + ') }}" + unavailable_sensors: "{% set low_battery = namespace(sensors=[]) %} {% for state + in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n | + selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id not in all_exclude_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in + states.binary_sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id not in all_exclude_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors + | join(', ') }}" + sensors_names: "{% set low_battery = namespace(sensors=[]) %} {% for state in states.sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state | int(-1) <= battery_level | int - and not state.entity_id in exclude_sensors.entity_id %}\n {% set low_battery.sensors + and state.entity_id not in all_exclude_sensors %}\n {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% endif %}\n{% endfor %} {% for state - in states.binary_sensor | rejectattr('attributes.device_class', 'undefined') | - selectattr('attributes.device_class', '==', 'battery') | selectattr('state', 'in', - ['on', 'low']) %}\n {% if not state.entity_id in exclude_sensors.entity_id %}\n + in states.binary_sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['on', 'low']) %}\n {% if state.entity_id not in all_exclude_sensors %}\n \ {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% endif - %}\n{% endfor %} {{low_battery.sensors | # sort(attribute='battery_level') | join(', + %}\n{% endfor %} {{low_battery.sensors | join(', ')}}" + unavailable_sensors_names: "{% set low_battery = namespace(sensors=[]) %} {% for + state in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id not in all_exclude_sensors + %}\n {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% + endif %}\n{% endfor %} {% for state in states.binary_sensor\n | rejectattr('attributes.device_class', + 'undefined')\n | selectattr('attributes.device_class', '==', 'battery')\n | + selectattr('state', 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id + not in all_exclude_sensors %}\n {% set low_battery.sensors = low_battery.sensors + + [state.name] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors | join(', ')}}" - unavailable_sensors_names: - "{% set low_battery = namespace(sensors=[]) %} {% for - state in states.sensor | rejectattr('attributes.device_class', 'undefined') | - selectattr('attributes.device_class', '==', 'battery') %}\n {% if \"unavailable\" - in state | string and not state.entity_id in exclude_sensors.entity_id %}\n {% - set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% endif %}\n{% - endfor %} {% for state in states.binary_sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', 'unavailable') %}\n {% if not state.entity_id in exclude_sensors.entity_id - %}\n {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% - endif %}\n{% endfor %} {{low_battery.sensors |# sort(attribute='battery_level') - | join(', ')}}" - all_sensors_custom_group: - "{% set low_battery = namespace(sensors=[]) %} {% for - state in states.sensor | rejectattr('attributes.device_class', 'undefined') | + all_sensors_custom_group: "{% set low_battery = namespace(sensors=[]) %} {% for + state in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state + | int(-1) <= custom_group_battery_level | int and state.entity_id in custom_group_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', + '==', 'battery')\n | selectattr('state', 'in', ['on', 'low']) %}\n {% if state.entity_id + in custom_group_sensors %}\n {% if 'friendly_name' in battery_sensor_report_fields + %}\n {% set friendly_name_text = state.name %}\n {% else %}\n {% + set friendly_name_text = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields + %}\n {% set floor = floor_name(state.entity_id) %}\n {% set floor_text + = ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% + set floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is low!'] %}\n {% endif %}\n{% endfor %} {% for state in states.sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', + '==', 'battery')\n | selectattr('state', 'in', ['unavailable', 'unknown']) %}\n + \ {% if state.entity_id in custom_group_sensors %}\n {% if 'friendly_name' + in battery_sensor_report_fields %}\n {% set friendly_name_text = state.name + %}\n {% else %}\n {% set friendly_name_text = '' %}\n {% endif %}\n + \ {% if 'floor' in battery_sensor_report_fields %}\n {% set floor = floor_name(state.entity_id) + %}\n {% set floor_text = ' {' ~ floor ~ '}' if floor is not none else '' + %}\n {% else %}\n {% set floor_text = '' %}\n {% endif %}\n {% if + 'area' in battery_sensor_report_fields %}\n {% set area = area_name(state.entity_id) + %}\n {% set area_text = ' (' ~ area ~ ')' if area is not none else '' %}\n + \ {% else %}\n {% set area_text = '' %}\n {% endif %}\n {% if 'device' + in battery_sensor_report_fields %}\n {% set dev_id = device_id(state.entity_id) + %}\n {% if dev_id is not none %}\n {% set dev_name = device_attr(dev_id, + 'name_by_user') or device_attr(dev_id, 'name') %}\n {% set device_text + = ' [' ~ dev_name ~ ']' if dev_name %}\n {% else %}\n {% set device_text + = '' %}\n {% endif %}\n {% else %}\n {% set device_text = '' %}\n + \ {% endif %}\n {% if 'entity_id' in battery_sensor_report_fields %}\n {% + set entity_id_text = state.entity_id %}\n {% else %}\n {% set entity_id_text + = '' %}\n {% endif %}\n {% set report_fields = [\n friendly_name_text + ~ floor_text ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', + '') | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in + states.binary_sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id in custom_group_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors + | join(', ') }}" + sensors_custom_group: "{% set low_battery = namespace(sensors=[]) %} {% for state + in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state - | int(-1) <= custom_group_battery_level | int and state.entity_id in custom_group.entity_id - %}\n {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' @ ' - ~ state.state ~ '%'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor - | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', - '==', 'battery') | selectattr('state', 'in', ['on', 'low']) %}\n {% if state.entity_id - in custom_group.entity_id %}\n {% set low_battery.sensors = low_battery.sensors - + [state.name ~ ' is low' ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state - in states.sensor | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', - '==', 'battery') %}\n {% if \"unavailable\" in state | string and state.entity_id - in custom_group.entity_id %}\n {% set low_battery.sensors = low_battery.sensors - + [state.name ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% - for state in states.binary_sensor | rejectattr('attributes.device_class', 'undefined') - | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', 'unavailable') %}\n {% if state.entity_id in custom_group.entity_id %}\n - \ {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' is ' ~ - state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors | # sort(attribute='custom_group_battery_level') - | join(', ')}}" - sensors_custom_group: - "{% set low_battery = namespace(sensors=[]) %} {% for state - in states.sensor | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', - '==', 'battery') %}\n {% if 0 <= state.state | int(-1) <= custom_group_battery_level - | int and state.entity_id in custom_group.entity_id %}\n {% set low_battery.sensors - = low_battery.sensors + [state.name ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif - %}\n{% endfor %} {% for state in states.binary_sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', ['on', 'low']) %}\n {% if state.entity_id in custom_group.entity_id %}\n - \ {% set low_battery.sensors = low_battery.sensors + [state.name ~ ' is low' - ~ '!'] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors |# sort(attribute='custom_group_battery_level') - | join(', ')}}" - unavailable_sensors_custom_group: - "{% set low_battery = namespace(sensors=[]) %} - {% for state in states.sensor | rejectattr('attributes.device_class', 'undefined') - | selectattr('attributes.device_class', '==', 'battery') %}\n {% if \"unavailable\" - in state | string and state.entity_id in custom_group.entity_id %}\n {% set - low_battery.sensors = low_battery.sensors + [state.name ~ ' is ' ~ state.state - ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor | - rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', - '==', 'battery') | selectattr('state', 'in', 'unavailable') %}\n {% if state.entity_id - in custom_group.entity_id %}\n {% set low_battery.sensors = low_battery.sensors - + [state.name ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{low_battery.sensors - |# sort(attribute='custom_group_battery_level') | join(', ')}}" - sensors_names_custom_group: - "{% set low_battery = namespace(sensors=[]) %} {% for - state in states.sensor | rejectattr('attributes.device_class', 'undefined') | - selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state - | int(-1) <= custom_group_battery_level | int and state.entity_id in custom_group.entity_id + | int(-1) <= custom_group_battery_level | int and state.entity_id in custom_group_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' @ ' ~ state.state ~ '%'] %}\n {% endif %}\n{% endfor %} {% for state in states.binary_sensor\n + \ | rejectattr('attributes.device_class', 'undefined')\n | selectattr('attributes.device_class', + '==', 'battery')\n | selectattr('state', 'in', ['on', 'low']) %}\n {% if state.entity_id + in custom_group_sensors %}\n {% if 'friendly_name' in battery_sensor_report_fields + %}\n {% set friendly_name_text = state.name %}\n {% else %}\n {% + set friendly_name_text = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields + %}\n {% set floor = floor_name(state.entity_id) %}\n {% set floor_text + = ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% + set floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is low!'] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors | join(', + ') }}" + unavailable_sensors_custom_group: "{% set low_battery = namespace(sensors=[]) %} + {% for state in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id in custom_group_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {% for state in + states.binary_sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id in custom_group_sensors + %}\n {% if 'friendly_name' in battery_sensor_report_fields %}\n {% set + friendly_name_text = state.name %}\n {% else %}\n {% set friendly_name_text + = '' %}\n {% endif %}\n {% if 'floor' in battery_sensor_report_fields %}\n + \ {% set floor = floor_name(state.entity_id) %}\n {% set floor_text = + ' {' ~ floor ~ '}' if floor is not none else '' %}\n {% else %}\n {% set + floor_text = '' %}\n {% endif %}\n {% if 'area' in battery_sensor_report_fields + %}\n {% set area = area_name(state.entity_id) %}\n {% set area_text + = ' (' ~ area ~ ')' if area is not none else '' %}\n {% else %}\n {% set + area_text = '' %}\n {% endif %}\n {% if 'device' in battery_sensor_report_fields + %}\n {% set dev_id = device_id(state.entity_id) %}\n {% if dev_id is + not none %}\n {% set dev_name = device_attr(dev_id, 'name_by_user') or + device_attr(dev_id, 'name') %}\n {% set device_text = ' [' ~ dev_name ~ + ']' if dev_name %}\n {% else %}\n {% set device_text = '' %}\n {% + endif %}\n {% else %}\n {% set device_text = '' %}\n {% endif %}\n + \ {% if 'entity_id' in battery_sensor_report_fields %}\n {% set entity_id_text + = state.entity_id %}\n {% else %}\n {% set entity_id_text = '' %}\n {% + endif %}\n {% set report_fields = [\n friendly_name_text ~ floor_text + ~ area_text ~ device_text,\n entity_id_text\n ] | reject('equalto', '') + | join(' - ') %}\n {% set low_battery.sensors = low_battery.sensors + [report_fields + ~ ' is ' ~ state.state ~ '!'] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors + | join(', ') }}" + sensors_names_custom_group: "{% set low_battery = namespace(sensors=[]) %} {% for + state in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery') %}\n {% if 0 <= state.state + | int(-1) <= custom_group_battery_level | int and state.entity_id in custom_group_sensors %}\n {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% - endif %}\n{% endfor %} {% for state in states.binary_sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', ['on', 'low']) %}\n {% if state.entity_id in custom_group.entity_id %}\n - \ {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% endif - %}\n{% endfor %} {{low_battery.sensors | # sort(attribute='custom_group_battery_level') - | join(', ')}}" - unavailable_sensors_names_custom_group: - "{% set low_battery = namespace(sensors=[]) - %} {% for state in states.sensor | rejectattr('attributes.device_class', 'undefined') - | selectattr('attributes.device_class', '==', 'battery') %}\n {% if \"unavailable\" - in state | string and state.entity_id in custom_group.entity_id %}\n {% set - low_battery.sensors = low_battery.sensors + [state.name] %}\n {% endif %}\n{% - endfor %} {% for state in states.binary_sensor | rejectattr('attributes.device_class', - 'undefined') | selectattr('attributes.device_class', '==', 'battery') | selectattr('state', - 'in', 'unavailable') %}\n {% if state.entity_id in custom_group.entity_id %}\n - \ {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% endif - %}\n{% endfor %} {{low_battery.sensors |# sort(attribute='custom_group_battery_level') - | join(', ')}}" - easy_notify_message: - "{% set low_battery = namespace(sensors=[]) %} {% if sensor_selection + endif %}\n{% endfor %} {% for state in states.binary_sensor\n | rejectattr('attributes.device_class', + 'undefined')\n | selectattr('attributes.device_class', '==', 'battery')\n | + selectattr('state', 'in', ['on', 'low']) %}\n {% if state.entity_id in custom_group_sensors + %}\n {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% + endif %}\n{% endfor %} {{ low_battery.sensors | join(', ') }}" + unavailable_sensors_names_custom_group: "{% set low_battery = namespace(sensors=[]) + %} {% for state in states.sensor\n | rejectattr('attributes.device_class', 'undefined')\n + \ | selectattr('attributes.device_class', '==', 'battery')\n | selectattr('state', + 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id in custom_group_sensors + %}\n {% set low_battery.sensors = low_battery.sensors + [state.name] %}\n {% + endif %}\n{% endfor %} {% for state in states.binary_sensor\n | rejectattr('attributes.device_class', + 'undefined')\n | selectattr('attributes.device_class', '==', 'battery')\n | + selectattr('state', 'in', ['unavailable', 'unknown']) %}\n {% if state.entity_id + in custom_group_sensors %}\n {% set low_battery.sensors = low_battery.sensors + + [state.name] %}\n {% endif %}\n{% endfor %} {{ low_battery.sensors | join(', + ') }}" + easy_notify_message: "{% set low_battery = namespace(sensors=[]) %} {% if sensor_selection == 'enable_battery_sensors_custom_group' and notify_message == 'all_sensors' %}\n \ {{all_sensors_custom_group|replace(', ', '\\n')}}\n{% elif sensor_selection == 'enable_battery_sensors_custom_group' and notify_message == 'sensors'%}\n {{sensors_custom_group|replace(', @@ -790,234 +1560,355 @@ variables: and notify_message == 'unavailable_sensors'%}\n {{unavailable_sensors|replace(', ', '\\n')}}{{'\\n'}}{{unavailable_sensors_custom_group|replace(', ', '\\n')}}\n{% else %}\n []\n{% endif %}" + persistent_easy_notify_message: "{% set low_battery = namespace(sensors=[]) %} {% + if persistent_sensor_selection == 'enable_battery_sensors_custom_group' and persistent_notify_message + == 'all_sensors' %}\n {{all_sensors_custom_group|replace(', ', '\\n')}}\n{% elif + persistent_sensor_selection == 'enable_battery_sensors_custom_group' and persistent_notify_message + == 'sensors'%}\n {{sensors_custom_group|replace(', ', '\\n')}}\n{% elif persistent_sensor_selection + == 'enable_battery_sensors_custom_group' and persistent_notify_message == 'unavailable_sensors'%}\n + \ {{unavailable_sensors_custom_group|replace(', ', '\\n')}}\n{% elif persistent_sensor_selection + == 'enable_all_sensors' and persistent_notify_message == 'all_sensors' %}\n {{all_sensors|replace(', + ', '\\n')}}\n{% elif persistent_sensor_selection == 'enable_all_sensors' and persistent_notify_message + == 'sensors'%}\n {{sensors|replace(', ', '\\n')}}\n{% elif persistent_sensor_selection + == 'enable_all_sensors' and persistent_notify_message == 'unavailable_sensors'%}\n + \ {{unavailable_sensors|replace(', ', '\\n')}}\n{% elif persistent_sensor_selection + == 'enable_all_and_custom_group_sensors' and persistent_notify_message == 'all_sensors' + %}\n {{all_sensors|replace(', ', '\\n')}}{{'\\n'}}{{all_sensors_custom_group|replace(', + ', '\\n')}}\n{% elif persistent_sensor_selection == 'enable_all_and_custom_group_sensors' + and persistent_notify_message == 'sensors'%}\n {{sensors|replace(', ', '\\n')}}{{'\\n'}}{{sensors_custom_group|replace(', + ', '\\n')}}\n{% elif persistent_sensor_selection == 'enable_all_and_custom_group_sensors' + and persistent_notify_message == 'unavailable_sensors'%}\n {{unavailable_sensors|replace(', + ', '\\n')}}{{'\\n'}}{{unavailable_sensors_custom_group|replace(', ', '\\n')}}\n{% + else %}\n []\n{% endif %}" + persistent_message_data: "{% set message = namespace(data={}) %} {% set message.data + = dict(message.data, title=persistent_notify_title, message=persistent_easy_notify_message) + %} {% if persistent_notify_id != [] %}\n {% set message.data = dict(message.data, + **{ 'notification_id': persistent_notify_id }) %}\n{% endif %} {{ message.data + }}" + persistent_okay_message_data: "{% set message = namespace(data={}) %} {% set message.data + = dict(message.data, title=persistent_notify_title, message=persistent_notify_okay_message) + %} {% if persistent_notify_id != [] %}\n {% set message.data = dict(message.data, + **{ 'notification_id': persistent_notify_id }) %}\n{% endif %} {{ message.data + }}" + dashboard_easy_notify_message: "{% set low_battery = namespace(sensors=[]) %} {% + if dashboard_sensor_selection == 'enable_battery_sensors_custom_group' and dashboard_notify_message + == 'all_sensors' %}\n {{all_sensors_custom_group|replace(', ', '\\n')}}\n{% elif + dashboard_sensor_selection == 'enable_battery_sensors_custom_group' and dashboard_notify_message + == 'sensors'%}\n {{sensors_custom_group|replace(', ', '\\n')}}\n{% elif dashboard_sensor_selection + == 'enable_battery_sensors_custom_group' and dashboard_notify_message == 'unavailable_sensors'%}\n + \ {{unavailable_sensors_custom_group|replace(', ', '\\n')}}\n{% elif dashboard_sensor_selection + == 'enable_all_sensors' and dashboard_notify_message == 'all_sensors' %}\n {{all_sensors|replace(', + ', '\\n')}}\n{% elif dashboard_sensor_selection == 'enable_all_sensors' and dashboard_notify_message + == 'sensors'%}\n {{sensors|replace(', ', '\\n')}}\n{% elif dashboard_sensor_selection + == 'enable_all_sensors' and dashboard_notify_message == 'unavailable_sensors'%}\n + \ {{unavailable_sensors|replace(', ', '\\n')}}\n{% elif dashboard_sensor_selection + == 'enable_all_and_custom_group_sensors' and dashboard_notify_message == 'all_sensors' + %}\n {{all_sensors|replace(', ', '\\n')}}{{'\\n'}}{{all_sensors_custom_group|replace(', + ', '\\n')}}\n{% elif dashboard_sensor_selection == 'enable_all_and_custom_group_sensors' + and dashboard_notify_message == 'sensors'%}\n {{sensors|replace(', ', '\\n')}}{{'\\n'}}{{sensors_custom_group|replace(', + ', '\\n')}}\n{% elif dashboard_sensor_selection == 'enable_all_and_custom_group_sensors' + and dashboard_notify_message == 'unavailable_sensors'%}\n {{unavailable_sensors|replace(', + ', '\\n')}}{{'\\n'}}{{unavailable_sensors_custom_group|replace(', ', '\\n')}}\n{% + else %}\n []\n{% endif %}" triggers: - - trigger: state - entity_id: !input button_entity - id: t0 - - trigger: time - at: !input time - id: t1 +- trigger: state + entity_id: !input button_entity + id: t0 +- trigger: time + at: !input time + id: t1 condition: - - condition: or - conditions: - - condition: and - conditions: - - condition: trigger - id: t0 - - "{{ include_button == 'enable_button_trigger' }}" - - condition: and - conditions: - - condition: trigger - id: t1 - - "{{ include_time == 'time_enabled' }}" - - condition: or - conditions: - - "{{ include_time == 'time_disabled' }}" - - condition: and - conditions: - - condition: time - weekday: !input weekday_options - - "{{ include_time == 'time_enabled' }}" - - condition: trigger - id: t0 +- condition: or + conditions: - condition: and - conditions: !input global_conditions -actions: - - choose: - - alias: Perform the custom actions - conditions: - - condition: template - value_template: "{{ include_custom_actions == 'enable_custom_actions' }}" - sequence: !input custom_actions - - choose: - - alias: Use the easy notify options - conditions: - - condition: template - value_template: - "{{ (include_easy_notify == 'enable_easy_notify') or (include_easy_notify - == 'enable_easy_okay_notify') }}" - - condition: template - value_template: "{{ notify_device | length > 0 }}" + conditions: + - condition: trigger + id: t0 + - '{{ include_button == ''enable_button_trigger'' }}' + - condition: and + conditions: + - condition: trigger + id: t1 + - '{{ include_time == ''time_enabled'' }}' +- condition: or + conditions: + - '{{ include_time == ''time_disabled'' }}' + - condition: and + conditions: + - condition: time + weekday: !input weekday_options + - '{{ include_time == ''time_enabled'' }}' + - condition: trigger + id: t0 +- condition: and + conditions: !input global_conditions +action: +- choose: + - alias: Perform the custom actions + conditions: + - condition: template + value_template: '{{ include_custom_actions == ''enable_custom_actions'' }}' + sequence: !input custom_actions +- choose: + - alias: Use the easy notify device options + conditions: + - condition: template + value_template: '{{ (include_easy_notify == ''enable_easy_notify'') or (include_easy_notify + == ''enable_easy_okay_notify'') }}' + - condition: template + value_template: '{{ notify_device | length > 0 }}' + sequence: + - alias: Send a notification to each device + repeat: + for_each: !input notify_device sequence: - - alias: Send a notification to each device - repeat: - for_each: !input notify_device + - choose: + - alias: Sensors have been found + conditions: + - '{{ easy_notify_message != '''' }}' + sequence: + - choose: + - alias: Easy notify with no action button + conditions: + - '{{ notify_action_buttons == ''disabled_notify_action_buttons'' + }}' + sequence: + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') | + slugify }} + data: + title: !input notify_title + message: '{{easy_notify_message}}' + data: '{{ device_message_data }}' + continue_on_error: true + - alias: Easy notify with action button + conditions: + - '{{ notify_action_buttons != ''disabled_notify_action_buttons'' + }}' + sequence: + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') | + slugify }} + data: + title: !input notify_title + message: '{{easy_notify_message}}' + data: '{{ device_message_data_action_button }}' + continue_on_error: true + - alias: No sensors have been found + conditions: + - '{{ easy_notify_message == '''' }}' + - '{{ include_easy_notify == ''enable_easy_okay_notify'' }}' + sequence: + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify + }} + data: + title: !input notify_title + message: !input notify_okay_message + data: '{{ device_message_data }}' + continue_on_error: true +- choose: + - alias: Use the easy notify persistent notification options + conditions: + - condition: template + value_template: '{{ (include_persistent_notification == ''enable_persistent_notification'') + or (include_persistent_notification == ''enable_persistent_okay_notification'') + }}' + sequence: + - choose: + - alias: Sensors have been found + conditions: + - '{{ persistent_easy_notify_message != '''' }}' + sequence: + - action: persistent_notification.create + data: '{{ persistent_message_data }}' + - alias: No sensors have been found + conditions: + - '{{ persistent_easy_notify_message == '''' }}' + - '{{ include_persistent_notification == ''enable_persistent_okay_notification'' + }}' + sequence: + - action: persistent_notification.create + data: '{{ persistent_okay_message_data }}' +- choose: + - alias: Use the easy notify dashboard notification options + conditions: + - condition: template + value_template: '{{ include_dashboard_notification == ''enable_dashboard_okay_notification'' + }} + + ' + sequence: + - choose: + - alias: Sensors have been found + conditions: + - '{{ dashboard_easy_notify_message != '''' }}' + sequence: + - action: input_text.set_value + target: + entity_id: !input dashboard_notification_text_helper + data_template: + value: '{{ now().strftime(''%d %b %Y'') }} - {{ now().strftime(''%I'')|int + }}:{{ now().strftime(''%M %p'') ~ '' + + + '' ~ dashboard_easy_notify_message[:228] }}' + - alias: No sensors have been found + conditions: + - '{{ dashboard_easy_notify_message == '''' }}' + sequence: + - action: input_text.set_value + target: + entity_id: !input dashboard_notification_text_helper + data_template: + value: '{{ now().strftime(''%d %b %Y'') }} - {{ now().strftime(''%I'')|int + }}:{{ now().strftime(''%M %p'') ~ '' + + + '' ~ dashboard_notify_okay_message[:228] }}' +- choose: + - alias: Check if the easy notify - device To-Do action button is enabled + conditions: + - condition: template + value_template: '{{ (include_easy_notify == ''enable_easy_notify'') or (include_easy_notify + == ''enable_easy_okay_notify'') }}' + - condition: template + value_template: '{{(notify_action_buttons == ''enable_to_do_list_button'') or + (notify_action_buttons == ''enable_to_do_list_button_and_confirmation'') or + (notify_action_buttons == ''enable_to_do_list_button_and_clear'')}}' + - condition: template + value_template: '{{ notify_device | length > 0 }}' + sequence: + - alias: Wait for a response from the action buttons + wait_for_trigger: + - trigger: event + event_type: mobile_app_notification_action + event_data: + action: '{{ action_button_to_do }}' + - trigger: event + event_type: mobile_app_notification_action + event_data: + action: '{{ action_button_cancel }}' + - choose: + - alias: Check if confirmation message is disabled + conditions: + - condition: template + value_template: '{{ notify_action_buttons == ''enable_to_do_list_button'' + }}' + sequence: + - if: + - alias: Confirmation from the action buttons + condition: template + value_template: '{{ wait.trigger.idx is defined }}' + then: + - alias: Perform the chosen actions + choose: + - conditions: '{{ wait.trigger.event.data.action == action_button_to_do + }}' sequence: - - choose: - - alias: Sensors have been found - conditions: - - "{{ easy_notify_message != '' }}" + - alias: Add task to To-Do list + action: todo.add_item + metadata: {} + data: + item: !input to_do_task_title + description: '{{easy_notify_message}}' + target: + entity_id: !input to_do_list + - conditions: '{{ wait.trigger.event.data.action == action_button_cancel + }}' + sequence: + - stop: Stop the automation + - alias: Check if confirmation message is enabled + conditions: + - condition: template + value_template: '{{ (notify_action_buttons == ''enable_to_do_list_button_and_confirmation'') + or (notify_action_buttons == ''enable_to_do_list_button_and_clear'') }}' + sequence: + - if: + - alias: Confirmation from the action buttons + condition: template + value_template: '{{ wait.trigger.idx is defined }}' + then: + - alias: Perform the chosen actions + choose: + - conditions: '{{ wait.trigger.event.data.action == action_button_to_do + }}' + sequence: + - alias: Add task to To-Do list + action: todo.add_item + metadata: {} + data: + item: !input to_do_task_title + description: '{{easy_notify_message}}' + target: + entity_id: !input to_do_list + - choose: + - alias: Check if confirmation message is enabled + conditions: + - condition: template + value_template: '{{ notify_action_buttons == ''enable_to_do_list_button_and_confirmation'' + }}' + sequence: + - alias: Send a notification to each device + repeat: + for_each: !input notify_device sequence: - - choose: - - alias: Easy notify with no action button - conditions: - - "{{ notify_action_buttons == 'disabled_notify_action_buttons' - }}" - sequence: - - action: - notify.mobile_app_{{ device_attr(repeat.item, 'name') | - slugify }} - data: - title: !input notify_title - message: "{{easy_notify_message}}" - data: "{{ device_message_data }}" - - alias: Easy notify with action button - conditions: - - "{{ notify_action_buttons != 'disabled_notify_action_buttons' - }}" - sequence: - - action: - notify.mobile_app_{{ device_attr(repeat.item, 'name') | - slugify }} - data: - title: !input notify_title - message: "{{easy_notify_message}}" - data: "{{ device_message_data_action_button }}" - - alias: No sensors have been found - conditions: - - "{{ easy_notify_message == '' }}" - - "{{ include_easy_notify == 'enable_easy_okay_notify' }}" + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') + | slugify }} + data: + title: !input action_button_confirmation_title + message: !input action_button_confirmation_message + data: '{{ device_confirmation_message_data }}' + continue_on_error: true + - alias: Check if clear when done is enabled + conditions: + - condition: template + value_template: '{{ notify_action_buttons == ''enable_to_do_list_button_and_clear'' + }}' + sequence: + - alias: Send a notification to each device + repeat: + for_each: !input notify_device sequence: - - action: - notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify - }} + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') + | slugify }} + data: + message: clear_notification data: - title: !input notify_title - message: !input notify_okay_message - data: "{{ device_message_data }}" - - choose: - - alias: Use the easy notify persistent notification options - conditions: - - condition: template - value_template: - "{{ (include_persistent_notification == 'enable_persistent_notification') - or (include_persistent_notification == 'enable_persistent_okay_notification') - }}" - sequence: - - choose: - - alias: Sensors have been found - conditions: - - "{{ easy_notify_message != '' }}" - sequence: - - action: persistent_notification.create - data: - title: "\U0001FAAB {{notify_title}}" - message: "{{easy_notify_message}}" - - alias: No sensors have been found - conditions: - - "{{ easy_notify_message == '' }}" - - "{{ include_persistent_notification == 'enable_persistent_okay_notification' - }}" - sequence: - - action: persistent_notification.create - data: - title: "\U0001FAAB {{notify_title}}" - message: !input notify_okay_message - - choose: - - alias: Check if the To-Do action button is enabled - conditions: - - condition: template - value_template: - "{{ (include_easy_notify == 'enable_easy_notify') or (include_easy_notify - == 'enable_easy_okay_notify') }}" - - condition: template - value_template: - "{{(notify_action_buttons == 'enable_to_do_list_button') or - (notify_action_buttons == 'enable_to_do_list_button_and_confirmation')}}" - - condition: template - value_template: "{{ notify_device | length > 0 }}" - sequence: - - alias: Wait for a response from the action buttons - wait_for_trigger: - - trigger: event - event_type: mobile_app_notification_action - event_data: - action: "{{ action_button_to_do }}" - - trigger: event - event_type: mobile_app_notification_action - event_data: - action: "{{ action_button_cancel }}" - - choose: - - alias: Check if confirmation message is disabled - conditions: + tag: !input notify_tag + continue_on_error: true + - conditions: '{{ wait.trigger.event.data.action == action_button_cancel + }}' + sequence: + - choose: + - alias: Check if confirmation message is enabled + conditions: - condition: template - value_template: - "{{ notify_action_buttons == 'enable_to_do_list_button' - }}" - sequence: - - if: - - alias: Confirmation from the action buttons - condition: template - value_template: "{{ wait.trigger.idx is defined }}" - then: - - alias: Perform the chosen actions - choose: - - conditions: - "{{ wait.trigger.event.data.action == action_button_to_do - }}" - sequence: - - alias: Add task to To-Do list - action: todo.add_item - metadata: {} - data: - item: !input to_do_task_title - description: "{{easy_notify_message}}" - target: - entity_id: !input to_do_list - - conditions: - "{{ wait.trigger.event.data.action == action_button_cancel - }}" - sequence: - - stop: Stop the automation - - alias: Check if confirmation message is enabled - conditions: + value_template: '{{ notify_action_buttons == ''enable_to_do_list_button_and_confirmation'' + }}' + sequence: + - alias: Send a notification to each device + repeat: + for_each: !input notify_device + sequence: + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') + | slugify }} + data: + title: !input action_button_confirmation_title + message: !input cancel_action_button_confirmation_message + data: '{{ device_message_data }}' + continue_on_error: true + - alias: Check if clear when done is enabled + conditions: - condition: template - value_template: - "{{ notify_action_buttons == 'enable_to_do_list_button_and_confirmation' - }}" - sequence: - - if: - - alias: Confirmation from the action buttons - condition: template - value_template: "{{ wait.trigger.idx is defined }}" - then: - - alias: Perform the chosen actions - choose: - - conditions: - "{{ wait.trigger.event.data.action == action_button_to_do - }}" - sequence: - - alias: Add task to To-Do list - action: todo.add_item - metadata: {} - data: - item: !input to_do_task_title - description: "{{easy_notify_message}}" - target: - entity_id: !input to_do_list - - alias: Send a notification to each device - repeat: - for_each: !input notify_device - sequence: - - action: - notify.mobile_app_{{ device_attr(repeat.item, 'name') - | slugify }} - data: - title: !input action_button_confirmation_title - message: !input action_button_confirmation_message - data: "{{ device_confirmation_message_data }}" - - conditions: - "{{ wait.trigger.event.data.action == action_button_cancel - }}" - sequence: - - alias: Send a notification to each device - repeat: - for_each: !input notify_device - sequence: - - action: - notify.mobile_app_{{ device_attr(repeat.item, 'name') - | slugify }} - data: - title: !input action_button_confirmation_title - message: !input cancel_action_button_confirmation_message - data: "{{ device_message_data }}" + value_template: '{{ notify_action_buttons == ''enable_to_do_list_button_and_clear'' + }}' + sequence: + - alias: Send a notification to each device + repeat: + for_each: !input notify_device + sequence: + - action: notify.mobile_app_{{ device_attr(repeat.item, 'name') + | slugify }} + data: + message: clear_notification + data: + tag: !input notify_tag + continue_on_error: true