community italiana di domotica personale
 
Realizzare una sonda di assorbimento elettrico domotica tramite PZEM, ESP8266 ed ESPHome

Realizzare una sonda di assorbimento elettrico domotica tramite PZEM, ESP8266 ed ESPHome

Amazon - Promozioni del giorno  
SCOPI DEL PROGETTO:
  • Realizzare in proprio una sonda domotica per le letture di assorbimento elettrico basata su PZEM, una board ESP8266 e il firmware ESPHome
  • Livello di difficoltà: medio/alto
  • Costo: medio/basso
CONCETTI AFFRONTATI:
  • Modifica fisica a un sensore
  • Interconnessione tra sensore e board ESP8266
  • Configurazione firmware ESPHome
COMPONENTI SOFTWARE UTILIZZATE:
COMPONENTI FISICI UTILIZZATI:
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 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 presenza di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat.
Revisione progetto: 1.0

Abstract

La possibilità, in domotica personale, di misurare gli assorbimenti elettrici e i consumi del proprio impianto è tra le più apprezzate funzioni non solo per una questione di contabilizzazione economica, ma anche per far sì che gli automatismi – propri della domotica – possano intervenire e/o allertarci in presenza di condizioni di assorbimento eccessivo o altre situazioni specifiche.

Le tecniche di rilevazione sono essenzialmente due: una misurazione del carico in modo passante, ovvero misurando la corrente che transita attraverso un componente sensore, oppure tramite l’uso di pinze/toroidi amperometrici, ovvero dei componenti passivi che, sfruttando il campo magnetico presente intorno a un cavo elettrico percorso da corrente (che varia di intensità proporzionalmente alla quantità di corrente), deducono la lettura di assorbimento.

Sono ormai moltissimi gli attuatori del primo tipo in grado di misurare il carico ad essi applicato, che li attraversa; quando però si tratta di misurare l’assorbimento a monte dell’impianto le possibilità si riducono di molto. Alcuni modelli di sensori passanti supportino dei carichi di corrente anche importanti (per esempio il Sonoff POW, o lo Shelly 1PM).

Toroide amperometrico
dettaglio di pinza amperometrica.

L’alternativa sta nell’adozione di pinze/toroidi amperometrici. In pratica si tratta di sensori dotati di una sonda magnetica che “circonda” il cavo fase da monitorare e che, il base al campo magnetico da esso prodotto, determina la lettura. Il vantaggio evidente di questi sensori sta nella lettura “passiva” dell’informazione, la quale viene prelevata semplicemente circondando un cavo tramite il toroide/pinza amperometrica, il che consente anche di non dover “metter mano” all’impianto.

I sensori di queso tipo dotati anche di funzionalità domotiche ne esistono alcuni modelli di qualità, come per esempio l’ottimo Shelly EM, il quale unico handicap è, purtroppo, il costo, che, sebbene non elevatissimo, è presente.

Se la misurazione degli assorbimenti è un must ma non si vuole/può optare per un componente specificamente concepito a tale scopo, la soluzione esiste: l’accoppiamento di un sensore digitale come il PZEM-016 (vedi anche scheda inDomus) e una board Wi-Fi Wemos D1 Mini (ma per entrambi vanno bene anche altri modelli) – componenti entrambi molto economici ma versatili ed efficaci – consente di ottenere sostanzialmente il medesimo scopo.

Il presente progetto realizza precisamente questo: illustra come assemblare in un’unico device le funzionalità di sensore offerte dal PZEM-016 e quelle di “intelligenza” e trasmissione dati tramite il Wemos D1 Mini.

N.b. Questo, come tanti, è solo un progetto sperimentale e con scopi puramente didattici. Sul tema di energia e potenza, si consiglia caldamente la lettura di questa scheda.

Si parte

Necessario

Il necessario per realizzare il presente progetto è, come detto, un PZEM-016 e un Wemos D1 Mini.

