Shelly: prefer meter over switch for measurements (#20835)

This commit is contained in:
Markus Thierolf 2025-04-24 17:45:35 +02:00 • committed by GitHub
parent f0547b17a3
commit c35a62cd94
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -145,10 +145,6 @@ func (c *gen2) execCmd(method string, enable bool, res any) error {
// CurrentPower implements the api.Meter interface
func (c *gen2) CurrentPower() (float64, error) {
switch {
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Apower, err
case c.hasEM1Endpoint():
res, err := c.em1status()
return res.ActPower, err
@ -157,6 +153,10 @@ func (c *gen2) CurrentPower() (float64, error) {
res, err := c.emstatus()
return res.TotalActPower, err
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Apower, err
default:
return 0, fmt.Errorf("unknown shelly model: %s", c.model)
}
@ -182,10 +182,6 @@ func (c *gen2) Enable(enable bool) error {
// TotalEnergy implements the api.Meter interface
func (c *gen2) TotalEnergy() (float64, error) {
switch {
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Aenergy.Total / 1000, err
case c.hasEM1Endpoint():
res, err := c.em1data()
return res.TotalActEnergy / 1000, err
@ -194,6 +190,10 @@ func (c *gen2) TotalEnergy() (float64, error) {
res, err := c.emdata()
return res.TotalAct / 1000, err
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Aenergy.Total / 1000, err
default:
return 0, fmt.Errorf("unknown shelly model: %s", c.model)
}
@ -202,10 +202,6 @@ func (c *gen2) TotalEnergy() (float64, error) {
// Currents implements the api.PhaseCurrents interface
func (c *gen2) Currents() (float64, float64, float64, error) {
switch {
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Current, 0, 0, err
case c.hasEM1Endpoint():
res, err := c.em1status()
return res.Current, 0, 0, err
@ -214,6 +210,10 @@ func (c *gen2) Currents() (float64, float64, float64, error) {
res, err := c.emstatus()
return res.ACurrent, res.BCurrent, res.CCurrent, err
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Current, 0, 0, err
default:
return 0, 0, 0, fmt.Errorf("unknown shelly model: %s", c.model)
}
@ -222,10 +222,6 @@ func (c *gen2) Currents() (float64, float64, float64, error) {
// Voltages implements the api.PhaseVoltages interface
func (c *gen2) Voltages() (float64, float64, float64, error) {
switch {
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Voltage, 0, 0, err
case c.hasEM1Endpoint():
res, err := c.em1status()
return res.Voltage, 0, 0, err
@ -234,6 +230,10 @@ func (c *gen2) Voltages() (float64, float64, float64, error) {
res, err := c.emstatus()
return res.AVoltage, res.BVoltage, res.CVoltage, err
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Voltage, 0, 0, err
default:
return 0, 0, 0, fmt.Errorf("unknown shelly model: %s", c.model)
}
@ -242,10 +242,6 @@ func (c *gen2) Voltages() (float64, float64, float64, error) {
// Powers implements the api.PhasePowers interface
func (c *gen2) Powers() (float64, float64, float64, error) {
switch {
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Apower, 0, 0, err
case c.hasEM1Endpoint():
res, err := c.em1status()
return res.ActPower, 0, 0, err
@ -254,6 +250,10 @@ func (c *gen2) Powers() (float64, float64, float64, error) {
res, err := c.emstatus()
return res.AActPower, res.BActPower, res.CActPower, err
case c.hasSwitchEndpoint():
res, err := c.switchstatus.Get()
return res.Apower, 0, 0, err
default:
return 0, 0, 0, fmt.Errorf("unknown shelly model: %s", c.model)
}