Ja, aber auch da mache ich viel in YAML. Der Vorteil ist, dass man gleichzeitig das Ergebnis optisch dargestellt bekommt und gegebenenfalls direkt reagieren kann. Soviel dazu.
Ich versuche in meinem Dashboard die battery-state-card zu immitieren. Grund dafür ist, dass ich HomeMatic nutze und dabei viele Batteriedevices keine Prozentzahl, sondern nur battery_low ausgeben.
Hier ist die soweit funktionierende Dashboardkarte.
- type: custom:auto-entities
card:
type: entities
style: |
ha-card {
border: none;
padding: 0 !important;
margin: 0 !important;
box-shadow: none;
}
filter:
template: |-
[
{% for e in state_attr('sensor.battery_plus_devices', 'entities')[:5] %}
{
"type": "custom:template-entity-row",
"entity": "{{ e }}",
"name": "{% set n = state_attr(e, 'friendly_name') %}{{ n | replace(' Akku fast leer', '') | replace(' Batterie', '') | replace(' Battery', '') | replace(' level', '') | replace('+', '') | trim }}",
"icon": "{% set s = states(e) %}{% if s in ['on', 'off'] %}mdi:battery{% else %}{% set l = s | int(0) %}{% if l >= 95 %}mdi:battery{% elif l >= 80 %}mdi:battery-90{% elif l >= 60 %}mdi:battery-70{% elif l >= 40 %}mdi:battery-50{% elif l >= 20 %}mdi:battery-30{% elif l >= 10 %}mdi:battery-20{% else %}mdi:battery-outline{% endif %}{% endif %}",
"color": "{% set s = states(e) %}{% if s == 'on' %}red{% elif s == 'off' %}green{% else %}{% set l = s | int(0) %}{% if l < 15 %}red{% elif l < 40 %}orange{% elif l < 60 %}yellow{% else %}green{% endif %}{% endif %}",
"state": "{% set s = states(e) %}{% if s == 'on' %}niedrig{% elif s == 'off' %}normal{% else %}{{ s | int }} %{% endif %}",
"secondary": "{{ state_attr(e, 'battery_type_and_quantity') or '' }}",
"tap_action": {
"action": "fire-dom-event",
"browser_mod": {
"service": "browser_mod.popup",
"data": {
"title": "{{ state_attr(e, 'friendly_name') }}",
"content": {
"type": "entities",
"entities": [
{
"type": "custom:template-entity-row",
"name": "{% set n = state_attr(e, 'friendly_name') %}{{ n | replace(' Akku fast leer', '') | replace(' Batterie', '') | replace(' Battery', '') | replace(' level', '') | replace('+', '') | trim }}",
"entity": "{{ e }}"
},
{
"type": "custom:template-entity-row",
"name": "Batterietyp",
"icon": "mdi:battery",
"state": "{{ state_attr(e, 'battery_type_and_quantity') or 'unbekannt' }}"
},
{
"type": "custom:template-entity-row",
"name": "Betriebsspannung",
"icon": "mdi:flash",
"state": "{% set name = e.split('.')[-1] %}{% set s1 = name.replace('_battery_plus_low', '_betriebsspannung') %}{% set s2 = s1.replace('_battery_plus', '_betriebsspannung') %}{% set spannung_entity = 'sensor.' ~ s2 %}{% if states(spannung_entity) not in ['unknown', 'unavailable', 'none'] %}{{ states(spannung_entity) }} {{ state_attr(spannung_entity, 'unit_of_measurement') or 'V' }}{% else %}unbekannt{% endif %}"
}
]
}
}
}
}
}{% if not loop.last %},{% endif %}
{% endfor %}
]
card_mod:
style:
.: |
ha-card {
border: none;
padding: 0px !important;
}
- type: custom:auto-entities
card:
type: entities
filter:
template: |-
[
{
"type": "custom:fold-entity-row",
"head": {
"type": "section",
"label": ""
},
"padding": 1,
"entities": [
{% for e in state_attr('sensor.battery_plus_devices', 'entities')[5:] %}
{
"type": "custom:template-entity-row",
"entity": "{{ e }}",
"name": "{% set n = state_attr(e, 'friendly_name') %}{{ n | replace(' Akku fast leer', '') | replace(' Batterie', '') | replace(' Battery', '') | replace(' level', '') | replace('+', '') | trim }}",
"icon": "{% set s = states(e) %}{% if s in ['on', 'off'] %}mdi:battery{% else %}{% set l = s | int(0) %}{% if l >= 95 %}mdi:battery{% elif l >= 80 %}mdi:battery-90{% elif l >= 60 %}mdi:battery-70{% elif l >= 40 %}mdi:battery-50{% elif l >= 20 %}mdi:battery-30{% elif l >= 10 %}mdi:battery-20{% else %}mdi:battery-outline{% endif %}{% endif %}",
"color": "{% set s = states(e) %}{% if s == 'on' %}red{% elif s == 'off' %}green{% else %}{% set l = s | int(0) %}{% if l < 15 %}red{% elif l < 40 %}orange{% elif l < 60 %}yellow{% else %}green{% endif %}{% endif %}",
"state": "{% set s = states(e) %}{% if s == 'on' %}niedrig{% elif s == 'off' %}normal{% else %}{{ s | int }} %{% endif %}",
"secondary": "{{ state_attr(e, 'battery_type_and_quantity') or '' }}",
"tap_action": {
"action": "fire-dom-event",
"browser_mod": {
"service": "browser_mod.popup",
"data": {
"title": "{{ state_attr(e, 'friendly_name') }}",
"content": {
"type": "entities",
"entities": [
{
"type": "custom:template-entity-row",
"name": "{% set n = state_attr(e, 'friendly_name') %}{{ n | replace(' Akku fast leer', '') | replace(' Batterie', '') | replace(' Battery', '') | replace(' level', '') | replace('+', '') | trim }}",
"entity": "{{ e }}"
},
{
"type": "custom:template-entity-row",
"name": "Batterietyp",
"icon": "mdi:battery",
"state": "{{ state_attr(e, 'battery_type_and_quantity') or 'unbekannt' }}"
},
{
"type": "custom:template-entity-row",
"name": "Betriebsspannung",
"icon": "mdi:flash",
"state": "{% set name = e.split('.')[-1] %}{% set s1 = name.replace('_battery_plus_low', '_betriebsspannung') %}{% set s2 = s1.replace('_battery_plus', '_betriebsspannung') %}{% set spannung_entity = 'sensor.' ~ s2 %}{% if states(spannung_entity) not in ['unknown', 'unavailable', 'none'] %}{{ states(spannung_entity) }} {{ state_attr(spannung_entity, 'unit_of_measurement') or 'V' }}{% else %}unbekannt{% endif %}"
}
]
}
}
}
}
}{% if not loop.last %},{% endif %}
{% endfor %}
]
}
]
Wie man sieht, wird hier schon alles mehrfach codiert. Dazu habe ich aber auch einige Karten, die eine einzelne Batterie darstellen. Also sozusagen das gleiche Element, was in den auto-entities verwendet wird.
Dass ich das nicht als decluttering-Template anlegen kann scheitert ausschließlich an dem automatischen Umbruch des Editors.