diff --git a/cmd/config.go b/cmd/config.go index 21af43a54..9b1927f37 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -29,6 +29,7 @@ type config struct { Log string SponsorToken string Telemetry bool + Plant string // telemetry plant id Metrics bool Profile bool Levels map[string]string diff --git a/cmd/setup.go b/cmd/setup.go index 0dbc50bd1..b1dcfd1a7 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -61,7 +61,7 @@ func configureEnvironment(conf config) (err error) { // setup telemetry if err == nil && conf.Telemetry { - err = telemetry.Create(sponsor.Token) + err = telemetry.Create(sponsor.Token, conf.Plant) } // setup mqtt client listener diff --git a/util/telemetry/charging.go b/util/telemetry/charging.go index 6608c14b6..88e889ad4 100644 --- a/util/telemetry/charging.go +++ b/util/telemetry/charging.go @@ -8,30 +8,42 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/util/sponsor" + "github.com/panta/machineid" ) +const api = "https://api.evcc.io" + var ( - api = "https://api.evcc.io" - Enabled bool + Enabled bool + instanceID string ) -func Create(token string) error { +func Create(token, instance string) error { if token == "" { return errors.New("telemetry requires sponsorship") } Enabled = true + instanceID = instance + + if mid, err := machineid.ProtectedID("evcc-api"); err == nil && instanceID == "" { + instanceID = mid + } + return nil } func UpdateChargeProgress(log *util.Logger, power, deltaCharged, deltaGreen float64) { log.DEBUG.Printf("telemetry: charge: Δ%.0f/%.0fWh @ %.0fW", deltaGreen*1e3, deltaCharged*1e3, power) - data := ChargeProgress{ - ChargePower: power, - GreenPower: power * deltaGreen / deltaCharged, - ChargeEnergy: deltaCharged, - GreenEnergy: deltaGreen, + data := InstanceChargeProgress{ + InstanceID: instanceID, + ChargeProgress: ChargeProgress{ + ChargePower: power, + GreenPower: power * deltaGreen / deltaCharged, + ChargeEnergy: deltaCharged, + GreenEnergy: deltaGreen, + }, } uri := fmt.Sprintf("%s/v1/charge", api) diff --git a/util/telemetry/types.go b/util/telemetry/types.go index 62e429c69..a3260c993 100644 --- a/util/telemetry/types.go +++ b/util/telemetry/types.go @@ -1,5 +1,10 @@ package telemetry +type InstanceChargeProgress struct { + InstanceID string `json:"instanceId"` + ChargeProgress +} + type ChargeProgress struct { ChargePower float64 `json:"chargePower"` GreenPower float64 `json:"greenPower"`