Ergänzung zur Temperaturkarte: Zentrale Zonendefinition anstelle in jeder Dashboardkarte einzeln
Ich habe verschiedene Raumseiten und dort zeige ich mit oberer Karte / Code jeweils eine begrenzte Anzahl der Sensoren an. Mich störte jedoch die dezentrale Definition Temperaturzonen. Ich wollte dies nur an einer Stelle tun und alle richten sich danach. Dies erleichtert ungemein spätere Anpassungen der Zonen.
In der configuration.yaml definiere ich die Sensoren:
- name: "OM Temperatur Zonen"
unique_id: "om_temperatur_zonen"
#Diese Map wird für die individuelle Darstellung von Temperaturen verwendet
state: ""
attributes:
{
"Zone1_max": 0.5,
"Zone2_max": 5,
"Zone3_max": 15,
"Zone4_max": 19.5,
"Zone5_max": 21.0,
"Zone6_max": 22.5,
"Zone7_max": 23.5,
"Zone8_max": 49.99,
"Zone10_min": 50
}
In den Dashboard Karten Codes mache ich dann folgendes:
{# Definiere die Temperaturzonen in Grad #}
{% set TempZone1_max = states.sensor.om_temperatur_zonen.attributes["Zone1_max"] | float() %}
{% set TempZone2_max = states.sensor.om_temperatur_zonen.attributes["Zone2_max"] | float() %}
{% set TempZone3_max = states.sensor.om_temperatur_zonen.attributes["Zone3_max"] | float() %}
{% set TempZone4_max = states.sensor.om_temperatur_zonen.attributes["Zone4_max"] | float() %}
{% set TempZone5_max = states.sensor.om_temperatur_zonen.attributes["Zone5_max"] | float() %}
{% set TempZone6_max = states.sensor.om_temperatur_zonen.attributes["Zone6_max"] | float() %}
{% set TempZone7_max = states.sensor.om_temperatur_zonen.attributes["Zone7_max"] | float() %}
{% set TempZone8_max = states.sensor.om_temperatur_zonen.attributes["Zone8_max"] | float() %}
{% set TempZone10_min = states.sensor.om_temperatur_zonen.attributes["Zone10_min"] | float(0) %}
Das wars.
EDIT:
Jetzt auch Farben und Size zentral über die configuration.yaml anstelle einzeln in den Karten.
Obige Idee war gut aber nicht konsequent, deshalb überführte ich
- Temperaturzonen
- Entsprechende Farben
- Entsprechende Größen
zentral in die configuration.yaml
Hier noch einmal der komplette Code.
configuration.yaml
Zusammenfassung
- name: "OM Temperatur Zonen"
unique_id: "om_temperatur_zonen"
#Diese Map wird für die individuelle Darstellung von Temperaturen verwendet
state: ""
attributes:
{
"Zone1_max": 0.5,
"Zone2_max": 5,
"Zone3_max": 15,
"Zone4_max": 19.5,
"Zone5_max": 21.0,
"Zone6_max": 22.5,
"Zone7_max": 23.5,
"Zone8_max": 49.99,
"Zone10_min": 50,
"ColorZone1": "#CB23FF",
"ColorZone2": "#4444FF",
"ColorZone3": "#517FFF",
"ColorZone4": "#5E9BFF",
"ColorZone5": "#00CE71",
"ColorZone6": "#EFC758",
"ColorZone7": "#FFB200",
"ColorZone8": "#FF6600",
"ColorZone10": "red",
"SizeZone1": "16",
"SizeZone2": "16",
"SizeZone3": "16",
"SizeZone4": "16",
"SizeZone5": "16",
"SizeZone6": "16",
"SizeZone7": "16",
"SizeZone8": "16",
"SizeZone10": "16"
}
Dashboard Karte
Zusammenfassung
type: vertical-stack
cards:
- type: custom:auto-entities
card:
type: entities
state_color: false
filter:
include:
- attributes:
device_class: temperature
options:
type: custom:template-entity-row
name: >
{# Sofern gewünscht, gebe jeder Entity einen eigenen Namen. Ansonsten wird automatisch der friendly_name verwendet. #}
{% set name_map = {
"sensor.om_temperatur_bad_durchschnitt": "Bad Mitte",
"sensor.aqara_temp_feucht_unten_bad_temperature": "Bad unten",
"sensor.om_temperatur_unten_hwr_durchschnitt": "HWR unten"
} %}
{{ name_map.get(config.entity, states[config.entity].attributes.friendly_name) }}
state: >
{# Temperatur mit optionaler Rundung anzeigen #}
{% set Kommastellen = 1 %}
{% set value = states(config.entity) | float(0) | round(Kommastellen) %}
{{ value }} °C
card_mod:
style: |
:host {
--card-mod-icon: mdi:thermometer;
{# Definiere die Temperaturzonen in Grad zentral über configuration.yaml #}
{% set TempZone1_max = states.sensor.om_temperatur_zonen.attributes["Zone1_max"] | float() %}
{% set TempZone2_max = states.sensor.om_temperatur_zonen.attributes["Zone2_max"] | float() %}
{% set TempZone3_max = states.sensor.om_temperatur_zonen.attributes["Zone3_max"] | float() %}
{% set TempZone4_max = states.sensor.om_temperatur_zonen.attributes["Zone4_max"] | float() %}
{% set TempZone5_max = states.sensor.om_temperatur_zonen.attributes["Zone5_max"] | float() %}
{% set TempZone6_max = states.sensor.om_temperatur_zonen.attributes["Zone6_max"] | float() %}
{% set TempZone7_max = states.sensor.om_temperatur_zonen.attributes["Zone7_max"] | float() %}
{% set TempZone8_max = states.sensor.om_temperatur_zonen.attributes["Zone8_max"] | float() %}
{% set TempZone10_min = states.sensor.om_temperatur_zonen.attributes["Zone10_min"] | float(0) %}
{# Definiere Farben passend Temperaturzonen zentral über configuration.yaml #}
{% set ColorZone1 = states.sensor.om_temperatur_zonen.attributes["ColorZone1"] %}
{% set ColorZone2 = states.sensor.om_temperatur_zonen.attributes["ColorZone2"] %}
{% set ColorZone3 = states.sensor.om_temperatur_zonen.attributes["ColorZone3"] %}
{% set ColorZone4 = states.sensor.om_temperatur_zonen.attributes["ColorZone4"] %}
{% set ColorZone5 = states.sensor.om_temperatur_zonen.attributes["ColorZone5"] %}
{% set ColorZone6 = states.sensor.om_temperatur_zonen.attributes["ColorZone6"] %}
{% set ColorZone7 = states.sensor.om_temperatur_zonen.attributes["ColorZone7"] %}
{% set ColorZone8 = states.sensor.om_temperatur_zonen.attributes["ColorZone8"] %}
{% set ColorZone10 = states.sensor.om_temperatur_zonen.attributes["ColorZone10"] %}
{# Definiere Schriftgrößen passend Temperaturzonen zentral über configuration.yaml #}
{% set SizeZone1 = states.sensor.om_temperatur_zonen.attributes["SizeZone1"] %}
{% set SizeZone2 = states.sensor.om_temperatur_zonen.attributes["SizeZone2"] %}
{% set SizeZone3 = states.sensor.om_temperatur_zonen.attributes["SizeZone3"] %}
{% set SizeZone4 = states.sensor.om_temperatur_zonen.attributes["SizeZone4"] %}
{% set SizeZone5 = states.sensor.om_temperatur_zonen.attributes["SizeZone5"] %}
{% set SizeZone6 = states.sensor.om_temperatur_zonen.attributes["SizeZone6"] %}
{% set SizeZone7 = states.sensor.om_temperatur_zonen.attributes["SizeZone7"] %}
{% set SizeZone8 = states.sensor.om_temperatur_zonen.attributes["SizeZone8"] %}
{% set SizeZone10 = states.sensor.om_temperatur_zonen.attributes["SizeZone10"] %}
{# Standardfarbe und Schriftgröße #}
color: black;
--card-mod-icon-color: black;
.info, .state {
font-size: 14px;
}
{# Ab hier nur bei Logikänderung verändern #}
{% set value = states(config.entity) | float(0) %}
{% if value <= TempZone1_max %}
color: {{ ColorZone1 }};
--card-mod-icon-color: {{ ColorZone1 }};
.info, .state { font-size: {{ SizeZone1 }}px; }
{% elif value > TempZone1_max and value <= TempZone2_max %}
color: {{ ColorZone2 }};
--card-mod-icon-color: {{ ColorZone2 }};
.info, .state { font-size: {{ SizeZone2 }}px; }
{% elif value > TempZone2_max and value <= TempZone3_max %}
color: {{ ColorZone3 }};
--card-mod-icon-color: {{ ColorZone3 }};
.info, .state { font-size: {{ SizeZone3 }}px; }
{% elif value > TempZone3_max and value <= TempZone4_max %}
color: {{ ColorZone4 }};
--card-mod-icon-color: {{ ColorZone4 }};
.info, .state { font-size: {{ SizeZone4 }}px; }
{% elif value > TempZone4_max and value <= TempZone5_max %}
color: {{ ColorZone5 }};
--card-mod-icon-color: {{ ColorZone5 }};
.info, .state { font-size: {{ SizeZone5 }}px; }
{% elif value > TempZone5_max and value <= TempZone6_max %}
color: {{ ColorZone6 }};
--card-mod-icon-color: {{ ColorZone6 }};
.info, .state { font-size: {{ SizeZone6 }}px; }
{% elif value > TempZone6_max and value <= TempZone7_max %}
color: {{ ColorZone7 }};
--card-mod-icon-color: {{ ColorZone7 }};
.info, .state { font-size: {{ SizeZone7 }}px; }
{% elif value > TempZone7_max and value <= TempZone8_max %}
color: {{ ColorZone8 }};
--card-mod-icon-color: {{ ColorZone8 }};
.info, .state { font-size: {{ SizeZone8 }}px; }
{% elif value > TempZone8_max %}
color: {{ ColorZone10 }};
--card-mod-icon-color: {{ ColorZone10 }};
.info, .state { font-size: {{ SizeZone10 }}px; }
{% endif %}
}
exclude:
- entity_id: "*_mw_*"
- entity_id: "*_uhr"
- entity_id: sensor.kamera*
- entity_id: sensor.raspberry_processor_temperature
- entity_id: sensor.deine_auszuschliessender_sensor_entity
sort:
method: state
reverse: false
numeric: true