When we swapped our RAV4 for a used Toyota bZ4X, the car turned out to be constantly online. To me, that only meant one thing: it belongs in Zabbix. This page is the guide lane of the home monitoring series that turns the original blog post into a recipe you can adapt to your own EV.
To be honest, the integration was largely created by Claude: I described my Zabbix and the car, and a moment later I had working collector, systemd units and a Zabbix template. The moral is that EV monitoring is now accessible to anyone who can describe a problem.
Why monitor a car with Zabbix?
A car is the biggest battery on the property and one of the most expensive things in it. Once its data exists in Zabbix you can answer questions like: how does the estimated range compare with kilometres actually driven, when does the car really charge, how does range deplete over the seasons, how do driving patterns change, and how do my charging costs add up? Those are not vanity metrics, they decide things like whether to precondition the car in the morning.
What the Toyota bZ4X integration collects
The list the collector reads from the Toyota Connected Services Europe API is astonishingly deep:
- Charging: charging speed, current battery level, range with and without AC, schedules, time remaining, drain when parked, estimated charging cost this month and kWh charged in the last 24 hours/month.
- Climate: remote AC state, target temperature, running time, seat heaters, defrost and steering-wheel heater status.
- Driving: average and last-trip speed, distances, driving score (acceleration, constant speed, braking), harsh events, Eco/normal/power mode usage and regenerative braking.
- Trips: start and end coordinates, day/night trips, trip type guesses (errand, commute, long drive), fastest and longest trips, lifetime average distance and odometer.
- State: open or locked doors, windows and trunk, plus the notification history such as 'Charging started' or 'Climate was remotely started'.
- Servicing: subscription expiry for Remote/Smart/Standard services, last service date, km since maintenance, and warnings including active warning lights.
- Environment: vehicle age in days and CO2 avoided in kg this month and year.
How the integration works
Three small files make it tick: a collector script (toyota_bz4x_collector.py) that polls the Toyota Connected Services Europe API through the pytoyoda Python module, a config file, and systemd service/timer units that run it every 15 minutes by default. The Zabbix template contains trapper items that receive the data the collector sends, so Zabbix does not poll the API at all. Claude suggested trapper items instead of an HTTP agent item because the Toyota API is not flexible enough for direct polling, and I did not argue with the results.
Useful things to do with the data
With a few days of history I already have a wish list: compare the estimated battery range against actually driven kilometres, review charging times and speed, watch how maximum range varies with the seasons and depletes over time, see how driving patterns and trip lengths evolve, and track charging costs week by week. The on-call benefit of alerting on warning lights and subscription expiry should be obvious to anyone who has been stranded by an expired subscription-based feature.
The same idea for any EV
The bZ4X is one data source; the pattern is universal. Cars have telemetry via manufacturer APIs, OBD adapters or companion apps, and Zabbix does not care where data comes from as long as it arrives. The blog proves the pattern with everything from an iPhone and Apple Watch that report their battery (part 42) to a cruise ship being tracked (part 82). Ship data is just car data with better views.
Frequently asked questions
Can Zabbix really monitor an electric car?
Yes. My Zabbix sees battery level, charging speed, range estimates, climate settings, trips, doors, subscriptions and warnings from a Toyota bZ4X. The integration talks to the official Toyota Connected Services Europe API through the pytoyoda Python module.
What data does the Toyota bZ4X integration collect?
Charging details (speed, battery, range, cost estimates, kWh charged), climate and heater status, speed and distance aggregates, driving score and mode, trip geography, door/window/trunk state, notification history, subscription expiry, service intervals and warning lights.
How often is the car data updated?
The systemd timer runs the collector every 15 minutes by default. You can tune that, but for battery percentage, climate and even charging the 15-minute granularity is more than enough.
Do I need to be very technical to set it up?
Surprisingly not: the original integration was generated by Claude in one session - describe your Zabbix and your car, review what it writes, and deploy the systemd units. A basic comfort with Linux and Zabbix templates is all you need.
Is charging cost monitoring possible?
Yes, the integration already reports the estimated charging cost for this month plus kWh charged in the last 24 hours and this month, so with the hourly electricity price from the home energy guide you can sanity-check the car's own estimate.
Which posts should I read to build my own?
Start with the bZ4X post itself, then the home energy guide for the price side. If you want more raw inspiration about pushing arbitrary data into Zabbix, the Zabbix API history.push story is a great next read.
First published as part of the home monitoring guide series on whatsuphome.fi. The detailed, screenshot-laden versions of every step live in the blog posts linked above.

Add new comment