PiggyMeter
Este artigo mostra como construir um dispositivo para ler remotamente dados de um medidor elétrico (ou qualquer dispositivo com uma interface compatível).
Ele utiliza componentes amplamente disponíveis, software de código aberto e é compatível com o popular software de automação residencial, Home Assistant.
INFO
Um kit para montar um dispositivo funcional está disponível para compra no Tindie: PiggyMeter KIT.
Funcionalidades
- Suporta protocolos baseados em IEC62056-21
- Suporta protocolo SML passivo usando componente nativo ESPHome
- Múltiplos medidores: energia, água, térmico e mais
- Usa ESPHome de código aberto
- Comunicação sem fio via Wi-Fi
- Integra-se com Home Assistant
- Servidor web opcional
- Hardware barato ESP32-C3 ou ESP32-S2
- Design de case disponível para impressão 3D
Ele suporta medidores compatíveis com o padrão IEC62056-21 que funcionam nos modos A, B, C, D (mas não E). Para detalhes, veja componente IEC 62056-21.
Note que existem muitas variações do protocolo. Embora o medidor possa usar a mesma interface óptica, o formato do quadro de dados pode ser diferente.
Além disso, ele suporta medidores que usam o protocolo SML (Smart Message Language) usando o componente SML do ESPHome.
WARNING
Os padrões DLMS, M-Bus e ANSI C12.18/19 não são suportados pelo software.
Como verificar se o medidor é suportado?
O termo IEC 62056-21 é usado para múltiplos protocolos (com a mesma camada de hardware, mas codificação de dados diferente). O dispositivo suporta medidores que fornecem dados codificados em ASCII, algo assim:
console
1-0:15.8.1(00000009999.567*kWh)
1-0:15.8.2(00000000000.000*kWh)
1-0:15.8.3(00000000000.000*kWh)
1-0:15.8.4(00000000000.000*kWh)
O medidor deve ser compatível com o Padrão Internacional IEC 62056-21:2002.
Para o protocolo SML, procure o logotipo SML no medidor ou verifique o manual. O componente ESPHome só suporta modo passivo, ele não envia nenhuma solicitação ao medidor. Nesse modo, o medidor envia dados a cada poucos segundos.
Medidores relatados como compatíveis com PiggyMeter
A lista é criada com base nos relatos dos usuários. Não há garantia de que seja precisa.
- Apator Norax 3
- Apator Norax 1
- Apator Norax 1D via componente SML
- Pafal 12EA5
- Iskra MT372
- Iskra ME162
- Kastrup 382
- Landis+Gyr E350 ZMF110
- ZPA ZE110.D0
INFO
Sinta-se à vontade para enviar um e-mail para info@aquaticus.info se você conhece um medidor que funciona com o PiggyMeter mas não está listado acima.
Software alternativo
O hardware do PiggyMeter pode funcionar com muitos medidores diferentes que utilizam interface óptica. No entanto, o software atualmente suporta apenas um padrão, limitando praticamente a gama de medidores suportados.
Você pode tentar usar software alternativo que pode adicionar suporte a diferentes medidores. É importante notar que não há garantia de que funcionará perfeitamente com o PiggyMeter. Para suporte, entre em contato com o autor original.
- Módulo DLMS/COSEM Esphome https://github.com/viric/esphome-ziv
Lista de materiais
Parte | Descrição |
---|---|
CPU | Wemos C3 ou S2 Mini https://www.wemos.cc/en/latest/ |
Interface óptica | PiggyMeter PCB https://www.tindie.com/products/32082/ |
2×pino conector 1×4 | Raster 2,54mm; parte plástica deve ter 8,5 mm de altura |
Ímã de anel | ⌀30/⌀15×2mm |
Caixa | Caixa impressa em 3D https://github.com/aquaticus/piggymeter_case |
Arruela | Arruela impressa em 3D https://github.com/aquaticus/piggymeter_case |
Tampa | Tampa traseira impressa em 3D https://github.com/aquaticus/piggymeter_case |
Placa de CPU
Você precisa de uma placa com chip Espressif instalado e compatível com o pinout Wemos/Lolin. O fator chave é a localização de 4 pinos: GND
, VCC
, TX
e RX
.
O tamanho da PCB também é crítico. O estojo impresso em 3D corresponde apenas às placas (ou seus clones) listadas abaixo:
- Lolin/Wemos S2 mini
- Lolin/Wemos C3 mini
Em teoria, você pode usar qualquer outra placa de CPU com pinout compatível, notavelmente ESP32 e ESP8266 D1 mini. Mas, nesse caso, você deve projetar seu próprio estojo e modificar um pouco os arquivos de configuração (tipo de placa e pinos da porta serial).
Interface óptica
Um medidor emprega uma interface óptica compatível com o padrão IEC62056-21, comunicando-se com uma sonda via um diodo infravermelho e um fototransistor.
A interface está conectada a uma das portas seriais na placa de CPU. Claro que você também precisa de VCC e GND.
Solde 2 cabeçalhos de pinos. Você deve usar um cabeçalho de pinos de 8,5 mm de altura. O design do estojo acomoda essa altura, garantindo um ajuste adequado. Se a altura exceder essa dimensão, fechar a tampa pode apresentar desafios.
Estojo
Baixe os arquivos para impressora 3D em https://github.com/aquaticus/piggymeter_case. Use a versão V5 para o design mais recente.
O estojo é composto por três componentes:
- o estojo principal,
- uma arruela,
- e uma tampa.
Há três arquivos STL distintos disponíveis para cada componente, ou, alternativamente, um único arquivo 3fm incorporando todos os três elementos.
A carcaça atende aos requisitos da Sonda Óptica padrão IEC62056-21.
INFO
A carcaça possui uma pequena trava. Para fechá-la ou abri-la, você precisa usar um pouco de força.
Configurações recomendadas para impressão 3D
- Material: PLA
- Camada: 0,2 mm
- Sem suporte
Montagem
Organize os componentes dentro do estojo nesta ordem:
- Ímã
- Arruela
- Interface óptica
- Placa CPU
- Tampa
INFO
Assista à montagem no Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm
Programação para medidores IEC62056-21
Comece instalando o ESPHome.
Com base na sua placa CPU, selecione o arquivo de configuração apropriado. Além disso, faça ajustes manuais em certos parâmetros, como a senha do WiFi.
Obter arquivos de configuração
Clone o repositório git com os arquivos de configuração:
bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml
Criar arquivo secrets.yaml
Crie um arquivo secrets.yaml
dentro do diretório onde os arquivos de configuração estão localizados. Este arquivo conterá o nome da rede WiFi e sua senha correspondente.
yaml
# Home Assistant API encryption key
api_key: my_home_assistant_encryption_key
# OTA password
ota_pass: my_ota_password
# WiFi network name
wifi_ssid: my_network
# WiFi network password
wifi_pass: my_password
Modificar configuração do projeto
A configuração vem pré-definida com pontos de dados padrão para um medidor elétrico.
Sinta-se à vontade para ajustar a lista, especialmente se o seu medidor for diferente do tipo de medidor elétrico. Consulte o componente IEC 62056-21 para mais informações.
yaml
sensor:
- platform: iec62056
obis: 1-0:15.8.0
name: Absolute active energy total
unit_of_measurement: kWh
accuracy_decimals: 3
device_class: energy
state_class: total_increasing
Compilar e gravar o firmware
bash
esphome run piggymeter-s2-iec62056-21.yaml
O comando acima grava o firmware e mostra a saída do monitor. Por padrão, a interface lê dados de um medidor a cada 1 minuto.
TIP
Para a placa ESP32-S2, você deve pressionar o botão BOOT e depois o botão RESET na PCB para entrar no modo de programação. Além disso, você pode ver uma mensagem de erro após a gravação -- apenas ignore-a.
log
[12:21:27][D][iec62056.component:232]: Connection start
[12:21:27][D][binary_sensor:036]: 'Meter Connection Status': Sending state ON
[12:21:28][D][switch:013]: 'Internal LED' Turning ON.
[12:21:28][D][switch:056]: 'Internal LED': Sending state ON
[12:21:28][D][iec62056.component:174]: Meter identification: '/XXX6\2YYYYY'
[12:21:28][D][iec62056.component:407]: Meter reported protocol: C
[12:21:28][D][iec62056.component:410]: Meter reported max baud rate: 19200 bps ('6')
[12:21:28][D][iec62056.component:438]: Using negotiated baud rate 9600 bps.
[12:21:29][D][iec62056.component:470]: Switching to new baud rate 9600 bps ('5')
[12:21:29][D][iec62056.component:482]: Meter started readout transmission
[12:21:29][D][iec62056.component:524]: Data: 0-0:C.1.0(12345678)
[12:21:29][D][iec62056.component:524]: Data: 0-0:1.0.0(2000-01-01 20:10:30)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.0(00000001000.657*kWh)
[12:21:29][D][iec62056.component:620]: Set sensor 'Absolute active energy total' for OBIS '1-0:15.8.0'. Value: 1000.656982
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.1(00000002000.657*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.2(00000003000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.3(00000004000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.4(00000005000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:01)
Programação para medidores SML
Os primeiros passos são idênticos aos dos medidores IEC62056-21.
Após clonar o repositório e criar o arquivo secrets.yaml
, use os arquivos de configuração para medidores SML.
bash
esphome run piggymeter-s2-sml.yaml
Muito provavelmente, você precisará ajustar o arquivo de configuração para corresponder aos pontos de dados transmitidos pelo medidor. Também vale a pena verificar a taxa de transmissão e os bits de dados da porta serial.
Home Assistant
O dispositivo deve ser detectado automaticamente pelo Home Assistant. Caso contrário, você pode adicioná-lo manualmente clicando em Adicionar Integração e selecionando a integração ESPHome.
PiggyMeter expõe três grupos de itens:
Acionador de Leitura
Este acionador força o PiggyMeter a ler dados de um medidor fora do cronograma.
Status de Conexão do Medidor
O status Conectado indica que a interface está trocando dados com o medidor.
Sensores
Esta é uma lista de sensores definidos no arquivo de configuração.
Modo Autônomo
O PiggyMeter pode operar independentemente do Home Assistant, oferecendo a capacidade de ativar um servidor web. Este servidor exibe leituras de dados diretamente em um navegador web e oferece uma API REST simples.
Para ativar o servidor web, inclua as seguintes linhas no arquivo de configuração:
yaml
web_server:
port: 80
Mais informações sobre o servidor web podem ser encontradas na documentação do ESPHome.
Modificações
Por padrão, o dispositivo busca dados a cada minuto, e o LED interno é iluminado durante a transmissão.
Apenas um número limitado de códigos OBIS está definido no arquivo de configuração yaml. É altamente recomendável modificar a lista de sensores para corresponder a um medidor.
Embora os códigos OBIS sejam padronizados, os medidores podem transmitir diferentes números de códigos. Para verificar os códigos suportados pelo seu medidor, ative o log DEBUG
para o componente IEC62056-21 e analise a saída do log.
Diagnóstico e Problemas IEC62056-21
Esta seção é apenas para medidores IEC62056-21 (não SML).
Após gravar o firmware, o dispositivo tentará ler dados de um medidor após aproximadamente 15 segundos. Se a transmissão falhar, ele tentará novamente duas vezes a cada 15 segundos.
Você pode ajustar esses parâmetros configurando os tokens apropriados. Consulte a documentação do componente IEC62056-21 para mais detalhes.
É aconselhável mudar o nível de log padrão de DEBUG
para INFO
uma vez que o dispositivo tenha sido confirmado como funcionando corretamente.
Abaixo estão problemas comuns e suas respectivas soluções.
TIP
Certifique-se de que a sonda está firmemente presa ao medidor, alinhando a seta na sonda na direção para cima.
Nenhuma transmissão do medidor
log
[E][iec62056.component:268]: No transmission from meter.
Isso pode indicar:
- Mais comumente, a interface não está conectada a um medidor.
- A interface não está devidamente alinhada com a interface óptica de um medidor.
- O medidor não é compatível.
Certifique-se de que a interface óptica está posicionada paralelamente à superfície frontal da carcaça. Se o dispositivo funcionar quando conectado ao medidor sem a carcaça, mas não funcionar após ser inserido na carcaça, este pode ser o problema. Nesse caso, você também pode considerar ampliar os dois furos na carcaça.
Nem todos os sensores receberam dados
log
[E][iec62056.component:644]: Not all sensors received data from the meter. The first one: OBIS '1-0:72.7.0'. Verify sensor is defined with valid OBIS code.
Isso pode indicar dois problemas:
- O medidor não suporta o código OBIS que você configurou no arquivo yaml. Simplesmente remova o sensor com o código OBIS específico da configuração.
- Pode haver um erro de digitação ou definição incorreta do código OBIS para o sensor no arquivo de configuração. Verifique o código novamente.
O medidor transmite dados automaticamente, mas o dispositivo não recebe nada
Isso indica que o medidor suporta o modo D do IEC62056-21. Nesse modo, o medidor transmite dados autonomamente a cada poucos segundos sem exigir uma solicitação específica. Certifique-se de que a porta serial está configurada para alinhar com o formato de transmissão do medidor, tipicamente configurada em 9600 7E1 ou 2400 7E1 na maioria dos casos.
yaml
# 9600bps for mode D
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
Além disso, o Modo D deve ser ativado manualmente configurando mode_d=True
na configuração da plataforma.
yaml
# Ativar modo D
iec62056:
mode_d: True
Erros de checksum
log
[E][iec62056.component:504]: Falha na verificação BCC. Esperado 0x6b, obtido 0x14
Este erro sugere problemas de transmissão.
Normalmente, a velocidade de transmissão está excessivamente alta. Reduzir a taxa de baud máxima deve ajudar.
yaml
iec62056:
baud_rate_max : 4800
Identificação do medidor recebida, mas sem transmissão
log
[D][iec62056.component:174]: Identificação do medidor: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: O medidor está indicando o modo E, que não é suportado. Tentando modo C. Isso funcionará para medidores que suportam ambos os modos E e C.
[E][iec62056.component:268]: Nenhuma transmissão do medidor.
A string de identificação do medidor é recebida com sucesso, mas não há transmissão de dados. Além disso, o log exibe uma mensagem afirmando: "O medidor está indicando o modo E."
O medidor opera exclusivamente no modo E, que o PiggyMeter não suporta. Consequentemente, o software tenta mudar o medidor para o modo C, mas essa tentativa falha.
Se um medidor suporta ambos os modos E e C, o sistema deve funcionar corretamente.