New MySubaru version

This commit is contained in:
2025-06-04 13:39:55 -04:00
parent 740325201f
commit 31b65216a2
3 changed files with 12 additions and 13 deletions

View File

@ -9,14 +9,14 @@ import (
"os"
"strings"
ms "git.savin.nyc/alex/mysubaru/config"
msc "git.savin.nyc/alex/mysubaru/config"
"github.com/spf13/viper"
)
// Config .
type Config struct {
MQTT MQTT `json:"mqtt" yaml:"mqtt"`
MySubaru ms.MySubaru `json:"mysubaru" yaml:"mysubaru"`
MySubaru msc.MySubaru `json:"mysubaru" yaml:"mysubaru"`
Hassio Hassio `json:"hassio" yaml:"hassio"`
Listeners map[string]*Listener `json:"listeners" yaml:"listeners"`
Consul *Consul `json:"consul,omitempty" yaml:"consul,omitempty"`

5
go.mod
View File

@ -5,7 +5,7 @@ go 1.24
replace github.com/armon/go-metrics => github.com/hashicorp/go-metrics v0.5.3
require (
git.savin.nyc/alex/mysubaru v0.0.0-20250522040944-19134aa756e1
git.savin.nyc/alex/mysubaru v0.0.0-20250604165950-9783b483c9cd
github.com/eclipse/paho.mqtt.golang v1.5.0
github.com/hashicorp/consul/api v1.32.1
github.com/spf13/viper v1.20.1
@ -13,7 +13,6 @@ require (
)
require (
github.com/Jeffail/gabs/v2 v2.7.0 // indirect
github.com/armon/go-metrics v0.5.4 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fatih/color v1.18.0 // indirect
@ -38,7 +37,7 @@ require (
github.com/sagikazarmark/locafero v0.9.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.14.0 // indirect
github.com/spf13/cast v1.8.0 // indirect
github.com/spf13/cast v1.9.2 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect

View File

@ -17,6 +17,7 @@ import (
"git.savin.nyc/alex/mysubaru"
"git.savin.nyc/alex/mysubaru-mq/bus"
"git.savin.nyc/alex/mysubaru-mq/config"
msc "git.savin.nyc/alex/mysubaru/config"
)
// MySubaruClient is a client that connects to the MySubaru server by establishing tcp connection
@ -33,10 +34,6 @@ type MySubaruClient struct {
// NewMySubaruClient initialises and returns a MySubaru client
func NewMySubaruClient(id string, bus *bus.Bus, config *config.Config) *MySubaruClient {
if config == nil {
slog.Error("")
}
s := &MySubaruClient{
id: id,
bus: bus,
@ -60,7 +57,7 @@ func (s *MySubaruClient) Type() string {
func (s *MySubaruClient) Init(log *slog.Logger) error {
s.log = log
mys, err := mysubaru.New(log, &s.config.MySubaru)
mys, err := mysubaru.New(&msc.Config{MySubaru: s.config.MySubaru, TimeZone: s.config.Timezone, Logger: s.log})
if err != nil {
s.log.Error("couldn't connect to MySubaru server", "error", err.Error())
}
@ -285,7 +282,7 @@ func (s *MySubaruClient) mySubaruConfigToMQTTHassioConfig(v *mysubaru.Vehicle) [
var hassioConfig = map[string]string{}
// availability := `{"avty":["{"topic":"mysubaru/` + v.Vin + `"}"]}`
origin := `"o":{"name":"MySubaruMQ","sw":"1.0.1","url":"https://www.git.savin.nyc/alex/mysubaru-mq"},`
origin := `"o":{"name":"MySubaruMQ","sw":"1.0.1","url":"https://git.savin.nyc/alex/mysubaru-mq"},`
// availability := `"avty":[{"t":"musubarymq/status"}],"avty_t":"{{value_json.value}}",`
device := `"dev":{"ids":["` + v.Vin + `"],"name":"` + v.CarNickname + `","mf":"Subaru Corp.","mdl":"` + v.CarNickname + `","hw":"` + v.ModelCode + `"},` // TODO chnage model to the proper one
obj_id_prefix := strings.Replace(strings.ToLower(v.CarNickname), " ", "_", -1)
@ -348,7 +345,6 @@ func (s *MySubaruClient) mySubaruConfigToMQTTHassioConfig(v *mysubaru.Vehicle) [
msgs = s.messages(topic, 1, true, payload, msgs)
s.log.Debug("hassio mqtt configuration", "topic", string(topic), "payload", string(payload))
}
return msgs
}
@ -356,7 +352,11 @@ func (s *MySubaruClient) mySubaruConfigToMQTTHassioConfig(v *mysubaru.Vehicle) [
func (s *MySubaruClient) mySubaruStatusToMQTTMessage(v *mysubaru.Vehicle) []*bus.Message {
var state = map[string]string{}
state[`mysubarumq/`+v.Vin+`/state`] = `{"odometer_km":` + strconv.Itoa(v.Odometer.Kilometers) + `,"odometer_mi":` + strconv.Itoa(v.Odometer.Miles) + `,"dist_to_empty_km":` + strconv.Itoa(v.DistanceToEmpty.Kilometers) + `,"dist_to_empty_mi":` + strconv.Itoa(v.DistanceToEmpty.Miles) + `,"dist_to_empty_pc":` + strconv.Itoa(v.DistanceToEmpty.Percentage) + `,"consumption_us":` + fmt.Sprintf("%.2f", v.FuelConsumptionAvg.MPG) + `,"consumption_eu":` + fmt.Sprintf("%.2f", v.FuelConsumptionAvg.LP100Km) + `,"engine_state":"` + v.EngineState + `"}`
tank := ""
if v.DistanceToEmpty.Percentage > 0 && 101 >= v.DistanceToEmpty.Percentage {
tank = `"dist_to_empty_pc":` + strconv.Itoa(v.DistanceToEmpty.Percentage) + `,`
}
state[`mysubarumq/`+v.Vin+`/state`] = `{` + tank + `"odometer_km":` + strconv.Itoa(v.Odometer.Kilometers) + `,"odometer_mi":` + strconv.Itoa(v.Odometer.Miles) + `,"dist_to_empty_km":` + strconv.Itoa(v.DistanceToEmpty.Kilometers) + `,"dist_to_empty_mi":` + strconv.Itoa(v.DistanceToEmpty.Miles) + `,"consumption_us":` + fmt.Sprintf("%.2f", v.FuelConsumptionAvg.MPG) + `,"consumption_eu":` + fmt.Sprintf("%.2f", v.FuelConsumptionAvg.LP100Km) + `,"engine_state":"` + v.EngineState + `"}`
state[`mysubarumq/`+v.Vin+`/attr`] = `{"source_type":"gps","latitude":` + fmt.Sprintf("%.6f", v.GeoLocation.Latitude) + `,"longitude":` + fmt.Sprintf("%.6f", v.GeoLocation.Longitude) + `,"course":` + strconv.Itoa(v.GeoLocation.Heading) + `,"speed":` + fmt.Sprintf("%.2f", v.GeoLocation.Speed) + `,"friendly_name":"` + v.CarNickname + `"}`
var msgs []*bus.Message