138 lines
5.2 KiB
Markdown
138 lines
5.2 KiB
Markdown
|
If you are using OwnTracks and have ZWave Devices, use the following script to create battery card:
|
||
|
|
||
|
1. Copy `input_label.yaml` and `services.yaml` from my `custom_components` folder into your `custom_components` folder.
|
||
|
|
||
|
2. Run the following script in your dev-templates editor, and copy the output and paste the output into `batteries.yaml` file
|
||
|
|
||
|
3. Copy and paste the below automations code **as-is** in your `batteries.yaml` file.
|
||
|
|
||
|
4. Restart HA
|
||
|
|
||
|
```
|
||
|
|
||
|
input_label:
|
||
|
{%- for state in states.zwave if state.attributes.battery_level | trim != "" %}
|
||
|
{{ state.entity_id.split('.')[1] }}:
|
||
|
{%- endfor %}
|
||
|
|
||
|
{% for state in states.device_tracker if '_' in state.entity_id.split('.')[1] %}
|
||
|
{{ state.entity_id.split('.')[1].split('_')[0] }}_battery:
|
||
|
{{ state.entity_id.split('.')[1].split('_')[0] }}_wifi:
|
||
|
{%- endfor %}
|
||
|
|
||
|
group:
|
||
|
ZWave Batteries:
|
||
|
entities:
|
||
|
{%- for state in states.zwave %}
|
||
|
- input_label.{{ state.entity_id.split('.')[1] }}
|
||
|
{%- endfor %}
|
||
|
|
||
|
Phone Batteries:
|
||
|
entities:
|
||
|
{%- for state in states.device_tracker if '_' in state.entity_id.split('.')[1] %}
|
||
|
- {{ state.entity_id.split('.')[1].split('_')[0] }}_battery
|
||
|
{%- endfor %}
|
||
|
|
||
|
Phone WiFi:
|
||
|
entities:
|
||
|
{%- for state in states.device_tracker if '_' in state.entity_id.split('.')[1] %}
|
||
|
- {{ state.entity_id.split('.')[1].split('_')[0] }}_wifi
|
||
|
{%- endfor %}
|
||
|
|
||
|
```
|
||
|
|
||
|
Copy the following automations as-is in your `batteries.yaml` file:
|
||
|
|
||
|
```
|
||
|
|
||
|
automation:
|
||
|
- alias: Update ZWave Battery Levels
|
||
|
trigger:
|
||
|
- platform: event
|
||
|
event_type: state_changed
|
||
|
condition:
|
||
|
- condition: template
|
||
|
value_template: "{{ trigger.event.data.entity_id is not none }}"
|
||
|
- condition: template
|
||
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'zwave' }}"
|
||
|
- condition: template
|
||
|
value_template: "{{ trigger.event.data.new_state.attributes is not none }}"
|
||
|
- condition: template
|
||
|
value_template: "{{ trigger.event.data.new_state.attributes.battery_level | trim != '' }}"
|
||
|
- condition: template
|
||
|
value_template: "{{ trigger.event.data.new_state.attributes.battery_level | default(999) | int != 999 }}"
|
||
|
action:
|
||
|
- service: input_label.set_value
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{- trigger.event.data.entity_id.split('.')[1] -}}"
|
||
|
value: "{{ trigger.event.data.new_state.attributes.battery_level }}"
|
||
|
- service: input_label.set_name
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{- trigger.event.data.entity_id.split('.')[1] -}}"
|
||
|
value: "{{ trigger.event.data.new_state.attributes.friendly_name }}'s Battery"
|
||
|
- service: input_label.set_icon
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{- trigger.event.data.entity_id.split('.')[1] -}}"
|
||
|
value: >
|
||
|
{% set battery_level = trigger.event.data.new_state.attributes.battery_level | int %}
|
||
|
{% set battery_round = (battery_level / 10)|int * 10 %}
|
||
|
{% if battery_round >= 100 %}
|
||
|
mdi:battery
|
||
|
{% elif battery_round > 0 %}
|
||
|
mdi:battery-{{ battery_round }}
|
||
|
{% else %}
|
||
|
mdi:battery-alert
|
||
|
{% endif %}
|
||
|
|
||
|
- alias: Update Phone Battery Levels
|
||
|
initial_state: true
|
||
|
trigger:
|
||
|
platform: mqtt
|
||
|
topic: "owntracks/+/+"
|
||
|
action:
|
||
|
- service: input_label.set_value
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{trigger.topic.split('/')[-1]}}_wifi"
|
||
|
value: "{{ 'Yes' if trigger.payload_json.conn == 'w' else 'No' }}"
|
||
|
- service: input_label.set_icon
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{trigger.topic.split('/')[-1]}}_wifi"
|
||
|
value: "{{ 'mdi:wifi' if trigger.payload_json.conn == 'w' else 'mdi:wifi-off' }}"
|
||
|
- service: input_label.set_name
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{trigger.topic.split('/')[-1]}}_wifi"
|
||
|
value: "{{trigger.topic.split('/')[-1] | title }}'s phone wifi enabled?"
|
||
|
|
||
|
- service: input_label.set_value
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{trigger.topic.split('/')[-1]}}_battery"
|
||
|
value: '{{ trigger.payload_json.batt | int }}'
|
||
|
- service: input_label.set_name
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{trigger.topic.split('/')[-1]}}_battery"
|
||
|
value: "{{trigger.topic.split('/')[-1] | title }}'s Battery"
|
||
|
- service: input_label.set_icon
|
||
|
data_template:
|
||
|
entity_id: "input_label.{{trigger.topic.split('/')[-1]}}_battery"
|
||
|
value: >
|
||
|
{% set battery_level = trigger.payload_json.batt | int %}
|
||
|
{% set battery_round = (battery_level / 10)|int * 10 %}
|
||
|
{% if trigger.payload_json.charging == 1 %}
|
||
|
{% if battery_round >= 100 %}
|
||
|
mdi:battery-charging-100
|
||
|
{% elif battery_round > 0 %}
|
||
|
mdi:battery-charging-{{ battery_round }}
|
||
|
{% else %}
|
||
|
mdi:battery-alert
|
||
|
{% endif %}
|
||
|
{% else %}
|
||
|
{% if battery_round >= 100 %}
|
||
|
mdi:battery
|
||
|
{% elif battery_round > 0 %}
|
||
|
mdi:battery-{{ battery_round }}
|
||
|
{% else %}
|
||
|
mdi:battery-alert
|
||
|
{% endif %}
|
||
|
{% endif %}
|
||
|
```
|