Tra i vari modelli PZEM abbiamo scelto il PZEM-016 perché, a differenza del modello inferiore (il PZEM-004), può essere scelto in acquisto in abbinamento a una pinza amperometrica anziché un toroide chiuso: la prima si monta sul cavo fase da monitorare semplicemente aprendola e posizionandola intorno al cavo (vedi immagine sopra), mentre il toroide prevede che il cavo venga disconnesso dalla più vicina connessione per essere “infilato”. Secondariamente, il PZEM-016 è dotato di un proprio case protettivo, il che non guasta. La scelta del Wemos D1 Mini, invece, è puramente occasionale: per il presente progetto si sarebbe potuto utilizzare (con le medesime tecniche descritte) un NodeMCU o altri analoghi.

Le due unità verranno collegate assieme e, date le limitate dimensioni del Wemos D1 Mini, provvederemo a inserire quest’ultimo direttamente dentro la scatola di contenimento del PZEM-016.

Servono poi due resistenze da 2kΩ, qualche cavetto Dupont, un piccolo saldatore (bene averne uno con una punta particolarmente sottile) e infine una pompa dissaldante (non assolutamente necessaria ma caldamente consigliata).

Infine, è bene avere un minimo di manualità. 😊

PZEM

Il PZEM-016 è un’unità alimentata tramite i comuni 230 volt di rete in grado di accettare letture esterne tramite una comune pinza o un toroide amperometrici. Di positivo ha il fatto di presentare un’uscita a 5 volt in corrente continua, particolarmente comoda per alimentare, in questo progetto, il Wemos D1 Mini che gli andremo a collegare e montare sopra.

Per integrare al Wemos le letture del PZEM è necessario apportare a quest’ultimo due piccole modifiche, ovvero il dissaldamento di un chip integrato presente sulla sua board e l’aggiunta delle due resistenze da 2kΩ.

Il PZEM-016 appare come segue:

PZEM-016

Tramite un profilo affilato ma non tagliente (per esempio una carta di credito) sollevare i bordi laterali così da aprire l’enclosure e avere accesso alla board del PZEM. Una volta aperto appare così:

PZEM-016 - Aperto

Il chip integrato da dissaldare, quindi da rimuovere, è presente nella foto nell’angolo in basso a destra.
Eccone un dettaglio:

PZEM-016 - Chip da dissaldare - dettaglio

Con molta cura e grazie all’aiuto del mini-saldatore e della pompa dissaldante, provvedere al dissaldamento del piccolo integrato, riscaldando e rimuovendo lo stagno che ne fissa i vari piedini e sollevandolo delicatamente da sotto.

N.b. Se non si ha particolare dimestichezza con le operazioni di dissaldatura, si consiglia la lettura di questa ottima guida.

Al termine, la piazzola dovrebbe risultare come segue:

PZEM-016 - Chip dissaldato


A questo punto dovremo aggiungere le due resistenze e due cavi Dupont in punti specifici della board.

PZEM-016 - Fototransistor, punti di saldatura

Andremo a unire, tramite una resistenza, i punti 1 e 2 mentre la seconda resistenza la collocheremo tra il punto 1 e il 3.
Andremo contestualmente a saldare al punto 2 un cavetto Dupont (lo useremo in seguito per il collegamento con il Wemos), mentre il secondo cavetto lo andremo a saldare al punto 4.

N.b. Si tratta di saldature non propriamente elementari: è necessario essere particolarmente accurati e puliti nella realizzazione dei contatti, che ovviamente devono essere minimali e isolati rispetto agli altri.

Alla fine dell’operazione, la board dovrebbe apparire come segue:

PZEM-016 - Modifica conclusa

La modifica al PZEM è così conclusa.

ESP8266

La board basata su SOC ESP8266 che utilizzeremo è un Wemos D1 Mini ma avrebbe, come detto, anche essere un’altra.

Collegamento con il PZEM

La particolarità del PZEM-016 è quella di disporre di morsetti di uscita che erogano una corrente continua a 5 volt, esattamente quella necessaria al nostro Wemos per operare. Procediamo quindi a identificare i morsetti, che si trovano nell’estremità inferiore del PZEM, e inseriamo due fili, uno per il polo positivo e uno per il polo negativo.

Il nostro consiglio è quello di inserire i capi dei due fili nella morsettiera per poi farli transitare sotto la board, infine per farli “uscire” di lato. Questo piccolo trucchetto ci tornerà molto utile in fase di chiusura del case del PZEM.

PZEM-016 - Alimentazione 5 volt in uscita

