Esta biblioteca funciona apenas com firmare versão 1.7.14 ou inferior.
Nas versões de firmware mais recentes, a Eon desativou a API local e tornou esta biblioteca obsoleta, MUITO obrigado à Eon! ?
Leia mais na edição #1
Olá e seja bem-vindo! Clique no botão abaixo se você gosta desta biblioteca e deseja apoiar meu trabalho. Muito café é consumido como desenvolvedor de software, sabe?
Escusado será dizer que isto é completamente voluntário.
Uma biblioteca simples para a API integrada E.ON Elna escrita em Python 3. Elna é um dispositivo inteligente de medição de energia conectado à porta HAN (Home Area Network) do medidor de eletricidade usando um conector RJ12.
Esta biblioteca usa a API integrada no dispositivo Elna para coletar informações sobre seu consumo e/ou produção de energia diretamente do próprio dispositivo.
Elna é baseado em hardware da Net2Grid, então provavelmente também é compatível com mais dispositivos da família Net2Grid. Qualquer feedback é bem-vindo.
Aqui está um pequeno aplicativo de demonstração de linha de comando que mostra as informações que podem ser obtidas do dispositivo.
Confira o código-fonte da demonstração aqui: smartmeter-demo.py.
Este é um aplicativo de demonstração mais real, com muita semelhança com um aplicativo CLI bem conhecido. Ele verificará seu consumo momentâneo de energia (mpc) e enviará para o console. Uma vez pressionado CTRL+C, ele mostra o consumo de energia mínimo, máximo e médio calculado, bem como o tempo de ida e volta dos pacotes enviados para Elna e muito mais.
O código fonte está disponível aqui: powerping-demo.py.
Configure o ambiente virtual:
virtualenv venv
source venv/bin/activate
Instale a versão mais recente com pip
:
pip install elnasmartmeter
Para usar a biblioteca você precisa saber o endereço IP do dispositivo Elna. Você pode encontrá-lo no servidor DHCP do seu roteador (ou onde quer que esteja executando o servidor DHCP). O endereço MAC do Elna está impresso na parte traseira do dispositivo.
from elna import smartmeter
# Connect the library to the Elna device
meter = smartmeter . Connect ( '192.168.0.10' )
# Get general information
info = meter . get_info ()
# Get power readings
electricity = meter . get_electricity ()
# Get WLAN information
wlan = meter . get_wlan_info ()
É tão simples quanto isso obter o consumo/produção de energia da sua casa. Daqui a pouco veremos como acessar a informação através dos objetos info
e electricity
.
Todos os métodos que podem ser chamados da biblioteca lançarão exceções em caso de falha. Uma lista completa de exceções pode ser encontrada aqui.
from elna import smartmeter
from elna . exceptions import *
...
try :
info = meter . get_info ()
except NewConnectionError as e :
print ( e )
Os objetos que representam várias entidades na biblioteca podem ser gerados com o método print()
para facilitar a inspeção de suas propriedades.
Por exemplo, você pode gerar as propriedades de um objeto Information
passando-o para o método print()
:
print ( info )
# Output: <class 'elna.classes.Information'>: {'id': '01ab:0200:00cd:03ef', 'manufacturer': 'NET2GRID', 'model': 'SBWF4602', 'firmware': '1.7.14', 'hardware': 1, 'batch': 'HMX-P0D-123456'}
O mesmo vale para todas as classes da biblioteca: Information
, Electricity
, Power
e WLANInformation
.
Existem dois dados que podem ser obtidos com esta biblioteca: Information
gerais do dispositivo e estatísticas Power
.
Para obter informações gerais do dispositivo, basta chamar o método get_info()
.
info = meter . get_info ()
Acesse os valores através das propriedades da classe:
info . id # Returns the device ID : '01ab:0200:00cd:03ef' (for example).
info . manufacturer # Returns the manufacturer : 'NET2GRID'
info . model # Returns the model : 'SBWF4602'
info . firmware # Returns the firmware version : '1.7.14'
info . hardware # Returns the hardware version : 1
info . batch # Returns the batch number : 'HMX-P0D-123456'
Para obter as leituras de potência, chamamos o método get_electricity()
. Essas leituras são um pouco mais complexas já que as informações coletadas do dispositivo Elna são divididas em subclasses, mas não são tão complicadas:
electricity = meter . get_electricity ()
Obtenha o consumo de energia atual :
electricity . now . key # Returns the string : 'now'
electricity . now . value # Returns the power : 453 (for example).
electricity . now . unit # Returns the unit : 'W' (as in Watt)
electricity . now . timestamp # Returns a timestamp : '2022-12-24 13:37:00'
Obtenha o consumo mínimo de energia no período:
electricity . minimum . key # Returns the string : 'minimum'
electricity . minimum . value # Returns the power : 202 (for example).
electricity . minimum . unit # Returns the unit : 'W' (as in Watt)
electricity . minimum . timestamp # Returns a timestamp : '2022-12-13 13:37:00'
Obtenha o consumo máximo de energia no período:
electricity . maximum . key # Returns the string : 'maximum'
electricity . maximum . value # Returns the power : 14320 (for example).
electricity . maximum . unit # Returns the unit : 'W' (as in Watt)
electricity . maximum . timestamp # Returns a timestamp : '2022-12-31 13:37:00'
O intervalo de tempo (período) em que os valores mínimo e máximo foram registrados é desconhecido (para mim).
Obtenha o poder importado . Esta seria a potência total entrando na casa:
electricity . imported . key # Returns the string : 'imported'
electricity . imported . value # Returns the power : 12345678 (for example).
electricity . imported . unit # Returns the unit : 'Wh' (as in Watt hours)
electricity . imported . timestamp # Returns a timestamp : '2022-12-31 13:37:00'
Obtenha a energia exportada . Esta seria a potência total que sai da casa:
electricity . exported . key # Returns the string : 'exported'
electricity . exported . value # Returns the power : 87654321 (for example).
electricity . exported . unit # Returns the unit : 'Wh' (as in Watt hours)
electricity . exported . timestamp # Returns a timestamp : '2022-12-31 13:37:00'
Confira a demonstração do smartmeter na parte superior para experimentá-lo.
Também podemos obter as informações WLAN do dispositivo chamando o método get_wlan_info()
. O dispositivo pode atuar como um cliente sem fio (estação) e um ponto de acesso (AP), dependendo de estar conectado à sua rede WiFi ou não.
wlan = meter . get_wlan_info ()
Acesse as informações da WLAN através das propriedades de classe do objeto:
wlan . mode # Returns the current WLAN mode
wlan . ap_ssid # Returns the Access Point SSID
wlan . ap_key # Returns the Access Point Password
wlan . client_ssid # Returns the SSID of the AP Elna is connected to
wlan . join_status # Returns the number of clients joined to the Elna AP
wlan . mac # Returns the MAC address currently in use
wlan . ip # Returns the IP address
wlan . subnet # Returns the Subnet mask
wlan . gateway # Returns the Default gateway
wlan . dns # Returns the Primary DNS server
wlan . dnsalt # Returns the Secondary DNS server
wlan . n2g_id # Returns the Net2Grid ID number
wlan . sta_mac # Returns the MAC address of the WLAN Station
wlan . ap_mac # Returns the MAC address of the Access Point
wlan . eth_mac # Returns the Ethernet MAC address (?)
Nota: As descrições que seguem as propriedades da WLAN acima são estimativas.
Os nomes de produtos, marcas comerciais e marcas registradas neste repositório são de propriedade de seus respectivos proprietários e são usados pelo autor apenas para fins de identificação. O uso desses nomes, marcas registradas e marcas não implica endosso ou afiliação.