Simulare automaticamente la presenza in casa tramite la domotica Home Assistant

16 minuti di lettura
● Resta sempre aggiornato grazie al nostro canale Telegram e alla nostra newsletter settimanale!
SCOPI DEL PROGETTO:
  • Definire un meccanismo automatico che “simuli” la presenza degli inquilini in un ambiente domestico dotato di domotica personale basata su Home Assistant, pilotando casualmente (ma con logica) luci e/o tapparelle (coadiuvato da un eventuale sistema d’allarme)
  • Livello di difficoltà: medio/alta
  • Costo: basso
CONCETTI AFFRONTATI:
  • Configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
  • Home Assistant configurato e funzionante
  • Componente Home Assistant “Light”
  • Componente Home Assistant “Cover”
  • Componente Home Assistant “Alarm Control Panel”
COMPONENTI FISICI UTILIZZATI:
  • Il computer sul quale è in esecuzione Home Assistant
  • Luci, interruttori, tapparelle, allarmi eventualmente integrati all’HUB
PROGETTO MAGGIORMENTE INDICATO PER:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione progetto: 1.1

Abstract

ladroI furti nelle abitazioni: una bruttissima realtà figlia della natura stessa dell’uomo. Specialmente in realtà isolate – ma non solo – le abitazioni sono spesso obiettivo di malintenzionati che attendono l’assenza degli inquilini per agire indisturbati. La domotica basata su Home Assistant può – anche in questi casi – venirci in aiuto.

Non sarebbe fore bello dotarsi di un automatismo che, in nostra assenza, simuli una nostra fittizia presenza? Lo scopo del presente progetto è proprio questo: fare in modo che vari elementi della casa precedentemente integrati (come luci, interruttori, tapparelle elettriche) si attivino e disattivino automaticamente e casualmente (ma con una logica) in modo da “dare l’impressione” che qualcuno sia effettivamente in casa.

Oltre a realizzare questo meccanismo faremo anche in modo che la sua attivazione avvenga in modo automatico quando usciamo di casa e si disattivi quando torniamo.

Assunti

Per la realizzazione di questo progetto si assume che:

  • si abbia una buona dimestichezza con Home Assistant e con le sue entità, i suoi script e automazioni e le sue logiche di funzionamento;
  • si siano già implementati dei “Device Tracker” al fine innescare automaticamente la simulazione in caso di assenza degli inquilini, i quali siano raggruppati nel gruppo group.famiglia;
  • si sia dotati di almeno una luce integrata, in un modo o nell’altro, all’HUB. Preferibile, ovviamente, anche la presenza di tapparelle elettriche, anch’esse debitamente integrate.

Si parte

Approccio

Il progetto è piuttosto articolato e modulare, in modo da potersi adattare facilmente alle più comuni realtà operative dei propri ambiti domotici gestiti tramite Home Assistant.

Spiegandolo a grandi linee (andremo nel dettaglio a seguire), il progetto dota l’utente di un interruttore virtuale che, quando acceso, avvia automaticamente la programmazione di simulazione, mentre quando spento, ovviamente, provvede a disattivarlo. Va da sé che questo singolo interruttore possa essere semplicemente attivato/disattivato quando si esce e quando si rientra a casa (grazie ai ben noti meccanismi di automazione di questo tipo su Home Assistant).

La prima personalizzazione che l’utente dovrà fare è quella di indicare quali luci e/o tapparelle (già presenti come entità sulla propria configurazione Home Assistant) rendere parte della simulazione durante la propria assenza.

Una volta fissati (una tantum) questi elementi, l’utente potrà – tramite interfaccia – impostare una serie di parametri:

  • attivare o disattivare l’inclusione di luci e tapparelle nella simulazione;
  • quale modello di simulazione utilizzare:
    • “Lavoro” (inteso come fascia oraria di lavoro)
    • “Vacanze” (simulazione di giornata intera)
    • “Notturno” (solo di notte)
    • “Generico”
  • se attivare forzatamente la simulazione (indipendentemente dalla presenza o meno degli inquilini);
  • se, quando attiva, la simulazione per operare valuti l’effettiva attivazione del sistema d’allarme (il quale ovviamente dev’essere anch’esso integrato a Home Assistant).
  • se attivare le varie fasi (che vedremo) sulla base di orari o sulla base della posizione relativa del sole.

La sequenza logica

La simulazione viene avviata ad ogni cambio di fascia oraria (o posizione del sole), sempre.
Se eseguire o meno delle azioni automatiche viene deciso in base a:

  • se l’interruttore virtuale “generale” (chiamato con il friendly nameSimulazione Presenza” dell’entità input_boolean.simulations_automations_general_presence) è ON, l’automazione prosegue, altrimenti si ferma;
  • se l’automazione prosegue, verifica se l’utente abbia anche specificato di verificare lo stato di attivazione del sistema d’allarme e:
    • se deve verificarlo e se l’allarme è attivo, prosegue, altrimenti si ferma;
    • se non deve verificare l’allarme, semplicemente prosegue.

In caso abbia appurato di doversi fermare, semplicemente si ferma. Se invece prosegue, ciò che accade è che:

  • viene attivato uno script di specifico per il passaggio di fascia oraria dove vengono eseguite un certo numero di azioni (eg: luci + tapparelle);
  • vengono aggiornati dei sensori di tipo “random” i quali forniscono valori, tempi e stati casuali;
  • una volta eseguito il passaggio viene atteso il tempo casuale calcolato sopra al fine di non far scattare le automazioni sempre nel preciso istante, lasciando intuire che si tratti di qualcosa di programmato;
  • atteso questo tempo random vengono eseguite le varie operazioni di simulazione (luci e/o tapparelle) anch’esse tutte separate da un tempo casuale (eg. tapparella 1, 2 minuti, tapparella 2, 10 minuti, tapparella 3), ed in base alla fascia oraria viene deciso se la tapparella debba essere aperta (tra metà e totalmente aperta);
  • le tapparelle vengono sollevate di un’apertura casuale (eg. di giorno magari una viene portata al al 70% e un’altra al 90%);
  • allo stesso modo le luci: magari si accende quella della cucina e si spegne quella del soggiorno e la volta successiva varia (ovviamente andranno indicate solo luci percepibili dall’esterno dell’abitazione);
  • in alcune fasi della giornata, come la sera, le ripetizioni ad esempio non gestiscono le tapparelle, ma solo il passaggio alla fascia oraria poiché generalmente le persone posizionano le tapparelle ad un orario ma poi, vivendo in casa, gestiscono solo le luci;
  • in base alla configurazione è possibile indicare in qualsiasi fascia oraria cosa debbano fare gli elementi: se essere casuali, se spegnere le luci, se chiudere le tapparelle o semplicemente lasciare tutto com’è.

Il progetto realizza tutto questo pur mantenendo un’elementare grado di gestione da parte dell’utente.

Installazione

Per installare questo progetto utilizzeremo “Packages“, un componente di Home Assistant che permette di definire uno o più file di configurazione specifici, raggruppando così tutte le sue configurazioni in un solo posto. Esattamente come capita nella suddivisione dei file di configurazione, andremo ad aggiungere una voce in configurazione (“packages:“) configurata in modo da puntare a una cartella che contenga tale file.

Creare – dentro la cartella che contiene la configurazione di Home Assistant – una cartella chiamata “packages” (a meno che non esista già). In tale cartella, copiare il file chiamato “simulazione_presenza.yaml” contenuto nel repository che potete trovare QUI.

Tornare poi nella cartella di configurazione, aprire il file “configuration.yaml” e aggiungere in fondo la seguente riga:

homeassistant:
  packages: !include_dir_named packages

N.b. Se il blocco “homeassistant:” esiste già, provvedere solo ad includervi sotto la riga “packages: !include_dir_named packages“.

Infine salvare e uscire. Recarsi alla voce di menu “Configurazione” > “Gestione del server” e cliccare su “CONTROLLA LA CONFIGURAZIONE“: se – e solo se – la configurazione risulta corretta, provvedere a un riavvio di Home Assistant (voce “RIAVVIARE” a fondo pagina).

Dopo un necessario riavvio, (svariate) nuove entità di diversa natura saranno apparse presso Home Assistant.