Dal PZEM partiranno quindi quattro fili:

  • polo positivo 5 volt;
  • polo negativo;
  • i due fili saldati assieme alle resistenze.

Il Wemos D1 Mini presenta le seguenti connessioni:

Wemos D1 Mini - Schema
dettaglio dello schema fisico/logico del Wemos D1 Mini.

Andremo quindi a collegare i quattro fili che abbiamo collocato sul PZEM-016 come segue:

PZEM-016 Wemos D1 Mini
Polo + 5 volt Pin 5v
Polo negativo Pin GND
Pin 2 GPIO3 (pin 21)
Pin 4 GPIO1 (pin 22)

Ci raccomandiamo di verificare bene le saldature e di non avere dei fili eccessivamente lunghi, in quanto potrebbero ostacolare la chiusura del case.

A questo punto è possibile chiudere il tutto. Un suggerimento potrebbe essere  quello di posizionare dei distanziali in plastica, così da poter creare una sorta di “rialzo” per il Wemos, ma in alternativa potremo procedere con della più comune colla a caldo. Posizioniamo quindi il Wemos sopra il PZEM, creando tramite la colla a caldo (in prossimità dei 4 angoli) dei sostegni per sollevarlo. Il consiglio è quello di non esagerare con la colla a caldo, così da non coprire eccessivamente la circuiteria del PZEM, il quale potrebbe altrimenti risentirne in quanto non più in grado di dissipare il calore.

PZEM-016 e Wemos
un dettaglio del montaggio del Wemos sulla board PZEM.

Eseguita quest’operazione, procediamo alla chiusura della scocca, la quale quindi ora conterrà sia il PZEM che il Wemos. Assicuriamoci che i fili, non eccessivamente lunghi, rientrino all’interno della sagoma del PZEM e procediamo a chiudere il case con la scocca rimossa a inizio guida. In questa fase ci sarà particolarmente utile l’aver fatto passare i fili dell’alimentazione del Wemos sotto la board del PZEM, come consigliato in precedenza.

Pinza amperometrica

Completato l’assemblaggio dell’unità PZEM+Wemos siamo pronti a collegarsi la pinza amperometrica, ovvero il sensore magnetico che, una volta collocato sul cavo di fase da monitorare, rileverà l’assorbimento.

Al PZEM-016 è necessario inviare:

  • l’alimentazione 230 volt di rete;
  • le connessioni alla pinza amperometrica.

Lo schema di connessione è dunque il seguente:

PZEM-016 - Connessioni e alimentazione

Posizionamento pinza amperometrica

È il momento di posizionare la pinza amperometrica sul cavo di fase da monitorare. Solitamente si sceglie il cavo di fase in ingresso all’impianto, ovvero sul quadro. Tramite un cercafase (ma vi consigliamo di sfruttare sempre l’intervento di un professionista) identificate il cavo e poi posizionategli intorno la pinza, aprendola e poi chiudendogliela attorno.


A questo punto, con il PZEM alimentato, il quale riceve le letture dalla pinza amperometrica e le “gira” al Wemos, il quale è al contempo da lui alimentato, abbiamo terminato il lavoro “fisico” previsto dal progetto.

ESPHome

ESPHome è un firmware “modulare” che consente, appunto, di installare sui dispositivi target (in questo caso il nostro Wemos) le componenti utili agli scopi prefissi “assemblate” in un unico compilato.

N.b. Se non si conosce questo firmware è necessario dare una veloce lettura alla scheda ad esso dedicata; diversamente non si comprenderanno gli aspetti che verranno spiegati in seguito e, fatalmente, si fallirà.

Nel caso di questo specifico progetto il componente ESPHome utile allo scopo è “Sensor“, il quale consente di definire, lato Home Assistant, le entità di tipo sensore che ci serviranno per le letture energetiche. Vengono inoltre configurati anche altri componenti minori (ma necessari) come per esempio “UART Bus“, per far comunicare il Wemos con la sonda PZEM, e altro.

La porzione aggiuntiva di configurazione YAML di ESPHome (la “ricetta” del nostro firmware) allo scopo del nostro progetto è la seguente:

logger:
  baud_rate: 0

uart:
  rx_pin: GPIO3
  tx_pin: GPIO1
  baud_rate: 9600
  stop_bits: 1

sensor:
  - platform: pzemac
    current:
      id: aac
      internal: true
      icon: "mdi:alpha-a-circle"
    voltage:
      id: vac
      internal: true
      icon: "mdi:alpha-v-circle"
    power:
      id: w
      internal: true
      icon: "mdi:alpha-w-circle"
    update_interval: 1s

#FINE PRIMA PARTE
#INIZIO SECONDA PARTE

  - platform: total_daily_energy
    name: "PZEM - Consumption"
    power_id: w
    filters:
      - multiply: 0.001
    unit_of_measurement: kWh
    icon: mdi:counter
    accuracy_decimals: 1

  - platform: template
    name: "PZEM - Ampere"
    lambda: |-
      if (id(aac).state) {
        return (id(aac).state);
      } else {
        return 0;
      }
    unit_of_measurement: A
    icon: "mdi:alpha-a-circle"
    update_interval: 2s

  - platform: template
    name: "PZEM - Volt"
    lambda: |-
      if (id(vac).state) {
        return (id(vac).state);
      } else {
        return 0;
      }
    unit_of_measurement: V
    icon: "mdi:alpha-v-circle"
    update_interval: 2s

  - platform: template
    name: "PZEM - Watt"
    lambda: |-
      if (id(w).state) {
        return (id(w).state);
      } else {
        return 0;
      }
    unit_of_measurement: W
    icon: "mdi:alpha-w-circle"
    update_interval: 2s

La configurazione proposta andrà ovviamente sommata alla parte di default, quella nella quale vengono indicate le credenziali di accesso Wi-Fi e altro.

Una configurazione tipo, completa, potrebbe essere come la seguente:

esphome:
  name: WEMOSPZEM
  platform: ESP8266
  board: nodemcuv2

wifi:
  ssid: "PROPRIA-Wi-Fi"
  password: "PASSWORD-Wi-Fi"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Blt2Wifi Fallback Hotspot"
    password: "PASSWORD_FALLBACK"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "PASSWORD_API"

ota:
  password: "PASSWORD_UPDATE_OTA"

logger:
  baud_rate: 0

uart:
  rx_pin: GPIO3
  tx_pin: GPIO1
  baud_rate: 9600
  stop_bits: 1

sensor:
  - platform: pzemac
    current:
      id: aac
      internal: true
      icon: "mdi:alpha-a-circle"
    voltage:
      id: vac
      internal: true
      icon: "mdi:alpha-v-circle"
    power:
      id: w
      internal: true
      icon: "mdi:alpha-w-circle"
    update_interval: 1s

  - platform: total_daily_energy
    name: "PZEM Consumption"
    power_id: w
    filters:
      - multiply: 0.001
    unit_of_measurement: kWh
    icon: mdi:counter
    accuracy_decimals: 1

  - platform: template
    name: "PZEM Ampere"
    lambda: |-
      if (id(aac).state) {
        return (id(aac).state);
      } else {
        return 0;
      }
    unit_of_measurement: A
    icon: "mdi:alpha-a-circle"
    update_interval: 2s

  - platform: template
    name: "PZEM Volt"
    lambda: |-
      if (id(vac).state) {
        return (id(vac).state);
      } else {
        return 0;
      }
    unit_of_measurement: V
    icon: "mdi:alpha-v-circle"
    update_interval: 2s

  - platform: template
    name: "PZEM Watt"
    lambda: |-
      if (id(w).state) {
        return (id(w).state);
      } else {
        return 0;
      }
    unit_of_measurement: W
    icon: "mdi:alpha-w-circle"
    update_interval: 2s
N.b. A prescindere, su qualsiasi configurazione ESPHome consigliamo sempre di includere alcuni componenti secondo noi sempre utili, come quelli illustrati su questa scheda.

Considerazioni

Una breve spiegazione del codice di cui sopra è da spiegare.

Nella prima parte del codice istruiamo il Wemos a interfacciarsi con la sonda PZEM tramite l’evocazione del componente “UART Bus“, la quale opportunamente configurata, fa funzionare la comunicazione; viene inoltre configurato il componente “Logger“, il quale fa sì che tutte le  letture rilevate dalla porta seriale (quindi dalla sonda) vengano successivamente trattate. 

