Temperaturüberwachung für Server-Schrank (Teil 4)
Für die Temperaturüberwachung in einem Server-Schrank haben wir in den vorangegangenen Teilen der Artikelserie die grundlegende Temperaturüberwachung und Alarmierung eingerichtet. Jetzt fehlt noch die optische Alarmierung mit Hilfe von RGB-LEDs. Leuchten diese Rot oder blinken sie sogar, dann sollte sich jemand um den Server kümmern...
Es wird davon ausgegangen, dass Home Assistant und ein MQTT-Broker (z.B. mosquitto) bereits erfolgreich eingerichtet sind. Außerdem sollte die vorherigen Teile der Artikelserie umgesetzt sein. Für die optische Warnung sollte eine RGB-Lampe bereits in Home Assistant eingebunden und korrekt angesprochen werden können.
1| Farbe der Lampen anpassen
Damit die Farbe der RGB-LEDs entsprechend der Temperatur im Serverschrank angepasst wird, muss die Lichtfarbe zunächst beim Einschalten gesetzt werden. Wird zum setzen der Farbe das Attribut hs_value
, also der HS-Farbraum, verwendet, dann muss das zu berücksichtigende Temperaturintervall lediglich auf das entsprechende Farbwerte-Intervall abgebildet werden. Zur Berechnung des Farbwerts für die aktuelle Temperatur kann folgende Formel genutzt werden:
Dabei setzen sich die Variablen folgendermaßen zusammen:
Variable | Beschreibung |
Takt | Aktuelle Temperatur im Rack. |
Tmin | Minimale Wert des zu berücksichtigen Temperaturbereichs. Temperaturen unterhalb von 20°C sollen als tiefblau dargestellt werden. Daher wird für diesen Wert 20 angenommen. |
Tmax | Maximaler Wert des zu berücksichtigen Temperaturbereichs. Temperaturen ab 45°C sollen als tief rot angezeigt werden. Daher wird für diesen Wert 45 angenommen. |
Hmin | Minimaler Farbwert auf der Farbton-Skala. Temperaturen <= Tmin wird dieser Farbwert zugeordnet. |
Hmax | Maximaler Farbwert auf der Farbton-Skala. Temperatiren >= Tmax wird dieser Farbwert zugewiesen. |
Gemäß Wikipedia ist die Farbwertskala folgendermaßen aufgebaut:
Da die Temperaturen auf Farbwerte zwischen Blau und Rot abgebildet werden sollen, wird für Hmax ein Wert von ca. 250 und für Hmax von 360 angenommen.
Mit der folgenden Automatisierung kann dementsprechend die Farbe der RGBs beim Einschalten angepasst:
alias: 'Server-Rack: Farbe beim Einschalten setzen'
description: >-
Wird der LED-Streifen im Rack eingeschaltet, wird die Farbe entsprechend
der Temperatur im Rack gesetzt.
trigger:
- platform: state
entity_id: light.tint_led_rgb_01
to: 'on'
from: 'off'
condition: []
action:
- service: light.turn_on
data:
transition: 1
hs_color: >
{% set Hmin = 250 | float %}
{% set Hmax = 360 | float %}
{% set Tmin = 20 | float %}
{% set Tmax = 45 | float %}
{% set Takt = states('sensor.temperature_rack') | float %}
{% set H = (((Hmax - Hmin) * Takt) + ((Hmin * Tmax) - (Tmin * Hmax))) / (Tmax - Tmin) %}
{% if H < Hmin %}
{% set H = Hmin %}
{% elif H > Hmax %}
{% set H = Hmax %}
{% endif %}
[ {{ H }}, 75 ]
entity_id: light.tint_led_rgb_01
mode: single
Zusätzlich muss die Farbe der Lampen kontinuierlich angepasst werden, wenn sich die Temperatur im Serverschrank ändert:
alias: 'Server-Rack: Farbe aktualisieren'
description: >-
Ist die Beleuchtung im Rack eingeschaltet, wird die Farbe entsprechend
der Temperatur im Rack laufend aktualisiert.
trigger:
- platform: state
entity_id: sensor.temperature_rack
condition:
- condition: state
entity_id: light.tint_led_rgb_01
state: 'on'
action:
- service: light.turn_on
data:
transition: 1
hs_color: >
{% set Hmin = 250 | float %}
{% set Hmax = 360 | float %}
{% set Tmin = 20 | float %}
{% set Tmax = 45 | float %}
{% set Takt = states('sensor.temperature_rack') | float %}
{% set H = (((Hmax - Hmin) * Takt) + ((Hmin * Tmax) - (Tmin * Hmax))) / (Tmax - Tmin) %}
{% if H < Hmin %}
{% set H = Hmin %}
{% elif H > Hmax %}
{% set H = Hmax %}
{% endif %}
[ {{ H }}, 75 ]
entity_id: light.tint_led_rgb_01
mode: single
2| Optischer Alarm
Nachdem die Farbtemperatur richtig gesetzt wird, muss noch der optische Alarm ausgelöst werden, wenn die Temperatur zu hoch ist. Damit das Blinken dauerhaft funktioniert muss als erstes eine Schleife aus zwei Scripten angelegt werden. Mit dem ersten Script wird ein Effekt gestartet, 5 Sekunden gewartet und dann das zweite Script aufgerufen:
alias: Flash Serverrack On
sequence:
- service: light.turn_on
data:
effect: okay
entity_id: light.tint_led_rgb_01
- delay: '5'
- service: script.turn_on
data: {}
entity_id: script.flash_serverrack_loop
mode: single
icon: 'mdi:alarm-light-outline'
Im zweiten Script wird dann schließlich weider das erste Script aufgerufen. Zuvor wird noch eine Sekunde geewartet, damit das erste Script auch beendet wurde bevor es erneut aufgerufen wird:
alias: Flash Serverrack Loop
sequence:
- delay: '1'
- service: script.turn_on
data: {}
entity_id: script.flash_serverrack_on
mode: single
icon: 'mdi:alarm-light-outline'
Mit einem Schalter soll der Alarm später manuell quittiert werden können. Daher wird in Home Assistant unter Configuration > Helpers
ein Toggle-Element angelegt:
Mit einer Automation wird der optische Alarm gestartet, wenn der Schalter eingeschaltet wird...
alias: 'Serverrack: Start Optical Alarm'
description: >-
Wird der Alarm-Schalter eingeschaltet, muss der optische Alarm gestartet
werden.
trigger:
- platform: state
entity_id: input_boolean.serverrack_alarm
to: 'on'
condition: []
action:
- service: script.turn_on
data: {}
entity_id: script.flash_serverrack_on
mode: single
und gestoppt, wenn er wieder ausgeschaltet wird:
alias: 'Serverrack: Stop Optical Alarm'
description: >-
Wird der Alarm-Schalter ausgeschaltet, muss der optische Alarm gestoppt
werden.
trigger:
- platform: state
entity_id: input_boolean.serverrack_alarm
to: 'off'
condition: []
action:
- service: script.turn_off
data: {}
entity_id: script.flash_serverrack_on
- delay: '2'
- service: script.turn_off
data: {}
entity_id: script.flash_serverrack_on
mode: single
Hinweis: Damit der optische Alarm auch wirklich ausgeschaltet wird, wird das Script zweimal gestoppt.
Der Schalter muss jetzt noch automatisch getriggert werden, wenn der Temperaturstatus auf alarm
gesetzt wird. Dazu wird die Automatisierung Serverrack: Set status alarm
die wir im vorherigen Teil erstellt haben, um folgende Action erweitert:
In den Automations Serverrack: Set status normal
, Serverrack: Set status warm
und Serverrack: Set status hot
muss dann noch folgende Aktion ergänzt werden, damit der optische Alarm auch automatisch wieder gestoppt wird:
Damit ist das Projekt "Serverschrank-Überwachung" soweit erstmal abgeschlossen. Sicherlich gibt es auch für dieses Projekt noch Verbesserungspotential. Aktuell hat mein Serverschrank beispielsweise einen Lüfter eingebaut, den ich manuell regeln muss. Schöner wäre es, wenn der Lüfter mit einem ESP 8266 geregelt werden könnte. Dann könnte man mit dieser Automatisierung natürlich auch noch versuchen den Lüfter hoch zu regeln, bevor der Server ausgeschaltet wird. Für Hinweise wie sowas umgesetzt werden kann, wäre ich auf jeden Fall dankbar...
Kommentare