Digitale koekoeksklok in Home Assistant
Gepubliceerd op 20 februari 2024 • 4 min leestijd • 765 woorden
Een koekoeksklok, maar dan digitaal - Koekoek in Home Assistant
Aangezien ik een gruwelijke hekel heb aan tikkende klokken, is een koekoeksklok in huisniet welkom. Dat geluid van radertjes draaien, of erger nog, het wegtikken van iedere seconde, brrrr. Gelukkig is dit een koekoeksklok die je uit kunt zetten, aangezien ik hem in Home Assistant heb gebouwd. De klok koekoekt al weer een jaar of vijf naar tevredenheid, zonder hem te hoeven opwinden.
De klok zelf
Het idee van een koekoeksklok in je smarthome kom je op meer plekken tegen op internet. Ik kan ook niet zeggen dat ik het idee zelf bedacht heb. Ook ik heb het overgenomen van een andere Home Assistant gebruiker, namelijk van vCloudInfo .
Wat de klok doet is ieder half uur een koekoek laten klinken en op ieder uur het aantal keer hoe laat het is. Dus om 4 uur ’s middags gaat de klok 4 keer. Ik heb even overwogen om hem dan 16 keer te laten gaan in een 24 uurs ritme, maar dat werd me wat te gortig.
De klok wordt ieder half uur aangesproken.
yaml
trigger:
- platform: time_pattern
minutes: "0"
- platform: time_pattern
minutes: "30"Maar alleen als dit plaats vindt op tijden dat we wakker zijn (hopelijk) en er nog geen muziek speelt in de keuken.
yaml
condition:
- condition: time
after: "06:59:00"
before: "21:30:00"
- condition: not
conditions:
- condition: state
entity_id: media_player.keuken
state: playingVervolgens wordt op de HomePod mini’s in de keuken en de slaapkamer gestuurd.
yaml
action:
- service: media_player.play_media
data:
entity_id:
- media_player.keuken
- media_player.slaapkamerWat er precies gestuurd wordt, hangt af van hoe laat het is. Wanneer het op een half uur valt, dan wordt dezelfde file gestuurd als om één uur. Op alle andere tijden is er een specifieke audiofile met het aantal koekoekjes. Je zou ook een loop kunnen maken en dan maar één audiofile gebruiken. Wat je dan wel mist is bij de koekoeksklok is het deurtje wat open gaat en aan het einde weer dicht gaat. Dit is juist wat het zo ’echt’ maakt.
yaml
media_content_id: |
{% if now().strftime("%M")|int == 30 %}
/config/www/audio/koekoek-1.wav
{% else %}
{% if (now().strftime("%H")|int == 17) and (is_state("binary_sensor.workday_sensor", "on"))%}
/config/www/audio/vijf-uur.wav
{% else %}
/config/www/audio/koekoek-{{now().strftime("%I")}}.wav
{% endif %}
{% endif %}
media_content_type: audio/wavDeze koekoeksklok heeft een kleine twist. Aangezien mijn lieftallige echtgenote tijdens het thuiswerken nogal eens de neiging had om door te werken na vijf uur, klinkt er om vijf uur een ander geluid, namelijk die van een ouderwetse stoomfluit. Hiermee is het duidelijk: Einde werkdag, in ieder geval voor haar.
Verbeteringen
Nu ik na zoveel tijd weer naar het script kijk, denk ik: “Hmm, daar zitten nog wel wat verbeterpuntjes in”, maar vergeet niet dat de klok alweer vijf jaar actief is. Mijn kennis van Home Assistant is in die vijf jaar ook toegenomen. Ik zou nu wellicht andere keuzes maken.
Eén van die keuzes zou zijn om geen vaste waardes te gebruiken in de automation zelf, maar de output van andere scripts te gebruiken. Een andere mogelijkheid is om gebruik te maken van helpers, die je de frontend kunt wijzigen. Hierdoor kan een huisgebruiker makkelijk zelf bepaalde dingen aanpassen, in plaats van in de automations zitten te rommelen. In de praktijk betekent dit dan dat ik de vraag krijg om iets aan te passen. Dat is uiteraard niet de bedoeling van het automatiseren.
In onderstaand script zou ik in ieder geval de condities before en after aan de voorkant configureerbaar maken. Ik zou hier bijvoorbeeld dezelfde helper kunnen gebruiken die ook gebruikt wordt in onze zonopkomstsimulatie wordt gebruikt. Hoe mooi zou dat zijn: Je wordt gewekt door het zonlicht en ondertussen hoor je de koekoeksklok, in plaats van zo’n superirritante wekker. Ik zou ook gebruik kunnen maken van andere variabelen of sensoren, zoals Het is in de ochtend en er liggen geen telefoons meer aan de oplader, of Het huis staat in dagstand, of Er is iemand thuis. Ook wil ik nog onderscheid maken waar iemand in huis is, zodat alleen daar de koekoeksklok te horen is.
Zoals je ziet, nog genoeg te doen.
De automation
yaml
alias: Koekoeksklok
trigger:
- platform: time_pattern
minutes: "0"
- platform: time_pattern
minutes: "30"
condition:
- condition: time
after: "06:59:00"
before: "21:30:00"
- condition: not
conditions:
- condition: state
entity_id: media_player.keuken
state: playing
action:
- service: media_player.play_media
data:
entity_id:
- media_player.keuken
- media_player.slaapkamer
media_content_id: |
{% if now().strftime("%M")|int == 30 %}
/config/www/audio/koekoek-1.wav
{% else %}
{% if (now().strftime("%H")|int == 17) and (is_state("binary_sensor.workday_sensor", "on"))%}
/config/www/audio/vijf-uur.wav
{% else %}
/config/www/audio/koekoek-{{now().strftime("%I")}}.wav
{% endif %}
{% endif %}
media_content_type: audio/wav
mode: restart

