Blackout Sotto Controllo

HassioHelp

Blackout Sotto Controllo

Aggiornamento: 28/10/2109 modifica del package eliminando l’uso della custom components

Continuano le guide dei nostri lettori. Grazie ancora al nostro utente Telegram https://t.me/@MaGiDeL per aver realizzato questa guida.

Introduzione

Un’importante funzione di un sistema domotico sono le notifiche, di ogni genere e per ogni situazione.
Le piattaforme per queste comunicazioni sono le più disparate, la più conosciuta ed utilizzata è Telegram.

La notifica che vedremo oggi viene generata da un’automazione che ci comunica quando lo stato di una presa/switch da “on” passa a “unavailable”.
Oltre ad avvisarci quando la presa cambia di stato, l’automazione farà partire un contatore che secondo dopo secondo “conterà” il tempo di blackout della presa. Per far questo avremo bisogno di una variabile che all’inizio varrà 0 e ad automazione attivata varierà il suo valore, incrementando di un unità ogni secondo.
Quando la presa tornerà on line, nello stato di “on”, il contatore verrà bloccato e la variabile non sarà più incrementata.
Quest’ultima, opportunamente modificata, rileverà il tempo in minuti del blackout della presa e questa importante informazione ci verrà segnalata attraverso una notifica!

Il setup e lo scopo

Utilizzeremo un custom component per creare una variabile in Home Assistant. Tale componente lo troviamo su: https://github.com/rogro82/hass-variables. Nella pagina di GitHub vi sono le istruzioni per l’installazione, sia manuale che tramite HACS ( per quest’ultimo vi basterà aggiungere il link sopracitato ai custom repositories su HACS).

La presa/switch è già presente e funzionante in Home Assistant.

Per comodità ho creato un package (link guida Package Configurazione ) ma nulla vieta di stravolgere il codice a piacimento.
Il package (che trovate più avanti) riguarda una singola presa/switch (nell’esempio è una Blitzwolf, il cui carico è un un forno. Quindi l’entità si chiama: switch.blitzwolf_oven e sarà questa entità da sostituire in caso si voglia estendere il package ad altri dispositivi, oltre a sostituire la parola “oven”). 

Lo scopo è quello di avere nota di un blackout, specialmente quando si è fuori casa, e di sapere il periodo del blackout.
Saremo tutti contenti nell’avere questa informazione.

Descrizione del Package

Qui potete scaricale la versione 1 del package pkg_balckout_timer_v0_1.
Il nuovo package lo trovate qui sotto o in questo link pkg_blackout_timer_v0_2

# Istruzioni:
# Sostituire l'entità "switch.blitzwolf_oven" con la proprià entità da controllare
# Sostituire "Oven" con altro, per personalizzare o creare più package per il controllo di più dispositivi
# Personalizzare Titoli e Messaggio su notify.telegram


#################################################################
### Packages/BlackOut OVEN
#################################################################

#################################################################
### Customize
#################################################################
homeassistant:
customize:
################################################
## Node Anchors
################################################

package.node_anchors:
customize: &customize
Package: ---BlackOut Count---
Creato da: MaGiDeL
Creato per: HassioHelp

expose: &expose
<<: *customize
haaska_hidden: false
homebridge_hidden: false

automation.blackout_oven:
<<: *customize
friendly_name: "Blackout Timer Oven"
icon: mdi:stove

########################################################################
### INPUT NUMBER
########################################################################
input_number:
blackout_timer_oven:
name: Blackout Timer Oven
initial: 0
min: 0
max: 172800 #48 hours of blackout!!!!!
step: 1
icon: mdi:alarm

########################################################################
### TEMPLATE
########################################################################
sensor:
- platform: template
sensors:
template_input_blackout_oven:
value_template: "{{ states('input_number.blackout_timer_oven') | int | timestamp_custom('%H:%M:%S', 0) }}"
friendly_name: "Input BlackOut Oven"
icon_template: "mdi:timer"

########################################################################
### GROUP
########################################################################
# group:
# blackout_oven:
# name: Blackout Timer Oven
# entities:
# - input_number.blackout_timer_oven
# - sensor.template_input_blackout_oven
# - automation.plugs_on_oven
# - automation.plugs_off_oven
# - automation.blackout_oven


#########################################################
### AUTOMATION
#########################################################
automation:
- alias: Plugs OFF Oven
initial_state: true
trigger:
- platform: template
value_template: >-

{{ states('switch.blitzwolf_oven') == 'unavailable' }}
for: '00:00:30'
action:
- service: notify.telegram
data_template:
title: '--- *Alert* ---'
message: |-

