Forked from andyleap/gist:01601cc9cdf7d3708bb63d5867afc484
Created
February 20, 2018 01:44
-
-
Save stephane-berube/e989391133492809779657e9e312991c to your computer and use it in GitHub Desktop.
Power Monitoring
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Based on: https://gist.github.com/andyleap/01601cc9cdf7d3708bb63d5867afc484 | |
// powermon project main.go | |
package main | |
import ( | |
"flag" | |
"fmt" | |
"io" | |
"log" | |
"time" | |
"net" | |
"github.com/bemasher/rtlamr/parse" | |
"github.com/bemasher/rtlamr/scmplus" | |
"github.com/bemasher/rtltcp" | |
"github.com/influxdata/influxdb/client/v2" | |
) | |
var receiver = &rtltcp.SDR{} | |
func main() { | |
receiver.RegisterFlags() | |
flag.Parse() | |
p, _ := parse.NewParser("scm+", 72, 1) | |
addr := &net.TCPAddr {IP:net.IPv4(127,0,0,1), Port: 7373} | |
receiver.Connect(addr) | |
receiver.HandleFlags() | |
cfg := p.Cfg() | |
c, _ := client.NewHTTPClient(client.HTTPConfig{ | |
Addr: "http://localhost:8086", | |
Username: "", | |
Password: "", | |
}) | |
receiver.SetCenterFreq(cfg.CenterFreq) | |
receiver.SetSampleRate(uint32(cfg.SampleRate)) | |
block := make([]byte, p.Cfg().BlockSize2) | |
lastRead := map[uint32]uint32{} | |
var tags map[string]string | |
tags = make(map[string]string) | |
for { | |
// Read new sample block. | |
_, err := io.ReadFull(receiver, block) | |
if err != nil { | |
log.Fatal("Error reading samples: ", err) | |
} | |
indices := p.Dec().Decode(block) | |
for _, pkt := range p.Parse(indices) { | |
data := pkt.(scmplus.SCM) | |
// Print received data | |
log.Println(pkt.MeterID(), data.Consumption) | |
last := lastRead[pkt.MeterID()] | |
if last != data.Consumption { | |
tags["meterID"] = fmt.Sprint(pkt.MeterID()) | |
fields := map[string]interface{}{ | |
"consumption": float64(data.Consumption) / 100, | |
"meterID": fmt.Sprint(pkt.MeterID()), | |
} | |
bp, _ := client.NewBatchPoints(client.BatchPointsConfig{ | |
Database: "water", | |
Precision: "s", | |
}) | |
p, _ := client.NewPoint("consumption", tags, fields, time.Now()) | |
bp.AddPoint(p) | |
err := c.Write(bp) | |
if err != nil { | |
log.Println(err) | |
} | |
lastRead[pkt.MeterID()] = data.Consumption | |
} | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment