Handle phase measurement errors

This commit is contained in:
andig 2022-12-29 13:27:10 +01:00
parent aed17532b0
commit 68f28cbd34

View file

@ -437,47 +437,39 @@ func (site *Site) updateMeters() error {
err := retryMeter("grid", site.gridMeter, &site.gridPower)
// voltages
if phaseMeter, ok := site.gridMeter.(api.MeterVoltage); err == nil && ok {
u1, u2, u3, err := phaseMeter.Voltages()
if err == nil {
site.log.DEBUG.Printf("grid voltages: %.3gV", []float64{u1, u2, u3})
site.publish("gridVoltages", []float64{u1, u2, u3})
} else {
site.log.ERROR.Printf("grid meter voltages: %v", err)
}
}
// powers
var p1, p2, p3 float64
if phaseMeter, ok := site.gridMeter.(api.MeterPower); err == nil && ok {
p1, p2, p3, err = phaseMeter.Powers()
if err == nil {
site.log.DEBUG.Printf("grid powers: %.3gW", []float64{p1, p2, p3})
site.publish("gridPowers", []float64{p1, p2, p3})
phases := []float64{p1, p2, p3}
site.log.DEBUG.Printf("grid powers: %.0fW", phases)
site.publish("gridPowers", phases)
} else {
site.log.ERROR.Printf("grid meter powers: %v", err)
err = fmt.Errorf("grid powers: %w", err)
}
}
// currents
if phaseMeter, ok := site.gridMeter.(api.MeterCurrent); err == nil && ok {
i1, i2, i3, err := phaseMeter.Currents()
var i1, i2, i3 float64
i1, i2, i3, err = phaseMeter.Currents()
if err == nil {
site.log.DEBUG.Printf("grid currents: %.3gA", []float64{util.SignFromPower(i1, p1), util.SignFromPower(i2, p2), util.SignFromPower(i3, p3)})
site.publish("gridCurrents", []float64{util.SignFromPower(i1, p1), util.SignFromPower(i2, p2), util.SignFromPower(i3, p3)})
phases := []float64{util.SignFromPower(i1, p1), util.SignFromPower(i2, p2), util.SignFromPower(i3, p3)}
site.log.DEBUG.Printf("grid currents: %.3gA", phases)
site.publish("gridCurrents", phases)
} else {
site.log.ERROR.Printf("grid meter currents: %v", err)
err = fmt.Errorf("grid currents: %w", err)
}
}
// grid energy
if energyMeter, ok := site.gridMeter.(api.MeterEnergy); ok {
// energy
if energyMeter, ok := site.gridMeter.(api.MeterEnergy); err == nil && ok {
val, err := energyMeter.TotalEnergy()
if err == nil {
site.publish("gridEnergy", val)
} else {
site.log.ERROR.Println(fmt.Errorf("grid meter energy: %v", err))
site.log.ERROR.Printf("grid energy: %v", err)
}
}