*Blitzwolf Oven: OFF*

Notify you at {{ now().strftime('%Y-%m-%d %H:%M:%S') }}
- delay: '00:00:02'
- service: input_number.set_value
data_template:
entity_id: input_number.blackout_timer_oven
value: 30
- service: automation.turn_on
data:
entity_id: automation.blackout_oven
- delay: '00:00:02'
- service: automation.turn_on
data:
entity_id: automation.plugs_on_oven


- alias: Plugs ON Oven
initial_state: False
trigger:
- platform: template
value_template: >-

{{ states('switch.blitzwolf_oven') != 'unavailable' }}
action:
- service: automation.turn_off
data:
entity_id: automation.blackout_oven
- delay: '00:00:02'
- service: notify.telegram
data_template:
title: '--- *Restored Oven Plug* ---'
message: |-

*Blitzwolf Oven: ON*

*Blackout period*: {{ states('input_number.blackout_timer_oven') | int | timestamp_custom('%H:%M:%S', 0) }}

Notify you at {{ now().strftime('%Y-%m-%d %H:%M:%S') }}
- delay: '00:00:02'
- service: automation.turn_off
data:
entity_id: automation.plugs_on_oven


- alias: Blackout Oven
initial_state: False
trigger:
- platform: time_pattern
seconds: "/1"
action:
- service: input_number.set_value
data_template:
entity_id: input_number.blackout_timer_oven
value: "{{ (states('input_number.blackout_timer_oven') | int ) +1 }}"

All’inizio del codice troviamo le dichiarzioni “customize”.
Proseguendo, la dichiarazione della variabile, nome e attributo.
Quindi un platform template per la formattazione del tempo non in ore, ma in HH:MM:SS.
Infine le tre automazioni:

  • la prima (“Plugs OFF Oven”), che ci avvisa del cambiamento di stato dello switch quando quest’ultimo va off line.
  • la seconda (“Plugs ON Oven”), che ci avvisa del cambiamento di stato dello switch quando quest’ultimo torna on line.
  • la terza (“Blackout Oven”), il vero e proprio contatore

Prima Automazione v.1

Per la personalizzazione dell’automazione basta modificare nel trigger il nome dello switch.
Quando scatta il trigger, tramite il servizio “notify.telegram”, veniamo avvisati con un determinato messaggio.
Il sistema, quindi, attende 3 secondi per inizializzare la variabile, impostandola a 0.
Infine avvia l’automazione del contatore

Seconda Automazione v.1

Come per la prima, l’automazione scatta quando lo switch torna on line.
L’automazione del contatore viene interrota.
Il sistema attende 3 secondi, quindi ci avvisa tramite la notifica di un dererminato messaggio

Terza Automazione v.1

Il contatore vero e proprio.
Appena viene attivato, ogni secondo incrementa la variabile precedentemente dichiarata di un’unità.

Prima Automazione v.2

Discorso della personalizzazione dello switch sempre presente.
Unica automazione con “initial_state: true”
A differenza della prima versione, adesso il trigger scatta quando la presa diventa ‘unavailable’ per almeno 30 secondi.
Appena scatta il trigger il sistema manda un avviso di notifica (telegram in qeusto caso), attende 2 secondi, inizializza l’input_numeric con il valore 30 (i secondi già passati da quando la presa è andata in blackout), così da non perdersi quel periodo, attiva l’automazione contatore (ovvero la terza automazione). Attende altri 2 secondi ed attiva la seconda automazione, che ha “initial_state: false”.

Seconda Automazione v.2

A differenza della prima verisone, in questa l’automazione ha “initial_state: false”.
Viene attivata dalla prima. Al trigger l’automazione del contatore viene interrotta e il sistema avvisa tramite notifica del periodo di blackout.
Una volta avviata la notifica, dopo 2 secondi, la stessa automazione viene interrotta per non mandare notifiche in caso la presa/switch ritorni on line dopo un blackout entro il periodo di 30 secondi scelto come periodo di inizio blackout.

Terza Automazione v.2

Rimasta inalterata come nella prima versione.

Lovelace

type: entities
entities:
  - switch.blitzwolf_oven
- sensor.template_input_blackout_oven

Conclusioni

Applicando il package a più dispositivi, prese o quant’altro collegati alla linea elettrica e mettendo la macchina dove gira HA e modem sotto gruppo di continuità, potremmo renderci conto di un blackout elettrico che sta avvenendo e della sua durata, anche se dovesse mancare in tutta la casa, tramite una notifica Telegram.

A breve seguirà una versione migliorativa che non utilizzerà il custom_component, rendendo il codice meno pesante per HA.

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *