community italiana di domotica personale
 
Come gestire luci a luminosità crescente con la domotica Home Assistant

Come gestire luci a luminosità crescente con la domotica Home Assistant

SCOPI DEL PROGETTO:
  • Definire un meccanismo che innalzi progressivamente il livello di luminosità di una (o più) entità luce sulla domotica Home Assistant
  • Livello di difficoltà: basso
  • Costo: basso
CONCETTI AFFRONTATI:
  • Configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
COMPONENTI FISICI UTILIZZATI:
  • Il computer sul quale è in esecuzione Home Assistant
  • Un qualsiasi punto luce precedentemente integrato con Home Assistant (dotato di regolazione di intensità luminosa)
PROGETTO INDICATO a UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione progetto: 1.3

alba

Abstract

L’applicazione di questo progetto è dedicata a chi ami un “risveglio morbido” anche per mano dell’intensità luminosa della stanza in cui riposa. Ovviamente non è il solo campo di applicazione: una luce crescente (o decrescente, personalizzando il progetto) – specialmente con una velocità più o meno veloce, a seconda – può sempre tornare utile.

Partendo dall’assunto di avere a disposizione un punto luce integrato in un’entità di tipo “Light” che supporti la regolazione di intensità (di qualsiasi tipo, dai LED colorati regolabili a più elementari dimmer, alle lampadine Philips HUE eccetera), definiremo un servizio basato su un semplice script Python il quale, sulla base dei parametri:

  • livello di partenza di percentuale luminosa (da 1% a salire);
  • livello di arrivo di percentuale luminosa (100% max);
  • di quanto incrementare la percentuale ad ogni scatto;
  • ogni quanti secondi incrementare la percentuale dello scatto indicato.

quando evocato inneschi questa effetto di luminosità crescente.

Il progetto consente, rispetto al metodo “transition” previsto per alcune integrazioni della componente “Light”, di definire di quanta percentuale di intensità luminosa incrementare ad ogni scatto.

Assunti

Come detto, si assume che in configurazione Home Assistant esista già l’integrazione di una qualsiasi luce integrabile con l’HUB. Assumeremo che tale entità si chiami light.led_camera la quale sia, ovviamente, regolabile nell’intensità luminosa.

Assumeremo inoltre che il componente “Python Scripts” sia già già attivo su Home Assistant (vedi scheda per sapere come eventualmente attivarlo).

Si parte

Script

Innanzitutto andremo ad installare lo script nel percorso dedicato a questi elementi, ovvero /python_scripts/ all’interno della cartella contenente la configurazione di Home Assistant.

Creiamo dunque un file chiamato fade_in_light.py e salviamoci dentro il seguente codice:

entity_id  = data.get('entity_id')
sleep_delay = int(data.get('delay_in_sec'))
start_level_pct = int(data.get('start_level_pct'))
end_level_pct = int(data.get('end_level_pct'))
step_pct  = int(data.get('step_in_level_pct'))

start_level = int(255*start_level_pct/100)
end_level = int(255*end_level_pct/100)
step = int(255*step_pct/100)

new_level = start_level
while new_level < end_level :
    states = hass.states.get(entity_id)
    current_level = states.attributes.get('brightness') or 0 
    if (current_level > new_level) : 
        logger.info('Exiting Fade In')
        break
    else :
        logger.info('Setting brightness of ' + str(entity_id) + ' from ' + str(current_level) + ' to ' + str(new_level))
        data = { "entity_id" : entity_id, "brightness" : new_level }
        hass.services.call('light', 'turn_on', data)
        new_level = new_level + step
        time.sleep(sleep_delay)

Una volta copiato il testo e salvato il file, riavviare Home Assistant.

All’avvenuto riavvio nella lista dei servizi (“Strumenti per gli sviluppatori” / “Servizi”) dovrebbe essere apparso un nuovo servizio, ovvero “python_scripts.fade_in_light“.

Questo servizio accetterà (obbligatori) cinque parametri:

  • entitiy_id, ovvero l’entità “Light” da controllare;
  • delay_in_sec, ovvero il livello di partenza di percentuale luminosa (da 1% a salire);
  • start_level_pct, ovvero il livello di arrivo di percentuale luminosa (100% max);
  • end_level_pct, ovvero “di quanto” incrementare la percentuale ad ogni scatto;
  • step_in_level_pct, ovvero ogni quanti secondi incrementare la percentuale dello scatto indicato.

Automazione

Ora non manca che evocare il servizio con un’automazione (ma potrebbe anche essere uno script, o altro).

Scriviamone per esempio una che si inneschi all’alba:

automation:
  - alias: "Luce crescente"
    trigger:
      - platform: state
        entity_id: sun.sun
        to: "above_horizon"
    condition:
      - condition: state
        entity_id: group.famiglia
        state: 'home'
    action:
      - service: python_script.fade_in_light
        data:
          entity_id: light.led_camera
          delay_in_sec: 10
          start_level_pct: 1
          end_level_pct: 100
          step_in_level_pct: 1

L’automazione derivante (“automation.luce_crescente“) si innesca quando il sensore sun.sun (uno dei sensori di default su Home Assistant) rileva l’affacciarsi del sole all’orizzonte (“above_horizon“) ma solo se la famiglia è in casa (usando il gruppo “group.famiglia“).

L’azione è quella di evocare lo script, indicandogli di partire dall’1% di luminosità per salire fino al 100% con passi d’incremento dell’1%, una volta ogni dieci secondi. In pratica, la luce si accenderà da 0 al 100% in circa un quarto d’ora.

Tali tempistiche, ovviamente, vanno regolate in base alle proprie aspettative ed esigenze.


Un’altro trigger per la nostra automazione potrebbe essere quello relativo all’effettivo stato di addormentamento di chi sta nel letto, magari implementando un sensore di vibrazione o altre tecniche.

Il limite, come sempre, è la fantasia.

Come raggruppare luci smart integrate su Home Assistant

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Se ti sei perso, a tua disposizione c'è la mappa.