⏱ 6 m

Knuffelhonden op een kast onder een blauw gekleurde ledstripSoms is het leuk om iets speciaals te doen met je gekleurde lampen. Het is fijn om je eigen scenes te maken met je eigen kleurrecepten, maar ik wou een stap verder door mijn ledstrip met kleur de buitentemperatuur weer te laten geven. Rood is bloedheet, oranje is redelijk heet, geel is lekker warm, groen is lekker fris, blauw is redelijk koud en wit is ijskoud. Wil je hetzelfde maken? Hier is hoe ik het deed.

Één ding voor je begint met bouwen: de waarden in dit artikel zijn een graden Celsius, omdat ik mijn eigen berekeningen heb gemaakt om van een temperatuur een kleur te maken. Graden Fahrenheit zijn anders in veel opzichten. Probeer dus niet om deze berekeningen te gebruiken in een situatie met Fahrenheit, maar reken mijn berekeningen eerst om of bedenk je eigen formules.

Je hebt twee dingen nodig om deze automatisering te laten werken:

  • Een lamp of ledstrip die van kleur kan veranderen
  • Een temperatuurmeting van buiten je woning

Temperatuurmeting

Je kunt je eigen temperatuursensor gebruiken voor de buitentemperatuur. Je kunt ook gebruik maken van een weerintegratie met support voor jouw regio of de standaard integratie van Home Assistant.

Voor de standaardintegratie kan je een template sensor maken voor je eigen gemakt. De configuratie ziet er dan als volgt uit:

# Voorbeeld template temperatuursensor voor de standaard Home Assistant integratie
sensor:
  - platform: template
    sensors:
      buitentemperatuur:
        friendly_name: "Buitentemperatuur"
        unit_of_measurement: '°C'
        device_class: temperature
        value_template: "{{ state_attr('weather.home', 'temperature') | round(1) }}"

In de andere twee situaties heb je al een sensor speciaal voor de buitentemperatuur in Home Assistant. Je kan deze template sensor in dat geval overslaan. Voor een exacte meting van de buitentemperatuur, raad ik je echter aan om een fysieke sensor te gebruiken. Zelf gebruik ik de bewegingsensor van Philips Hue op mijn balkon, die geschikt is voor buiten en beschikt over een temperatuur en lichtsensor. Ik heb behoorlijk wat verschillende sensoren voor buiten geprobeerd, maar deze blijkt écht het meest betrouwbaar te zijn.

Celsius omrekenen naar kleur

Nu is het tijd voor wat wiskunde. Als je niet van de wiskundige kant van deze automatisering houdt, scroll je naar beneden en kopiéer en plak je de twee hue_temp sensoren in je configuratiebestand. Vind je de wiskundige kant wel leuk? Lees dan door.

De uitdaging was om graden Celsius om te rekenen naar een kleur met een wiskundige formule, zodat het mogelijk zou worden om een matchende kleur in te stellen door slechts één script te starten. Na wat onderzoek gedaan te hebben, adviseerde een vriend van mij om de Hue/Sat waarden te gebruiken. Met de Hue/Sat waarden zou ik maar twee formules nodig hebben om de tint en de witbalans te bepalen.

Let op: Ik heb twee templatesensoren gemaakt om deze waarden te berekenen. Dit heb ik gedaan zodat ik deze templates ook makkelijk bij andere lampen kan gebruiken zonder dezelfde template te blijven kopiëren. Dat neemt niet weg dat je onderstaande templates direct in de automatisering kan gebruiken.

Tint waarde

Eerst, de formule om de tint te krijgen. Normaal gaat de waarde van de tint van 0 tot 360; of terwijl van rood naar rood met alle kleuren van de regenboog daartussen. Voor dit idee heb je echter alleen maar de kleuren rood, oranje, geel, groen en blauw nodig. Daarom heb ik de tint gelimiteerd van 0 tot 240.

De volgende stap was het bepalen van de grenzen van de temperatuur. In mijn regio komt de temperatuur zelden in de buurt van 45 of onder de -5 graden. Om op safe te spelen, heb ik deze waarden daarom als mijn grenswaarden gekozen.

Nu gaan we rekenen! Ik wil een volledige kleur weergeven bij elke tien graden; rood bij 45 graden en blauw bij 5 graden. Het bereik van 45 tot 5 is 40, dus ik deelde 240 door 40. De uitkomst is 6; de conversiewaarde. Om van de buitentemperatuur binnen het bereik van mijn gestelde tint waarde te komen, trek ik 5 af van de buitentemperatuur. Tot slot moest ik de berekening nog omdraaien, omdat ik rood bij de hoge en blauw bij de lage temperaturen wil zien. Dit heb ik gedaan door de uitkomst van de formule van 240, het limiet van de tint waarde, af te trekken. De formule ziet er nu als volgt uit:

