Ahoi,
schon vor einigen Monaten habe ich mein “Smart Home” zu Home Assistant migriert und im Zuge dessen ein paar Automationen
geschrieben, wovon ich heute eine zeigen möchte.
Seit nun mehr 10 Jahren halte ich Riesenschlangen, genau gesagt Boa c. c., Boa c. i., Python regius und Kornnattern. Je
nach Art variiert das optimale Klima stark, weswegen eine durchgehende Überwachung der Temperatur, Luftfeuchtigkeit und
Stunden an Tageslicht wichtig für das artgerechte Halten dieser Exoten ist.
Relativ normal sind programmierbare Steckdosen inkl. Thermometer.
Copyright: M&S Reptilien
Quelle: https://www.ms-reptilien.de/zubehoer/technik/messen-regeln/12930/m-s-reptile-control-v3-pro-thermostat-mit-dimmung-zeitschaltuhr-weee-regnr.-82392108?c=480
Je nach Lage des Geldbeutels kann man bis zu 3 Steckdosen auf einmal programmieren. Ich hatte aber das Glück, dass meine
erste Steuerung nach 8 Jahren immer noch tadellos funktioniert. Das einzige Manko ist jedoch, dass diese nur eine
Steckdose, abhängig von der aktuellen Temperatur und/oder Helligkeit steuern kann.
Zu dem Zeitpunkt hatte ich bereits ein rudimentäres “Smart Home” aufgebaut, dass mir aber in vielen Punkten nicht
richtig gefallen hat. Hauptsächlich aber durch Einschränkungen von Alexa und Google Home. Es war also an der Zeit, die
Sachen in die eigenen Hände zu nehmen und es selbst zu machen.
Aufgrund der Popularität entschied ich mich für Home Assistant.
Dieselbe Funktionalität zur Steuerung/Überwachung eines Terrariums ließ sich aber leider nicht durch das Webinterface
abbilden. Da die Dokumentation ziemlicher Mist ist, spare ich mir eine Verlinkung. Am schnellsten geht es wohl, wenn man
sich den Code von anderen Automatisierungen anschaut, um ein tieferes Verständnis zu entwickeln.
Home Assistant setzt dabei auf die Verwendung von .yaml Dateien für die Beschreibung einer eigenen Automation. Die
Automationen sind in vier Blöcke aufgeteilt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
input:
heating_socket:
name: The socket that controlls the heating bulb/element
default: switch.terrarium_heizung
selector:
entity:
domain: switch
multiple: false
temperature_sensor:
name: The temperature sensor
default: sensor.temperature_humidity_sensor_outdoor_temperature
selector:
entity:
domain: sensor
temperature_min_day:
name: Minimum temperature during day
description: Temperature which triggers to start heating during day
default: 28
selector:
number:
min: 20.0
max: 40.0
step: 0.5
mode: slider
temperature_max_day:
name: Maximum temperature during day
description: Temperature which triggers to stop heating during day
default: 31
selector:
number:
min: 20.0
max: 40.0
step: 0.5
mode: slider
temperature_min_night:
name: Minimum temperature at night
description: Temperature which triggers to start heating at night
default: 24
selector:
number:
min: 20.0
max: 40.0
step: 0.5
mode: slider
temperature_max_night:
name: Maximum temperature at night
description: Temperature which triggers to stop heating at night
default: 26
selector:
number:
min: 20.0
max: 40.0
step: 0.5
mode: slider
day_time_start:
name: The time at which a day starts
default: "07:00:00"
selector:
time: {}
night_time_start:
name: The time at which the night starts
default: "22:00:00"
selector:
time: {}
|
2. trigger: Wie wird die Automation ausgelöst?
1
2
3
4
|
trigger:
- platform: time_pattern
minutes: /15
id: temperature_changed
|
3. variable: Variablen und Benutzereingaben
1
2
3
4
5
6
|
variables:
day_time_start: !input 'day_time_start'
night_time_start: !input 'night_time_start'
is_day: '{{ (now() >= today_at(day_time_start)) and (now() <= today_at(night_time_start)) }}'
is_night: '{{ is_day == false }}'
current_temp: '{{ states("sensor.temperature_humidity_sensor_outdoor_temperature") }}'
|
action: Was soll passieren?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
action:
- choose:
- conditions:
- condition: trigger
id: temperature_changed
- condition: template
alias: "Ist Tag"
value_template: '{{ is_day }}'
- condition: numeric_state
entity_id: !input 'temperature_sensor'
below: !input 'temperature_min_day'
sequence:
- service: homeassistant.turn_on
data:
entity_id: !input 'heating_socket'
- conditions:
- condition: trigger
id: temperature_changed
- condition: template
alias: "Ist Nacht"
value_template: '{{ is_night }}'
- condition: numeric_state
entity_id: !input 'temperature_sensor'
below: !input 'temperature_min_night'
sequence:
- service: homeassistant.turn_on
data:
entity_id: !input 'heating_socket'
- conditions:
- condition: trigger
id: temperature_changed
- condition: template
alias: "Ist Tag"
value_template: '{{ is_day }}'
- condition: numeric_state
entity_id: !input 'temperature_sensor'
above: !input 'temperature_max_day'
sequence:
- service: homeassistant.turn_off
data:
entity_id: !input 'heating_socket'
- conditions:
- condition: trigger
id: temperature_changed
- condition: template
alias: "Ist Nacht"
value_template: '{{ is_night }}'
- condition: numeric_state
entity_id: !input 'temperature_sensor'
above: !input 'temperature_max_night'
sequence:
- service: homeassistant.turn_off
data:
entity_id: !input 'heating_socket'
mode: restart
max_exceeded: silent
|
Die Automation geht dabei relativ simple vor:
- Prüfe alle 15min
- Ob Tag oder Nacht ist
- Tag
- Ist Temperatur-Soll unterschritten?
- Ist Temperatur-Soll überschritten?
- Nacht
- Ist Temperatur-Soll unterschritten?
- Ist Temperatur-Soll überschritten?
Da man die Tages-/Nacht Min-/Max-Temperatur einzeln einstellen kann, lässt sich ein Gefälle in den Temperaturverlauf
einbauen und dadurch auch ein wenig Stromkosten sparen.
Die Automation sieht nach einem Neustart von Home Assistant so aus:
Für eine Darstellung im Dashboard habe ich eine neue Seite erstellt, welche mir alle Infos rund um mein aktuell einziges
Terrarium (von ehemals 6) zusammenfasst.
Hier sieht man schön, wann geheizt wurde und wie sich der Temperaturverlauf innerhalb der letzten 12 Stunden verhalten
hat.