diff --git a/kasa/emeter.go b/kasa/emeter.go index 0ffec59..25d136a 100644 --- a/kasa/emeter.go +++ b/kasa/emeter.go @@ -8,15 +8,35 @@ type GetRealtimeRequest struct { } type GetRealtimeResponse struct { - Current float64 `mapstructure:"current_ma"` - Voltage float64 `mapstructure:"voltage_mv"` - Power float64 `mapstructure:"power_mw"` - Total float64 `mapstructure:"total_wh"` + // some fw/hw may use the following keys + Current float64 `mapstructure:"current"` // unit is A + Voltage float64 `mapstructure:"voltage"` // unit is V + Power float64 `mapstructure:"power"` // unit is W + Total float64 `mapstructure:"total"` // unit is kWh + + // some may use these + CurrentmA float64 `mapstructure:"current_ma"` + VoltagemV float64 `mapstructure:"voltage_mv"` + PowermW float64 `mapstructure:"power_mw"` + TotalWh float64 `mapstructure:"total_wh"` +} + +func (r *GetRealtimeResponse) Normalize() { + if r.TotalWh != -1 { + r.Current = r.CurrentmA / 1000 + r.Voltage = r.VoltagemV / 1000 + r.Power = r.PowermW / 1000 + r.Total = r.TotalWh / 1000 + } } func (s *KasaClientEmeterService) GetRealtime() (*GetRealtimeResponse, error) { - var response GetRealtimeResponse + response := GetRealtimeResponse{ + TotalWh: -1, + } err := s.c.RPC("emeter", "get_realtime", GetRealtimeRequest{}, &response) + response.Normalize() + return &response, err } diff --git a/kasa/kasa.go b/kasa/kasa.go index aa4d796..99f5538 100644 --- a/kasa/kasa.go +++ b/kasa/kasa.go @@ -13,7 +13,6 @@ import ( type KasaClient struct { addr string model string - conn *net.Conn } type KasaClientConfig struct {