Infine, vengono definiti dei primi sensori interni tramite il componente “Sensor”, ad uso interno del firmware (si noti la chiave “internal: true“), che servono per effettuare i calcoli di potenza ed energia.

Nella seconda parte, invece, vengono definite le entità che verranno poi esposte verso Home Assistant, dipicamente dei sensori fatti e finiti.

ATTENZIONE: dato che chi adotta ESPHome solitamente lo utilizza in abbinamento a Home Assistant abbiamo assunto che la configurazione del firmware ESPHome andasse effettuata in questa logica, e così abbiamo fatto. Chiunque volesse invece utilizzare questo dispositivo integrandolo su altri HUB personali che non supportino le API di ESPHome, allora la strada da percorrere è quella di integrare il codice da noi proposto con un blocco relativo al componente MQTT di ESPHome, cosa che consente di acquisire i dati tramite questo standard.

In pratica:

  1. il “logger” raccoglie le letture;
  2. i sensori interni le elaborano;
  3. i sensori “esterni” espongono i dati finali a Home Assistant.

Questo è un buon approccio anche perché, in caso di temporanea disconnessione Wi-Fi, alla riconnessione tutti i “dati persi” da Home Assistant verranno magicamente recuperati.

I sensori disponibili saranno quattro:

  • sensor.pzem_consumption (sensore giornaliero di energia);
  • sensor.pzem_watt (sensore istantaneo di potenza);
  • sensor.pzem_volt ( sensore istantaneo di voltaggio);
  • sensor.pzem_ampere (sensore istantaneo di corrente);
N.b. Le entità generate verso Home Assistant sono configurate in modo da poter essere immediatamente utilizzate anche col “pannello Energy”, per analizzare nel tempo gli andamenti storici delle varie misure.

Installazione

A questo punto si è pronti per la compilazione e la successiva installazione sul proprio PZEM.
Le tecniche per farlo sono diverse – tutto dipende ovviamente da dove si ha installato e in che modalità la suite ESPHome. 

CON DISPOSITIVO DI FABBRICA

Se il Wemos è originale, solitamente l’unica possibilità di installare il compilato ESPHome è utilizzando cavo USB/Micro-USB a collegare il computer che monta ESPHome e il Wemos, avendo cura di disconnettere l’alimentazione esterna (alla quale provvede, durante la programmazione, l’interfaccia USB). Collegare i due tramite il cavo e poi impostare la modalità di flash premendo il bottone preposto presente sull’unità.

A questo punto eseguire la compilazione del firmware seguendo una delle guide dedicate al tema in base alla propria modalità d’uso di ESPHome e alla propria installazione.

CON DiSPOSITIVO GIÀ DOTATO DI ESPHOME

In caso l’attuatore sia già dotato di firmware ESPHome, la quale precedente compilazione prevedesse il codice:

ota:
  password: "PASSWORD_UPDATE_OTA"

e  avesse lo stesso “name“, allora non sarà necessario il cavo, ma basterà avviare la compilazione del firmware provvedendo all’accensione normale dell’attuatore il quale, entrando nella stessa rete LAN (tramite Wi-Fi) del computer sul quale viene eseguito ESPHome, verrà aggiornato.

Integrazione Home Assistant

A questo punto basterà riavviare l’attuatore e provvedere all’integrazione delle sue funzionalità di BRIDGE/Gateway sul proprio HUB personale. In caso di utilizzi Home Assistant, la guida è questa:

Integrare componenti ESPHome a Home Assistant (via API)

Questa integrazione genererà, come da premesse, un’entità di tipo “Sensor” lato Home Assistant, le quali potranno direttamente essere utilizzate, manualmente o in modo automatico, per consultare le misure.

Integrazione altri HUB

Come spiegato sopra, dato che chi adotta ESPHome solitamente lo utilizza in abbinamento a Home Assistant abbiamo assunto che la configurazione del firmware ESPHome andasse effettuata in questa logica, e così abbiamo fatto. Chiunque volesse invece utilizzare questo dispositivo integrandolo su altri HUB personali che non supportino le API di ESPHome, allora la strada da percorrere è quella di integrare il codice da noi proposto con un blocco relativo al componente MQTT di ESPHome, cosa che consente di acquisire i dati tramite questo standard.


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.
Telegram News Channel