Esta es una biblioteca de Golang para leer los datos P1 de un llamado medidor de energía inteligente , que se utiliza principalmente en los Países Bajos. P1 es el Protocol Dutch Power Grid Companies diseñadas juntas y se describe en NetbeHeernederland.nl. Los medidores inteligentes que se están implementando en Bélgica implementan el mismo protocolo, pero las compañías de redes eléctricas definieron algunos tipos de datos adicionales. Estos tipos se definen en la especificación E-MUCS H.
Para leer los datos de P1, necesitará algo como un cable P1 a USB. El puerto P1 es esencialmente un puerto serie donde los datos (un llamado telegrama P1) se arrojan 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 )
}
}
}
}En el ejemplo/ carpeta hay una aplicación de ejemplo que recopila métricas relevantes y las ofrece a través de un punto final HTTP compatible con Prometheus para rasparse.
El proyecto SmartMeter de Marcel de Graaf me inspiró a escribir algo como esto. Me gusta su trabajo, pero estaba buscando una biblioteca más conectable en lugar de una aplicación real. También hay muchos proyectos de Python con soporte P1 que dieron alguna idea.