Perfezionamento

A questo punto aprite il file customize.yaml presente nella cartella di configurazione di Home Assistant e, in fondo, copiate il seguente codice:

# Simulations Automations
# Binary Sensors
# Presenza
# Fuori Casa
# Stati
binary_sensor.stato_casuale_1_fuori_casa:
  hidden: false
  icon: mdi:power-cycle
# Sensors
# Presenza
# Fuori Casa
# Valori
sensor.valore_casuale_1_fuori_casa:
  hidden: false
  icon: mdi:numeric
sensor.valore_casuale_2_fuori_casa:
  hidden: false
  icon: mdi:numeric
sensor.valore_casuale_3_fuori_casa:
  hidden: false
  icon: mdi:numeric
# Tempi
sensor.tempo_casuale_1_fuori_casa:
  hidden: false
  icon: mdi:clock-digital
sensor.tempo_casuale_2_fuori_casa:
  hidden: false
  icon: mdi:clock-digital
sensor.tempo_casuale_3_fuori_casa:
  hidden: false
  icon: mdi:clock-digital
# Scripts
# Presenza
# Fuori Casa
# Generico
# Stati
script.simulations_automations_away_presence_randomize_states:
  hidden: false
  friendly_name: 'Generazione Casuali [Stati]'
  icon: mdi:dice-1
# Valori
script.simulations_automations_away_presence_randomize_values:
  hidden: false
  friendly_name: 'Generazione Casuali [Valori]'
  icon: mdi:dice-2
# Tempi
script.simulations_automations_away_presence_randomize_times:
  hidden: false
  friendly_name: 'Generazione Casuali [Tempi]'
  icon: mdi:dice-3
# Elementi
script.simulations_automations_away_presence_randomize_covers:
  hidden: false
  friendly_name: 'Generazione Casuali [Tapparelle]'
  icon: mdi:window-shutter-alert
script.simulations_automations_away_presence_randomize_lights:
  hidden: false
  friendly_name: 'Generazione Casuali [Luci]'
  icon: mdi:lightbulb-multiple-outline
# Giorno
script.simulations_automations_away_presence_start_day:
  hidden: false
  friendly_name: 'Simulazione Giorno [Inizio]'
  icon: mdi:weather-sunny
script.simulations_automations_away_presence_during_day:
  hidden: false
  friendly_name: 'Simulazione Giorno [Ripetizione]'
  icon: mdi:weather-sunny
script.simulations_automations_away_presence_day_covers:
  hidden: false
  friendly_name: 'Simulazione Giorno [Tapparelle]'
  icon: mdi:window-shutter
script.simulations_automations_away_presence_day_lights:
  hidden: false
  friendly_name: 'Simulazione Giorno [Luci]'
  icon: mdi:lightbulb-on-outline
# Sera
script.simulations_automations_away_presence_start_evening:
  hidden: false
  friendly_name: 'Simulazione Sera [Inizio]'
  icon: mdi:weather-sunset
script.simulations_automations_away_presence_during_evening:
  hidden: false
  friendly_name: 'Simulazione Sera [Ripetizione]'
  icon: mdi:weather-sunset
script.simulations_automations_away_presence_evening_covers:
  hidden: false
  friendly_name: 'Simulazione Sera [Tapparelle]'
  icon: mdi:window-shutter
script.simulations_automations_away_presence_evening_lights:
  hidden: false
  friendly_name: 'Simulazione Sera [Luci]'
  icon: mdi:lightbulb-on-outline
# Notte
script.simulations_automations_away_presence_start_night:
  hidden: false
  friendly_name: 'Simulazione Notte [Inizio]'
  icon: mdi:weather-night
script.simulations_automations_away_presence_during_night:
  hidden: false
  friendly_name: 'Simulazione Notte [Ripetizione]'
  icon: mdi:weather-night
script.simulations_automations_away_presence_night_covers:
  hidden: false
  friendly_name: 'Simulazione Notte [Tapparelle]'
  icon: mdi:window-shutter
script.simulations_automations_away_presence_night_lights:
  hidden: false
  friendly_name: 'Simulazione Notte [Luci]'
  icon: mdi:lightbulb-on-outline

Salvate e uscite, e riavviate per un’ultima volta Home Assistant.

Personalizzazione

Sebbene si sia già installato il package “simulazione_presenza.yaml“, è il momento di modificarlo per personalizzarlo rispetto alle proprie entità (luci/interruttori, tapparelle, allarmi).

LUCI

L’avvio della simulazione per la parte delle luci è gestita da un specifico script creata dall’installazione del package chiamato script.simulations_automations_away_presence_randomize_lights.

Aprendo il file simulazione_presenza.yaml è possibile individuarne facilmente la definizione:

sequence:
- service: script.turn_on
  entity_id: script.simulations_automations_away_presence_randomize_times
- delay: '{{ states("sensor.tempo_casuale_2_fuori_casa") | int }}'
- service: script.turn_on
  entity_id: script.simulations_automations_away_presence_randomize_states
- service_template: >-
    {% if is_state("binary_sensor.stato_casuale_1_fuori_casa", "on") %}
      switch.turn_on
    {% else %}
      switch.turn_off
    {% endif %}
  entity_id: light.cucina

#.
#.
#.
#eccetera

come si vede, nella definizione questo blocco di quattro azioni (tre servizi e un delay) si ripete più volte cambiando solo l’ultima riga, quella relativa all’entità condizionata dall’accensione o dallo spegnimento (in questo esempio, light.cucina).

Il blocco agisce sequenzialmente in questo modo:

  • evoca lo script script.simulations_automations_away_presence_randomize_times, il quale genera valori casuali per i timer;
  • attende un tempo casuale (definito sopra) tramite un delay;
  • evoca lo script script.simulations_automations_away_presence_randomize_states, il quale genera stati casuali (on o off);
  • in base a questi stati casuali, accende o spegne la luce indicata.

Questo blocco va ripetuto così com’è, pari pari, per ogni luce che si vuole aggiungere al contesto della simulazione, semplicemente modificando in ogni blocco il nome dell’entità da includere.

Leggendo bene il codice, si noterà che le entità controllate (e quindi le ripetizioni di blocco) sono quattro: light.cucina, light.soggiorno_1, light.soggiorno_2, light.camera.

N.b. In caso le luci siano mappate su componente “Switch” anziché “Light”, ovviamente il codice andrà adeguato con servizi ed entità appropriati (light.turn_on e light.turn_off).
TAPPARELLE

Stesso discorso, ma nello script script.simulations_automations_away_presence_randomize_covers.
Il blocco che si ripete è simile a quello delle luci, solo che in questo caso è l’altezza di apertura ad essere gestito:

sequence:
- service: script.turn_on
  entity_id: script.simulations_automations_away_presence_randomize_times
- delay: '{{ states("sensor.tempo_casuale_3_fuori_casa") | int }}'
- service: script.turn_on
  entity_id: script.simulations_automations_away_presence_randomize_values
- service: cover.set_cover_position
  entity_id: cover.cucina
  data_template:
    position: >-
      {% if is_state("sensor.simulations_automations_time_slot_away_presence", "Giorno") %}
        {{ states("sensor.valore_casuale_2_fuori_casa") | int }}
      {% elif is_state("sensor.simulations_automations_time_slot_away_presence", "Sera") %}
        {{ states("sensor.valore_casuale_1_fuori_casa") | int }}
      {% elif is_state("sensor.simulations_automations_time_slot_away_presence", "Notte") %}
        {{ states("sensor.valore_casuale_3_fuori_casa") | int }}
      {% else %}
        0
      {% endif %}
#.
#.
#.
#eccetera

Nell’esempio l’entità cover.cucina viene regolata in modo casuale in base anche del momento del giorno.
Se si vorranno includere più tapparelle basterà ripetere il blocco cambiando il nome dell’entità controllata. Ognuna si aprirà in modo diverso e casuale, garantendo una”credibilità” all’automazione.

Leggendo bene il codice, si noterà che le entità controllate (e quindi le ripetizioni di blocco) sono due: cover.cucina, e cover.soggiorno.

ALLARME

Se si possiede un allarme integrato con Home Assistant, allora è possibile utilizzarlo nella simulazione come parametro per valutare se eseguirla o meno.

Dentro la definizione del “Binary Sensor” di nome simulations_automations_preset_status_presence, esiste un blocco if che inizia così:

{% if is_state("alarm_control_panel.impianto_sicurezza", "armed_away") %}

abbiamo ipotizzato di avere un allarme integrato dal nome alarm_control_panel.impianto_sicurezza. Sarà quindi sufficiente sostituire questo nome col nome della propria entità allarme per utilizzarlo come “filtro” per l’innesco dell’automazione. Ovviamente tale entità potrebbe essere anche di altro tipo.

Stesso dicasi per il blocco “elif” che segue, il quale considera invece lo stato “disarmato”:

{% elif is_state("alarm_control_panel.impianto_sicurezza", "disarmed") %}

Terminate le modifiche, aggiornare il file “simulazione_presenza.yaml” e riavviare Home Assistant.

Configurazione Lovelace UI

Dopo aver creato tutte le entità grazie all’inclusione del package di cui sopra, è ora il momento di di rappresentare le entità che ci servono per configurare e gestire la simulazione automatica presso l’interfaccia Lovelace UI.

Per farla proponiamo due strade:

  • realizzare un pannello ad hoc (consigliato)
  • limitarsi ad aggiungere tre “manual card” all’interfaccia.

Se si vuole dedicare un pannello (scelta consigliata) è sufficiente aprire in modalità YAML l’interfaccia Lovelace UI (cliccare sui tre puntini in alto a destra, “Configurare interfaccia utente“, poi nuovamente i tre puntini e poi “Editor di Configurazione testuale“.

Posizionarsi in fondo al testo visualizzato nell’editor e copia-incollare il seguente codice:

  - badges: []
    cards:
      - entities:
          - entity: input_boolean.simulations_automations_general_presence
          - entity: input_select.simulations_automations_preset_presence
          - entity: binary_sensor.simulations_automations_preset_status_presence
        show_header_toggle: false
        title: Impostazioni Generali
        type: entities
      - entities:
          - entity: input_boolean.simulations_automations_covers_away_presence
          - entity: input_boolean.simulations_automations_lights_away_presence
          - entity: input_boolean.simulations_automations_repeat_away_presence
          - entity: input_boolean.simulations_automations_alarm_away_presence
          - entity: input_select.simulations_automations_base_away_presence
          - entity: >-
              input_datetime.simulations_automations_start_day_end_night_away_presence
          - entity: >-
              input_datetime.simulations_automations_start_evening_end_day_away_presence
          - entity: >-
              input_datetime.simulations_automations_start_night_end_evening_away_presence
          - entity: sensor.simulations_automations_time_slot_away_presence
          - entity: sensor.simulations_automations_last_trigger_away_presence
        show_header_toggle: false
        title: Impostazioni Fuori Casa
        type: entities
      - entities:
          - entity: sensor.simulations_automations_preset_config_presence          
          - entity: automation.simulations_automations_presenza_aggiornamento_stato_modello_selezionato
          - entity: automation.simulations_automations_presenza_fuori_casa_aggiornamento_fascia_oraria
          - entity: automation.simulations_automations_presenza_fuori_casa_reset_stati
          - entity: automation.simulations_automations_presenza_fuori_casa_passaggio_a_giorno
          - entity: automation.simulations_automations_presenza_fuori_casa_durante_il_giorno
          - entity: automation.simulations_automations_presenza_fuori_casa_passaggio_a_sera
          - entity: automation.simulations_automations_presenza_fuori_casa_durante_la_sera
          - entity: automation.simulations_automations_presenza_fuori_casa_passaggio_a_notte
          - entity: automation.simulations_automations_presenza_fuori_casa_durante_la_notte
          - entity: switch.simulations_automations_general_presence
          - entity: script.simulations_automations_away_presence_randomize_states
          - entity: script.simulations_automations_away_presence_randomize_values
          - entity: script.simulations_automations_away_presence_randomize_times
          - entity: script.simulations_automations_away_presence_randomize_covers
          - entity: script.simulations_automations_away_presence_randomize_lights
          - entity: input_boolean.simulations_automations_start_day_check_away_presence
          - entity: script.simulations_automations_away_presence_start_day
          - entity: script.simulations_automations_away_presence_during_day
          - entity: script.simulations_automations_away_presence_day_covers
          - entity: script.simulations_automations_away_presence_day_lights
          - entity: input_boolean.simulations_automations_start_evening_check_away_presence
          - entity: script.simulations_automations_away_presence_start_evening
          - entity: script.simulations_automations_away_presence_during_evening
          - entity: script.simulations_automations_away_presence_evening_covers
          - entity: script.simulations_automations_away_presence_evening_lights
          - entity: input_boolean.simulations_automations_start_night_check_away_presence
          - entity: script.simulations_automations_away_presence_start_night
          - entity: script.simulations_automations_away_presence_during_night
          - entity: script.simulations_automations_away_presence_night_covers
          - entity: script.simulations_automations_away_presence_night_lights
          - entity: binary_sensor.stato_casuale_1_fuori_casa
          - entity: sensor.valore_casuale_1_fuori_casa
          - entity: sensor.valore_casuale_2_fuori_casa
          - entity: sensor.valore_casuale_3_fuori_casa
          - entity: sensor.tempo_casuale_1_fuori_casa
          - entity: sensor.tempo_casuale_2_fuori_casa
          - entity: sensor.tempo_casuale_3_fuori_casa
          - entity: input_text.simulations_automations_last_trigger_time_away_presence
          - entity: input_text.simulations_automations_last_trigger_date_away_presence
          - entity: input_text.simulations_automations_last_trigger_time_slot_away_presence
          - entity: input_text.simulations_automations_last_trigger_type_away_presence
        show_header_toggle: false
        title: Cruscotto
        type: entities
    icon: 'mdi:human-handsdown'
    path: simulations_automations
    title: Simulazioni

Uscire salvando: apparirà in alto un nuovo pannello contenente tre “card” relative alla simulazione di presenza.


In alternativa al pannello è possibile creare manualmente tre “manual card” vergini aggiungendovi poi questi tre, rispettivi blocchi di codice:

CARD “IMPOSTAZIONI GENERALI”
entities:
  - entity: input_boolean.simulations_automations_general_presence
  - entity: input_select.simulations_automations_preset_presence
  - entity: binary_sensor.simulations_automations_preset_status_presence
show_header_toggle: false
title: Impostazioni Generali
type: entities
CARD “IMPOSTAZIONI FUORI CASA”
entities:
  - entity: input_boolean.simulations_automations_covers_away_presence
  - entity: input_boolean.simulations_automations_lights_away_presence
  - entity: input_boolean.simulations_automations_repeat_away_presence
  - entity: input_boolean.simulations_automations_alarm_away_presence
  - entity: input_select.simulations_automations_base_away_presence
  - entity: input_datetime.simulations_automations_start_day_end_night_away_presence
  - entity: input_datetime.simulations_automations_start_evening_end_day_away_presence
  - entity: input_datetime.simulations_automations_start_night_end_evening_away_presence
  - entity: sensor.simulations_automations_time_slot_away_presence
  - entity: sensor.simulations_automations_last_trigger_away_presence
show_header_toggle: false
title: Impostazioni Fuori Casa
type: entities
CARD “CRUSCOTTO”
entities:
  - entity: sensor.simulations_automations_preset_config_presence
  - entity: automation.simulations_automations_presenza_aggiornamento_stato_modello_selezionato
  - entity: automation.simulations_automations_presenza_fuori_casa_aggiornamento_fascia_oraria
  - entity: automation.simulations_automations_presenza_fuori_casa_reset_stati
  - entity: automation.simulations_automations_presenza_fuori_casa_passaggio_a_giorno
  - entity: automation.simulations_automations_presenza_fuori_casa_durante_il_giorno
  - entity: automation.simulations_automations_presenza_fuori_casa_passaggio_a_sera
  - entity: automation.simulations_automations_presenza_fuori_casa_durante_la_sera
  - entity: automation.simulations_automations_presenza_fuori_casa_passaggio_a_notte
  - entity: automation.simulations_automations_presenza_fuori_casa_durante_la_notte
  - entity: switch.simulations_automations_general_presence
  - entity: script.simulations_automations_away_presence_randomize_states
  - entity: script.simulations_automations_away_presence_randomize_values
  - entity: script.simulations_automations_away_presence_randomize_times
  - entity: script.simulations_automations_away_presence_randomize_covers
  - entity: script.simulations_automations_away_presence_randomize_lights
  - entity: input_boolean.simulations_automations_start_day_check_away_presence
  - entity: script.simulations_automations_away_presence_start_day
  - entity: script.simulations_automations_away_presence_during_day
  - entity: script.simulations_automations_away_presence_day_covers
  - entity: script.simulations_automations_away_presence_day_lights
  - entity: input_boolean.simulations_automations_start_evening_check_away_presence
  - entity: script.simulations_automations_away_presence_start_evening
  - entity: script.simulations_automations_away_presence_during_evening
  - entity: script.simulations_automations_away_presence_evening_covers
  - entity: script.simulations_automations_away_presence_evening_lights
  - entity: input_boolean.simulations_automations_start_night_check_away_presence
  - entity: script.simulations_automations_away_presence_start_night
  - entity: script.simulations_automations_away_presence_during_night
  - entity: script.simulations_automations_away_presence_night_covers
  - entity: script.simulations_automations_away_presence_night_lights
  - entity: binary_sensor.stato_casuale_1_fuori_casa
  - entity: sensor.valore_casuale_1_fuori_casa
  - entity: sensor.valore_casuale_2_fuori_casa
  - entity: sensor.valore_casuale_3_fuori_casa
  - entity: sensor.tempo_casuale_1_fuori_casa
  - entity: sensor.tempo_casuale_2_fuori_casa
  - entity: sensor.tempo_casuale_3_fuori_casa
  - entity: input_text.simulations_automations_last_trigger_time_away_presence
  - entity: input_text.simulations_automations_last_trigger_date_away_presence
  - entity: input_text.simulations_automations_last_trigger_time_slot_away_presence
  - entity: input_text.simulations_automations_last_trigger_type_away_presence
show_header_toggle: false
title: Cruscotto
type: entities

Dopo l’avvenuta configurazione i tre pannelli appariranno sull’interfaccia.

Spiegazione strumenti

Vediamo nel dettaglio a cosa servano gli strumenti apparsi sull’interfaccia.

IMPOSTAZIONI GENERALI

Simulazione presenza - Card Lovelace - Impostazioni generali

  • Simulazione presenza: serve ad attivare la simulazione (la quale si innesca al successivo cambio d’ora/stato solare);
  • Modello di simulazione: serve a scegliere il modello da applicare (spiegato in fondo);
  • Stato modello: se l’automazione sia innescata o meno.
IMPOSTAZIONI FUORI CASA

Simulazione presenza - Card Lovelace - Impostazioni fuori casa

  • Tapparelle casuali: se le tapparelle indicate in configurazione siano coinvolte o meno dalla simulazione;
  • Luci casuali: se le luci indicate in configurazioni siano coinvolte o meno dalla simulazione;
  • Ripetizioni casuali: se l’accensione/spegnimento o il sollevamento/abbassamento debbano essere ripetute casualmente o meno.*
  • Valutazione antifurto: se valutare lo stato dell’entità antifurto (se presente) o meno;
  • Base elementi casuali: se basarsi, per l’innesco ciclico su fasce orarie o sul sole;
  • Inizio*/Fine*: fasce orarie;
  • Fascia Oraria: fascia oraria in corso;
  • Ultima Simulazione: quando è stata l’ultima azione eseguita.

*Luci e tapparelle sono gestite una volta ogni cambio di fascia oraria. Le ripetizioni, se attive, variano come segue: di giorno sono ogni 2 ore, di sera ogni 10 minuti (la sera generalmente dura poco), di notte ogni 3 ore. Le ripetizioni serali escludono le tapparelle.

CRUSCOTTO

Si tratta di un pannello che presenta tutte le entità “di servizio” a supporto dell’automatismo (a fini di consultazione libera, analisi, innesco manuale).
Il primo indicatore in elenco su questo pannello, “Configurazione modello“, riporta quattro stati:

  • 1 – Non Attivo = non fa nulla
  • 2 – Spegnimento =  esegue totale spegnimento delle luci indicate (spiegato in fondo)
  • 3 – Chiusura = esegue totale chiusura delle tapparelle indicate (spiegato in fondo)
  • 4 – Casuale = genera valori casuali in base alla fascia oraria.

Automazione

A questo punto per attivare la simulazione (la quale comunque parte solo in base al rispetto dei vari, restanti parametri, come per esempio l’eventuale fascia oraria, l’eventuale stato dell’antifurto e quant’altro) è sufficiente impostare input_boolean.script.simulations_automations_general_presence a ON (manualmente o tramite automazione).

Scriviamo due automazioni che provvedano all’abilitazione o alla disabilitazione in base all’uscita o il ritorno a casa:

automation:
  - alias: "AWAY HOME"
    trigger:
      platform: state
      entity_id: group.famiglia
      from: 'home'
    condition: []
    action:
      - service: input_boolean.turn_on
        entity_id: input_boolean.script.simulations_automations_general_presence

  - alias: "BACK HOME"
    trigger:
      platform: state
      entity_id: group.famiglia
      to: 'home'
    condition: []
    action:
      - service: input_boolean.turn_off
        entity_id: input_boolean.script.simulations_automations_general_presence

Ovviamente si potrà personalizzare l’automazione (o le automazioni) come meglio si crede. Ciò che conta, essenzialmente, è agire su input_boolean.script.simulations_automations_general_presence.

Ulteriori personalizzazioni

Il package, come si sarà notato, è abbastanza strutturato e complesso. Sono vari i punti dove si può metter mano per cambiarne il comportamento.

MODELLO SIMULAZIONE

Come abbiamo visto da interfaccia è possibile scegliere quale modello utilizzare tramite input_select.simulations_automations_preset_presence:

Simulazione presenza - Card Lovelace - Modello simulazione

Tale variazione ha effetto sul binary_sensor.simulations_automations_preset_status_presence, il quale, in base a com’è scritto, rende operativa (o meno) la simulazione in base alle proprie esigenze.

Ora, l’attuale codice proposto non causa differenze di comportamento dell’automazione: lascia infatti all’utente la possibilità di personalizzare ogni singolo sotto-blocco (relativo alle condizioni “Lavoro“, “Vacanza“, “Notturno” e “Generico” come meglio crede.

Il package, installato come proposto, permette di impostare binary_sensor.simulations_automations_preset_status_presence, a un valore qualsiasi e giocare con input_boolean.script.simulations_automations_general_presence per decidere quando rendere l’automazione operativa (come fatto nell’automazione qui sopra).


Un metodo più elegante sarebbe quello di lasciare a automazione input_boolean.script.simulations_automations_general_presence sempre acceso e far sì che la simulazione si comporti in base alla selezione del modello di simulazione scelto con input_select.simulations_automations_preset_presence, la cui logica cablata in binary_sensor.simulations_automations_preset_status_presence agisca per noi in modo trasparente e totalmente automatico.

SPEGNIMENTI/CHIUSURE COMPLETE

Esistono due script, in calce al package, chiamati script.scenario_all_covers_off e scriptscenario_all_lights_off. Il primo viene evocato dalla simulazione quando c’è necessità di abbassare tutte le cover, mentre il secondo spegne tutte le luci:

  scenario_all_covers_off:
    sequence:
    - service: cover.set_cover_position
      entity_id: all
      data:
        position: 0

  scenario_all_lights_off:
    sequence:
    - service: light.turn_off
      entity_id: all

Questi due script provvedono ad abbassare tutte le tapparelle e a spegnere tutte le luci presenti su Home Assistant, non solo quelle precedentemente indicate nella configurazione del package. Pertanto, in caso tale comportamento non sia adeguato alle aspettative, i due script andranno variati indicando, al posto di “all“, le entità che si vorranno controllare.

Esempio:

  scenario_all_lights_off:
    sequence:
    - service: light.turn_off
      entity_id: light.cucina, light.camera

Ringraziamenti

Si ringrazia sentitamente l’autore del progetto, Sagitt.


Home Assistant Official LogoATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.