tint_waarde = max_tint_waarde - ((buitentemperatuur - ondergrens_buitentemperatuur) * conversiewaarde)

MMijn formule ziet er als volgt uit:

tint_waarde = 240 - ((sensor.buitentemperatuur - 5) * 6)

Witbalans

Voor de waarde van de witbalans heb ik een vergelijkbare formule gemaakt. De witbalans is in percentage, dus de formule is een stuk makkelijker. De witbalans is van belang bij temperaturen tussen de 15 en de -5 graden, dus het bereik is 20. 100 gedeeld door 20 is 5, de conversiewaarde. De formule is dus als volgt:

witbalans = ((buitentemperatuur - ondergrens_temperatuur) * conversiewaarde)

Mijn formule ziet er als volgt uit:

witbalans = ((sensor.buitentemperatuur +5) * 5)

Hue/Sat sensoren

Tot slot heb ik twee sensoren gemaakt, één voor elke waarde, met if-statements om om te voorkomen dat de waarden voor de tint en witbalans buiten het bereik vallen. Zo mag de tint waarde nooit hoger dan 240 of lager dan 0 zijn. Voor de witbalans geldt hetzelfde, met een ondergrens van 0 en een bovengrens van 100. De sensoren staan hieronder. Voel je vrij ze te kopiéeren en gebruiken. Vergeet niet om de entity ID voor de sensor aan te passen.

# Voorbeeld template sensoren om een hue_sat waarde te krijgen op basis van een buitentemperatuur
sensor:
  - platform: template
    sensors:
      hue_temp_hue:
        value_template: >
          {% if states('sensor.buitentemperatuur')| float > 45.00 %}0{% elif states('sensor.buitentemperatuur')| float  4.99 %}{{ (240 - ((float(states.sensor.buitentemperatuur.state) - 5) * 6)) | round(0) }}{% elif states('sensor.buitentemperatuur')| float 
          {% if states('sensor.balkontemperatuur')| float > 14.99 %}100{% elif states('sensor.balkontemperatuur')| float  -5.00 %}{{ ((float(states.sensor.balkontemperatuur.state) + 5) * 5) | round(0) }}{% elif states('sensor.balkontemperatuur')| float 

Kleur je lampen

Nu is het tijd om de lamp écht een kleur te gaan geven. Ik heb dit gedaan doormiddel van een script, gestart via een automatisering. Op deze manier kan je gewoon je eigen scenes blijven gebruiken en de helderheid instellen. Drie seconden nadat de lamp is aangezet, zal deze langzaam de kleur van de buitentemperatuur aannemen. Dit is de reden dat ik de helderheid heb weggelaten in het script hieronder. De data is gemarkeerd als template, zodat de 'sensor.hue_temp_hue' en 'sensor.hue_temp_sat' als waarden gebruikt kunnen worden om de kleur aan te geven.

# Voorbeeld script om je lampen te kleuren
licht_temperatuur_kleur:
  alias: Licht temperatuur kleur
  sequence:
  - service: light.turn_on
    data_template:
      entity_id: light.GEKLEURDE_LAMP
      transition: 3
      hs_color:
      - '{{ states(''sensor.hue_temp_hue'') }}'
      - '{{ states(''sensor.hue_temp_sat'') }}'
  mode: parallel
  max: 3

Tot slot heb ik een automatisering gemaakt zodat ik het script niet zelf hoef te starten en de kleur automatisch elke tien minuten wordt bijgewerkt. Daarbij heb ik de lamp ook toegevoegd als voorwaarde, zodat die niet elke tien minuten aan gaat. 😉 De automatisering staat hieronder:

- alias: Licht - Ververs buiten temperatuur kleur
  description: ''
  trigger:
  - platform: state
    entity_id: light.GEKLEURDE_LAMP
    from: 'off'
    to: 'on'
    for: 00:00:02
  - platform: time_pattern
    minutes: '10'
    seconds: '00'
    hours: '00'
  condition:
  - condition: state
    entity_id: light.GEKLEURDE_LAMP
    state: 'on'
  action:
  - service: script.licht_temperatuur_kleur
    data: {}
  mode: single

En dat is dat! Een gekleurde lamp die doormiddel van kleur de buitentemperatuur weergeeft. Mijn lamp is momenteel tussen blauw en wit voor de laatste paar dagen, maar dat zegt niks over mijn idee voor deze automatisering. 😉 In elk geval, veel plezier met dit idee en laat het me weten als je verbeteringen hebt of je eigen aanvullingen hebt gemaakt op dit idee.

Fijne feestdagen!