package electric import ( iotInterface "IotAdmin/iot/interface" "encoding/json" "fmt" ) type MeterADW300 struct { MeterElectric MeterADW300Other } type MeterADW300Other struct { PT int `json:"pt"` CT int `json:"ct"` } func NewMeterADW300(id string, time int, calc, cfg string) (iotInterface.MeterCalcHandler, error) { meter := &MeterADW300{ MeterElectric: MeterElectric{ MeterElectricBase: MeterElectricBase{ Id: id, Time: time, isClean: true, }, MeterElectricRef: MeterElectricRef{ PvRef: 380, LvRef: 220, }, }, MeterADW300Other: MeterADW300Other{ PT: 1, CT: 1, }, } if cfg == "" { meter.MeterElectricRef = MeterElectricRef{ PvRef: 380, LvRef: 220, } } else if err := json.Unmarshal([]byte(cfg), meter); err != nil { err = fmt.Errorf("ADW300配置参数解析失败: %s", err) return nil, err } if calc == "" { meter.isClean = true meter.PowerRate = CalcPowerRate{ MaxPower: 0, Count: 0, SumPower: 0, } meter.TotalEnergy = CalcDataEnergy{ Fq: 0, Tp: 0, Tq: 0, Fp: 0, } meter.DayTotalEnergy = CalcDataEnergy{ Fq: 0, Tp: 0, Tq: 0, Fp: 0, } meter.ClearDayEnergy() } else if err := json.Unmarshal([]byte(calc), meter); err != nil { err = fmt.Errorf("ADW300计算参数解析失败: %s", err) return nil, err } return meter, nil } func (m *MeterADW300) GetMeterData() interface{} { return m.MeterElectric } func (m *MeterADW300) SetMeterData(data interface{}) { meter, ok := data.(MeterElectric) if ok { m.MeterElectricBase = meter.MeterElectricBase } } func (mo *MeterADW300Other) GetStructData() interface{} { return mo }