Skip to content

Instantly share code, notes, and snippets.

@mschae
Last active January 8, 2025 18:01
Show Gist options
  • Save mschae/d7d30d5302a0a69e75e13060ebb8081f to your computer and use it in GitHub Desktop.
Save mschae/d7d30d5302a0a69e75e13060ebb8081f to your computer and use it in GitHub Desktop.
Autodiscovery for weconnect-mqtt

Very rough autodiscovery message to be used with weconnect-mqtt and Home Assistant.

One needs to replace the follwing placeholders:

  • {VIN} with the vehicel's VIN
  • {NAME} with a name (e.g. "ID.7")
  • {BRAND} with the car's brand (e.g. "Volkswagen")
  • {PREFIX} with a prefix for ids if one wants that.

Can be used like so:

curl -sS https://gist.githubusercontent.com/mschae/d7d30d5302a0a69e75e13060ebb8081f/raw/47a90b5e990fa0ec42f467d2ae6f0e75ee45b21b/auto
discovery.json | \
  sed 's/{VIN}/SOMEVIN/g' | \
  sed 's/{PREFIX}/id0_/g' | \
  sed 's/{NAME}/ID.0/g' | \
  sed 's/{BRAND}/Volkswagen/g' | \
  mosquitto_pub -h <host> -t homeassistant/device/<someid>/config -r -s
{
"dev": {
"identifiers": ["{VIN}"],
"name": "{NAME}",
"mf": "{BRAND}"
},
"o": {
"name": "weconnect-mqtt",
"url": "https://github.com/tillsteinbach/WeConnect-mqtt"
},
"cmps": {
"{PREFIX}image": {
"p": "image",
"name": "image",
"unique_id": "{PREFIX}image",
"image_topic": "weconnect/vehicles/{VIN}/pictures/car",
"content-type": "image/png"
},
"{PREFIX}status_image": {
"p": "image",
"name": "status image",
"unique_id": "{PREFIX}status_image",
"image_topic": "weconnect/vehicles/{VIN}/pictures/status",
"content-type": "image/png"
},
"{PREFIX}status_image_with_badge": {
"p": "image",
"name": "status image with badge",
"unique_id": "{PREFIX}status_image_with_badge",
"image_topic": "weconnect/vehicles/{VIN}/pictures/statusWithBadge",
"content-type": "image/png"
},
"{PREFIX}car_with_badge": {
"p": "image",
"name": "car with badge",
"unique_id": "{PREFIX}car_with_badge",
"image_topic": "weconnect/vehicles/{VIN}/pictures/carWithBadge",
"content-type": "image/png"
},
"{PREFIX}isonline": {
"p": "binary_sensor",
"name": "is online",
"icon": "mdi:car-connected",
"device_class": "connectivity",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/readiness/readinessStatus/connectionState/isOnline",
"unique_id": "{PREFIX}isonline",
"payload_on": "True",
"payload_off": "False"
},
"{PREFIX}isactive": {
"p": "binary_sensor",
"name": "is active",
"device_class": "running",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/readiness/readinessStatus/connectionState/isActive",
"unique_id": "{PREFIX}isactive",
"payload_on": "True",
"payload_off": "False"
},
"{PREFIX}soc": {
"p": "sensor",
"name": "SoC",
"device_class": "battery",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/batteryStatus/currentSOC_pct",
"unique_id": "{PREFIX}soc",
"unit_of_measurement": "%"
},
"{PREFIX}hv_battery_temp": {
"p": "sensor",
"name": "HV Temp",
"device_class": "temperature",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/measurements/temperatureBatteryStatus/temperatureHvBatteryMax_K",
"unique_id": "{PREFIX}hv_battery_temp",
"value_template": "{{ value | round(2) - 273.15 }}",
"unit_of_measurement": "°C"
},
"{PREFIX}range": {
"p": "sensor",
"name": "range",
"icon": "mdi:car-arrow-right",
"device_class": "distance",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/fuelStatus/rangeStatus/primaryEngine/remainingRange_km",
"unique_id": "{PREFIX}range",
"unit_of_measurement": "km"
},
"{PREFIX}odometer": {
"p": "sensor",
"name": "odometer",
"icon": "mdi:car-cruise-control",
"device_class": "distance",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/measurements/odometerStatus/odometer",
"unique_id": "{PREFIX}odometer",
"unit_of_measurement": "km"
},
"{PREFIX}inspection_days": {
"p": "sensor",
"name": "next inspection due days",
"icon": "mdi:car-wrench",
"state_class": "measurement",
"device_class": "duration",
"state_topic": "weconnect/vehicles/{VIN}/domains/vehicleHealthInspection/maintenanceStatus/inspectionDue_days",
"unique_id": "{PREFIX}inspection_days",
"unit_of_measurement": "d"
},
"{PREFIX}locked": {
"p": "binary_sensor",
"name": "car lock",
"icon": "mdi:car-key",
"device_class": "lock",
"state_topic": "weconnect/vehicles/{VIN}/domains/access/accessStatus/doorLockStatus",
"unique_id": "{PREFIX}locked",
"payload_on": "unlocked",
"payload_off": "locked"
},
"{PREFIX}trunk": {
"p": "binary_sensor",
"name": "trunk open",
"icon": "mdi:car-back",
"device_class": "door",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/access/accessStatus/doors/trunk/openState",
"unique_id": "{PREFIX}trunk",
"payload_off": "closed",
"payload_on": "open"
},
"{PREFIX}charge_mode": {
"p": "sensor",
"name": "charge mode",
"icon": "mdi:ev-plug-ccs2",
"device_class": "enum",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingStatus/chargeMode",
"unique_id": "{PREFIX}charge_mode"
},
"{PREFIX}charge_power": {
"p": "sensor",
"name": "charge power",
"icon": "mdi:lightning-bolt",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingStatus/chargePower_kW",
"unique_id": "{PREFIX}charge_power",
"device_class": "power",
"unit_of_measurement": "kW"
},
"{PREFIX}charge_rate": {
"p": "sensor",
"name": "charge rate",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingStatus/chargeRate_kmph",
"unique_id": "{PREFIX}charge_rate",
"device_class": "speed",
"unit_of_measurement": "km/h"
},
"{PREFIX}charge_type": {
"p": "sensor",
"name": "charge type",
"device_class": "enum",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingStatus/chargeType",
"unique_id": "{PREFIX}charge_type"
},
"{PREFIX}charge_time": {
"p": "sensor",
"name": "charging time left",
"device_class": "duration",
"state_class": "measurement",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingStatus/remainingChargingTimeToComplete_min",
"unique_id": "{PREFIX}charge_time",
"unit_of_measurement": "min"
},
"{PREFIX}plug_connection_status": {
"p": "binary_sensor",
"name": "plug connection status",
"icon": "mdi:ev-plug-ccs2",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/plugStatus/plugConnectionState",
"unique_id": "{PREFIX}plug_connection_status",
"device_class": "plug",
"state_class": "measurement",
"payload_off": "disconnected",
"payload_on": "connected"
},
"{PREFIX}plug_lock_status": {
"p": "binary_sensor",
"name": "plug lock status",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/plugStatus/plugLockState",
"unique_id": "{PREFIX}plug_lock_status",
"device_class": "lock",
"state_class": "measurement",
"payload_on": "unlocked",
"payload_off": "locked"
},
"{PREFIX}charging": {
"p": "switch",
"name": "Charge",
"command_topic": "weconnect/vehicles/{VIN}/controls/charging_writetopic",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingStatus/chargingState",
"state_on": "charging",
"state_off": "off",
"value_template": "{% if value == 'charging' %}charging{% else %}off{% endif %}",
"payload_on": "start",
"payload_off": "stop",
"unique_id": "{PREFIX}charging"
},
"{PREFIX}climatisation_switch": {
"p": "switch",
"name": "Climatisation",
"command_topic": "weconnect/vehicles/{VIN}/controls/climatisation_writetopic",
"state_topic": "weconnect/vehicles/{VIN}/domains/climatisation/climatisationStatus/climatisationState",
"state_on": "heating",
"state_off": "off",
"payload_on": "start",
"payload_off": "stop",
"unique_id": "{PREFIX}climatisation_switch"
},
"{PREFIX}charge_current": {
"p": "select",
"name": "Charge current",
"unique_id": "{PREFIX}charge_current",
"command_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingSettings/maxChargeCurrentAC_writetopic",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingSettings/maxChargeCurrentAC",
"options": ["maximum", "reduced"]
},
"{PREFIX}target_soc": {
"p": "number",
"name": "Target SoC",
"unique_id": "{PREFIX}target_soc",
"command_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingSettings/targetSOC_pct_writetopic",
"state_topic": "weconnect/vehicles/{VIN}/domains/charging/chargingSettings/targetSOC_pct",
"min": 0,
"max": 100,
"step": 1,
"unit_of_measurement": "%"
},
"{PREFIX}climatisation_target_temp": {
"p": "number",
"name": "Climatisation target temperature",
"unique_id": "{PREFIX}climatisation_target_temp",
"device_class": "temperature",
"command_topic": "weconnect/vehicles/{VIN}/domains/climatisation/climatisationSettings/targetTemperature_C_writetopic",
"state_topic": "weconnect/vehicles/{VIN}/domains/climatisation/climatisationSettings/targetTemperature_C",
"min": 16,
"max": 30,
"step": 1,
"unit_of_measurement": "°C"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment