Some fixes to the locks status reporting; Added troubles
Some checks failed
Build and Push Docker Image / testing (1.24.x, ubuntu-latest) (push) Successful in 36s
Build and Push Docker Image / build-and-push (push) Has been cancelled

This commit is contained in:
2025-06-06 12:26:39 -04:00
parent d04dc8c38a
commit 1011c09b29

View File

@ -306,21 +306,22 @@ func (s *MySubaruClient) mySubaruConfigToMQTTHassioConfig(v *mysubaru.Vehicle) [
hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/engine_state/config`] = `{` + device + origin + topic + `"name":"Engine State","uniq_id":"` + v.Vin + `_engine_state","obj_id":"` + obj_id_prefix + `_engine_state","ic":"mdi:engine","stat_t":"mysubarumq/` + v.Vin + `/state","val_tpl":"{{value_json.engine_state}}"}` hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/engine_state/config`] = `{` + device + origin + topic + `"name":"Engine State","uniq_id":"` + v.Vin + `_engine_state","obj_id":"` + obj_id_prefix + `_engine_state","ic":"mdi:engine","stat_t":"mysubarumq/` + v.Vin + `/state","val_tpl":"{{value_json.engine_state}}"}`
hassioConfig[s.config.Hassio.Topics.Discovery+`/device_tracker/`+v.Vin+`/config`] = `{` + device + origin + `"name":"` + v.CarNickname + `","uniq_id":"` + v.Vin + `_device_tracker","obj_id":"` + obj_id_prefix + `","ic":"mdi:car-connected","json_attr_t":"mysubarumq/` + v.Vin + `/attr"}` hassioConfig[s.config.Hassio.Topics.Discovery+`/device_tracker/`+v.Vin+`/config`] = `{` + device + origin + `"name":"` + v.CarNickname + `","uniq_id":"` + v.Vin + `_device_tracker","obj_id":"` + obj_id_prefix + `","ic":"mdi:car-connected","json_attr_t":"mysubarumq/` + v.Vin + `/attr"}`
hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/troubles/config`] = `{` + device + origin + topic + `"name":"Troubles","uniq_id":"` + v.Vin + `_troubles","obj_id":"` + obj_id_prefix + `_troubles","ic":"mdi:car-wrench","stat_t":"mysubarumq/` + v.Vin + `/state","val_tpl":"{{value_json.troubles}}","unit_of_meas":""}` // homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/troubles/config
hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/troubles/config`] = `{` + device + origin + topic + `"name":"Troubles","uniq_id":"` + v.Vin + `_troubles","obj_id":"` + obj_id_prefix + `_troubles","ic":"mdi:car-wrench","stat_t":"mysubarumq/` + v.Vin + `/state","val_tpl":"{{value_json.troubles}}","json_attr_t":"mysubarumq/` + v.Vin + `/troubles/attr","unit_of_meas":""}`
for n, d := range v.Doors { for n, d := range v.Doors {
// homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/door_frontleft_status/config // homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/door_frontleft_status/config
position := d.Position + ` ` + d.SubPosition position := d.Position + ` ` + d.SubPosition
hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/`+n+`_status/config`] = `{` + device + origin + topic + `"name":"Door ` + position + ` Status","uniq_id":"` + v.Vin + n + `_status","obj_id":"` + obj_id_prefix + n + `_status","ic":"mdi:car-door","json_attr_t":"mysubarumq/` + v.Vin + `/doors/attr","json_attr_tpl":"{{value_json.` + n + `}}","stat_t":"mysubarumq/` + v.Vin + `/doors/state","val_tpl":"{{value_json.` + n + `}}"}` hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/`+n+`_status/config`] = `{` + device + origin + topic + `"name":"Door ` + position + ` Status","uniq_id":"` + v.Vin + `_` + n + `_status","obj_id":"` + obj_id_prefix + n + `_status","ic":"mdi:car-door","json_attr_t":"mysubarumq/` + v.Vin + `/doors/attr","json_attr_tpl":"{{value_json.` + n + `}}","stat_t":"mysubarumq/` + v.Vin + `/doors/state","val_tpl":"{{value_json.` + n + `}}"}`
} }
for n, w := range v.Windows { for n, w := range v.Windows {
// homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/window_frontleft/config // homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/window_frontleft/config
position := w.Position + ` ` + w.SubPosition position := w.Position + ` ` + w.SubPosition
hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/`+n+`/config`] = `{` + device + origin + topic + `"name":"Window ` + position + `","uniq_id":"` + v.Vin + n + `_status","obj_id":"` + obj_id_prefix + n + `_status","ic":"mdi:car-door","stat_t":"mysubarumq/` + v.Vin + `/windows/state","val_tpl":"{{value_json.` + n + `}}"}` hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/`+n+`/config`] = `{` + device + origin + topic + `"name":"Window ` + position + `","uniq_id":"` + v.Vin + `_` + n + `_status","obj_id":"` + obj_id_prefix + n + `_status","ic":"mdi:car-door","stat_t":"mysubarumq/` + v.Vin + `/windows/state","val_tpl":"{{value_json.` + n + `}}"}`
} }
for n, t := range v.Tires { for n, t := range v.Tires {
// homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/tire_frontleft_psi/config // homeassistant/sensor/mysubaru/VIN-NUMBER-HERE/tire_frontleft_psi/config
position := t.Position + ` ` + t.SubPosition position := t.Position + ` ` + t.SubPosition
hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/`+n+`_psi/config`] = `{` + device + origin + topic + `"name":"Tire ` + position + ` (Psi)","uniq_id":"` + v.Vin + n + `_psi","obj_id":"` + obj_id_prefix + n + `_psi","ic":"mdi:tire","stat_t":"mysubarumq/` + v.Vin + `/tires/state","val_tpl":"{{value_json.` + n + `}}","unit_of_meas":"psi"}` hassioConfig[s.config.Hassio.Topics.Discovery+`/sensor/`+v.Vin+`/`+n+`_psi/config`] = `{` + device + origin + topic + `"name":"Tire ` + position + ` (Psi)","uniq_id":"` + v.Vin + `_` + n + `_psi","obj_id":"` + obj_id_prefix + n + `_psi","ic":"mdi:tire","stat_t":"mysubarumq/` + v.Vin + `/tires/state","val_tpl":"{{value_json.` + n + `}}","unit_of_meas":"psi"}`
} }
topicState := `mysubarumq/` + v.Vin + `/ignition` topicState := `mysubarumq/` + v.Vin + `/ignition`
@ -370,14 +371,15 @@ func (s *MySubaruClient) mySubaruStatusToMQTTMessage(v *mysubaru.Vehicle) []*bus
var state = map[string]string{} var state = map[string]string{}
tank := "" tank := ""
if v.DistanceToEmpty.Percentage > 0 && 101 >= v.DistanceToEmpty.Percentage { if v.DistanceToEmpty.Percentage > 0 && 101 > v.DistanceToEmpty.Percentage {
tank = `"dist_to_empty_pc":` + strconv.Itoa(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 + `","troubles":"` + strconv.Itoa(len(v.Troubles)) + `"}` 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 + `","troubles":"` + strconv.Itoa(len(v.Troubles)) + `"}`
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 + `"}` 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 + `"}`
// Doors
doors := `{` doors := `{`
locks := `{}` locks := `{`
dq := len(v.Doors) dq := len(v.Doors)
dc := 1 dc := 1
for n, d := range v.Doors { for n, d := range v.Doors {
@ -394,6 +396,7 @@ func (s *MySubaruClient) mySubaruStatusToMQTTMessage(v *mysubaru.Vehicle) []*bus
state[`mysubarumq/`+v.Vin+`/doors/state`] = doors state[`mysubarumq/`+v.Vin+`/doors/state`] = doors
state[`mysubarumq/`+v.Vin+`/doors/attr`] = locks state[`mysubarumq/`+v.Vin+`/doors/attr`] = locks
// Windows
windows := `{` windows := `{`
wq := len(v.Windows) wq := len(v.Windows)
wc := 1 wc := 1
@ -407,6 +410,7 @@ func (s *MySubaruClient) mySubaruStatusToMQTTMessage(v *mysubaru.Vehicle) []*bus
windows = windows + `}` windows = windows + `}`
state[`mysubarumq/`+v.Vin+`/windows/state`] = windows state[`mysubarumq/`+v.Vin+`/windows/state`] = windows
// Tires
tires := `{` tires := `{`
tq := len(v.Tires) tq := len(v.Tires)
tc := 1 tc := 1
@ -420,6 +424,20 @@ func (s *MySubaruClient) mySubaruStatusToMQTTMessage(v *mysubaru.Vehicle) []*bus
tires = tires + `}` tires = tires + `}`
state[`mysubarumq/`+v.Vin+`/tires/state`] = tires state[`mysubarumq/`+v.Vin+`/tires/state`] = tires
// Vehicle Health Items
troubles := `{`
trq := len(v.Troubles)
trc := 1
for n, t := range v.Troubles {
troubles = troubles + `"` + n + `":"` + t.Description + `"`
if trc != trq {
troubles = troubles + `,`
}
trc++
}
troubles = `}`
state[`mysubarumq/`+v.Vin+`/troubles/attr`] = troubles
var msgs []*bus.Message var msgs []*bus.Message
for topic, payload := range state { for topic, payload := range state {
msgs = s.messages(topic, 0, false, payload, msgs) msgs = s.messages(topic, 0, false, payload, msgs)