Node-Red: Ricarica Tablet in Automatico

HassioHelp

Node-Red: Ricarica Tablet in Automatico

Eccoci ad un nuovo appuntamento con le guide scritte dai nostri lettori. Grazie a Manuel Del Gada, che potete contattare su Telegram al link Manueldelgada o sul gruppo Facebook NodeRED Italia, per averci fornito questa guida.

.

Argomento: Node-Red

Livello: Novizio (Novizio,Esperto, Pro)

Difficoltà: Media (Bassa, Media, Alta)

Oggi vedremo, con node-red, come creare un automazione che farà partire la ricarica del tablet a muro quando noi vogliamo e di conseguenza la disattiverà quando sarà carico.
In parole semplici, inseriremo nell’interfaccia Home Assistant uno slider (da 0 a 100) che ci servirà per impostare il limite oltre il quale il tablet dovrà cominciare la carica.
Ad esempio imposteremo lo slider su 10 e la carica partirà quando la batteria del tablet sarà al 9%.
Poi, per comodità, Inseriremo in interfaccia anche un input_boolean che ci permetterà di disattivare o attivare questa automazione.

Premessa

  • Questa è una guida per chi utilizza Node-Red come add-on di Home Assistant perché contiene nodi dedicati.
  • Si consiglia di seguire prima le 3 guide di base di Giovanni C. Lezione 1Lezione 2Lezione 3.
  • Le entità che fanno parte di questa automazione dovranno essere già configurate su Home Assistant (dovrete chiaramente sostituire le entità di esempio di questa guida con le vostre)
  • In questo caso il valore della batteria viene estrapolato grazie all’integrazione del device tracker Life360 e la ricarica del tablet attivata con uno shelly configurato come switch

Cosa impariamo

  • Ad utilizzare il nodo di trigger con una proprietà.
  • A registrare e interrogare dati global.
  • Ad estrapolare parte del messaggio payload con il nodo function (*approfondimento a fine guida)

Iniziamo con inserire lo slider (input_number) e lo switch (input_boolean) nel configuration.yaml:

input_number:
valore_limite_batteria:
name: Valore limite batteria
min: 0
max: 100
step: 1
mode: slider

input_boolean:
automazione_attiva:
name: Automazione Attiva
icon: mdi:home-automation

Dopo il controllo di configurazione e riavvio, potremmo inserire le entità in Lovelace.

Dopodiché ci recheremo su Node-Red e andremo a creare questo flow. Il flow é composto da 3 automazioni che sono state numerate. Mentre ai nodi sono state assegnate delle lettere per la spiegazione.

Automazione 1

In questa prima automazione andiamo a registrare il valore limite batteria. Il nodo events state (1a) funziona da trigger. All’interno dobbiamo configurare l’input_boolean valore_limite_batteria. Ogni movimento dello slider da interfaccia Home Assistant attiva questo nodo che fa fuoriuscire da esso un msg.payload (il valore limite batteria dello slider).

Il msg.payload entra nel nodo Function (1b) che andremo a programmare per registrare quel numero in memoria a livello globale con il nome di “valorelimite” (globale significa che posso interrogare quel numero da qualsiasi flow Node-Red).

Automazione 2

Il nodo di Trigger (2a) bisogna configurarlo con l’entità del device tracker life360.
Andiamo a programmarlo per avviare l’automazione quando l’attributo/proprietà batteria diventa maggiore o uguale a 1.
Ciò significa che ogni qual volta la batteria cambia di 1%, lui avvia un’automazione che fa partire un msg.payload.

Purtroppo il msg.payload non contiene solo il numero del livello della batteria, che é quello che ci serve, ma contiene lo stato e tutte le proprietà dell’entità device tracker.

Perciò facciamo entrare questo msg.payload pieno di informazioni, all’interno di un nodo function (2b) che é programmato per estrapolare solo l’attributo della batteria.
(* approfondimento nodo function a fine guida)

Finalmente dal nodo function fuoriesce un msg.payload con solo il valore attuale batteria (esempio 10 se la batteria si trova al 10%).

Questo msg.payload entra all’interno di uno switch node (2c) che va a confrontare il msg.payload in ingresso (livello batteria attuale) con il global.valorelimite (il dato registrato nell’automazione 1) lo switch node dovrete programmarlo per far passare l’automazione solo se il msg.payload di ingresso é minore del valore global.valorelimite. In parole semplici l’automazione passa solo se la batteria é più scarica del valore impostato nello slider.

Se l’automazione passa, entra in un nodo current state (2d) che dovrete configurarlo con l’entità dell’input_boolean.automazione_attiva con “if state” on.

Ciò significa che il nodo current state si domanda: lo switch automazione attiva é su on? Se la risposta é vera (true) l’automazione esce dal quadrato sopra del nodo, se é false dal quadrato sotto.

Noi andremo a collegare l’ultimo nodo call service (2e) al quadrato sopra (true) del current state.
Il nodo Call Service dovrete configurarlo per attivare lo shelly che attiva la carica del tablet.
La Call Service é la stessa che eseguite su HA in strumenti per gli sviluppatori.
In questo caso lo shelly é su switch ma potreste averlo su light.

Automazione 3

La terza automazione serve per staccare la carica del tablet quando la batteria raggiunge il 100%.
Andiamo a configurare un nodo trigger (3a) sempre con l’entità del device tracker.
Questa volta andiamo a configurare 2 valori su “add constraint” per complicare le cose ma anche per imparare.
Questi 2 valori, che vedete in foto, attivano l’automazione solo se l’attributo batteria cambia stato da “stato precedente inferiore o uguale a 99 e stato corrente superiore a 99”.
Se ci pensate, in poche parole, si attiva solo se diventa 100%.
Potete inserire, per farla semplice, anche solo “nuovo stato is 100”. E’ solo per farvi capire le variabili potenzialità del nodo di trigger.

Poi collegate un nodo current state (3b), che sarà la copia del nodo current state 2d dell’automazione 2.
Collegato a sua volta a un nodo Call Service (3c) che esegue una call service di spegnimento dello shelly 1 per interrompere la carica.

Flow completato!

*Approfondimento nodo di Function

Dato che abbiamo programmato il nodo function (2b) per far fuoriuscire solo il valore batteria, volevo dedicare un approfondimento al metodo di programmazione.

Vi basterà collegare il nodo trigger (2a) creato in automazione 2, a un nodo debug come in foto.
(é importante entrare nel nodo debug e impostarlo in “complete msg object”)

Dopodiché andate su “strumenti per gli sviluppatori” di Home Assistant e andate su “stati”.
Qui andate a forzare uno stato qualunque del livello batteria.
Ad esempio se é a 70 impostate 26 e cliccate su “imposta stato”.
Questo ci serve solo per attivare il nodo di trigger, che si attiva solo con un cambio di stato del livello della batteria.

Dopodiché torniamo su Node-Red e in alto a destra cliccate sul simbolo dell’insetto (secondo me é un insetto 🙂 “debug messages”. (vedi freccia in foto)

Vedrete il msg.payload completo pieno di  informazioni in “sottocartelle” (chiamiamole così)
Da qui capiamo come programmare il nodo function (2b)
In parole semplici é programmato per restituire il messaggio che si trova alla fine di un determinato percorso. 
Il percorso, come indicano le frecce rosse in foto, é questo:
• data
•   event
•     new_state
•       attributes
•         battery

Da qui la programmazione al suo interno per restituire solo il valore batteria “26″ (in questo caso in foto) msg.data.event.new_state.attributes.battery

Iscrivetevi al gruppo Facebook “NodeRED Italia” per aiutarsi con questo potentissimo strumento di automazione!
All’interno del gruppo troverai anche il flow di questa automazione, per importarlo con un semplice copia e incolla sul tuo node-red!

Per qualsiasi domanda, corsi Node-Red riservati e progetti, non esitate a contattarmi.

 

2 risposte

  1. Avatar Vittorio ha detto:

    Grazie per la condivisione del flow.
    Un altro metodo di condivisione del livello della batteria del tablet è quello tramite Tasker o Macrodroid facendo mandare loro, via MQTT, il valore della batteria ad ogni cambiamento e valutando poi quello nel flow, senza l’utilizzo di applicazioni esterne.

Lascia un commento

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