Esta é uma biblioteca de Golang para ler dados P1 de um medidor de energia inteligente , usado principalmente na Holanda. P1 é o Protocolo Holandês Empresas de Grid Power projetadas juntas e é descrito em Netbeheererderland.nl. Os medidores inteligentes que estão sendo implantados na Bélgica implementam o mesmo protocolo, mas alguns tipos adicionais de dados foram definidos pelas empresas de rede elétrica. Esses tipos são definidos na especificação E-MUCS H.
Para ler os dados P1, você precisará de algo como um cabo P1 para USB. A porta P1 é essencialmente uma porta serial onde os dados (um telegrama P1) são despejados a cada segundo.
package main
import (
"fmt"
"github.com/skoef/gop1"
)
func main () {
// open a new reader to given USB serial device
p1 , err := gop1 . New (gop1. P1Config {
USBDevice : "/dev/ttyUSB0" ,
})
if err != nil {
panic ( err )
}
// start reading data
// this will send new telegrams to the channel p1.Incoming
p1 . Start ()
for telegram := range p1 . Incoming {
// loop over the objects in the telegram to find types we're interested in
for _ , obj := range telegram . Objects {
switch obj . Type {
case gop1 . OBISTypeInstantaneousPowerDeliveredL1 :
fmt . Printf ( "actual power usage: %s %s n " , obj . Values [ 0 ]. Value , obj . Values [ 0 ]. Unit )
}
}
}
}No exemplo/ pasta, há um exemplo de aplicativo que coleta métricas relevantes e oferece a elas um terminal HTTP compatível com Prometheus para raspar.
O projeto SmartMeter da Marcel de Graaf me inspirou a escrever algo assim. Gosto do trabalho dele, mas estava procurando uma biblioteca mais flugable do que um aplicativo real. Também existem muitos projetos Python por aí com suporte P1 que deu algumas dicas.