Skip to content

Commit

Permalink
Metertype SDM120
Browse files Browse the repository at this point in the history
Added a new Type: SDM120, which reads far less data (only Phase A)
  • Loading branch information
mreschka committed Feb 10, 2018
1 parent 5141094 commit 6c82a0b
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/github.com/gonium/gosdm630/cmd/sdm630_httpd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ package main

import (
"github.com/gonium/gosdm630"
"gopkg.in/urfave/cli.v1"
"log"
"os"
"strconv"
"strings"
"time"

"gopkg.in/urfave/cli.v1"
)

const (
Expand Down Expand Up @@ -53,6 +54,7 @@ func main() {
Usage: `MODBUS device type and ID to query, separated by comma.
Valid types are:
"SDM" for Eastron SDM meters
"SDM120" for Eastron SDM120 (not C) meters
"JANITZA" for Janitza B-Series DIN-Rail meters
"DZG" for the DZG Metering GmbH DVH4013 DIN-Rail meter
Example: -d JANITZA:1,SDM:22,DZG:23`,
Expand Down Expand Up @@ -94,6 +96,10 @@ func main() {
meter = sdm630.NewMeter(sdm630.METERTYPE_SDM,
uint8(id), sdm630.NewSDMRoundRobinScheduler(),
DEFAULT_METER_STORE_SECONDS)
case sdm630.METERTYPE_SDM120:
meter = sdm630.NewMeter(sdm630.METERTYPE_SDM120,
uint8(id), sdm630.NewSDM120RoundRobinScheduler(),
DEFAULT_METER_STORE_SECONDS)
case sdm630.METERTYPE_DZG:
log.Println(`WARNING: The DZG DVH 4013 does not report the same
measurements as the other meters. Only limited functionality is
Expand Down
1 change: 1 addition & 0 deletions src/github.com/gonium/gosdm630/meter.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ type MeterState uint8
const (
METERTYPE_JANITZA = "JANITZA"
METERTYPE_SDM = "SDM"
METERTYPE_SDM120 = "SDM120"
METERTYPE_DZG = "DZG"
)

Expand Down
40 changes: 40 additions & 0 deletions src/github.com/gonium/gosdm630/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,46 @@ func (s *SDMRoundRobinScheduler) Produce(devid uint8) (retval []QuerySnip) {
return retval
}

// ####################################################################
// Round-Robin Scheduler for the Eastron SDM120 Devices
// ####################################################################
type SDM120RoundRobinScheduler struct {
}

func NewSDM120RoundRobinScheduler() *SDM120RoundRobinScheduler {
return &SDM120RoundRobinScheduler{}
}

func (s *SDM120RoundRobinScheduler) GetProbeSnip(devid uint8) (retval QuerySnip) {
retval = QuerySnip{DeviceId: devid, FuncCode: ReadInputReg,
OpCode: OpCodeSDML1Voltage, Value: math.NaN(), Description: "L1 Voltage (V)", IEC61850: "VolLocPhsA"}
return retval
}

func (s *SDM120RoundRobinScheduler) Produce(devid uint8) (retval []QuerySnip) {
retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg,
OpCode: OpCodeSDML1Voltage, Value: math.NaN(), Description: "L1 Voltage (V)", IEC61850: "VolLocPhsA"})
retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg, OpCode: OpCodeSDML1Current, Value: math.NaN(),
Description: "L1 Current (A)", IEC61850: "AmpLocPhsA"})

retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg, OpCode: OpCodeSDML1Power, Value: math.NaN(),
Description: "L1 Power (W)", IEC61850: "WLocPhsA"})

retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg, OpCode: OpCodeSDML1Cosphi, Value: math.NaN(),
Description: "L1 Cosphi", IEC61850: "AngLocPhsA"})

retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg, OpCode: OpCodeSDMTotalImport, Value: math.NaN(),
Description: "Total Import (kWh)", IEC61850: "TotkWhImport"})

retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg, OpCode: OpCodeSDMTotalExport, Value: math.NaN(),
Description: "Total Export (kWh)", IEC61850: "TotkWhExport"})

retval = append(retval, QuerySnip{DeviceId: devid, FuncCode: ReadInputReg, OpCode: OpCodeSDML1THDVoltageNeutral, Value: math.NaN(),
Description: "L1 Voltage to neutral THD (%)", IEC61850: "ThdVolPhsA"})

return retval
}

// ####################################################################
// Round-Robin Scheduler for the Janitza B23 DIN-Rail meters
// ####################################################################
Expand Down

0 comments on commit 6c82a0b

Please sign in to comment.