MyToyota Binding — Toyota, Lexus and Subaru (Europe)

Key Value
uid mytoyota
type binding
author Nanna Agesen
version range [5.0.0;6.0.0)
download org.openhab.binding.mytoyota-1.9.10.jar

MyToyota Binding — Toyota, Lexus and Subaru (Europe)

Bring your car into openHAB through the cloud behind the MyToyota app: state of charge, range, charging status,
odometer, fuel level, where it is parked, trips with the route, every door, window and light, warnings in words,
the messages the app shows, and the remote commands the app offers — lock, climate with all its options, charge now,
horn, lights, trunk, and per car whatever else it reports it can do.
No developer registration, no API key of your own: the binding logs in exactly like the app, with your MyToyota
e-mail and password.

Note: Toyota publishes no API. The binding speaks the protocol of the mobile app, as documented by the
pytoyoda project. Europe only (Toyota Connected Services Europe); Lexus
and Subaru (Alliance) accounts use the same service. When Toyota changes something, the binding needs the same
fix as pytoyoda — please open an issue.


Supported Things

Thing Type Description
account (Bridge) Your MyToyota login; one per account
vehicle One car under the account — found by discovery (Inbox) after the bridge is ONLINE
Bridge parameter Default Meaning
brand T T Toyota, L Lexus, S Subaru
pollInterval 5 Minutes between reads. Reads fetch what the cloud holds; they do not wake the car
wakeWhileCharging 10 While charging, ask the car for a fresh state of charge at most every N minutes (0 = never)

Channels

Battery, telemetry, location (read-only)

Channel Type Description
battery#level Number:Dimensionless State of charge (%) as last reported by the car
battery#range / battery#rangeWithAc Number:Length EV range, without and with A/C
battery#chargingStatus String none, charging, chargeComplete, …
battery#charging Switch ON while the status says charging
battery#remainingChargeTime Number:Time Minutes to full while charging
battery#lastUpdate DateTime When the car reported these values
telemetry#odometer / telemetry#distanceToEmpty Number:Length Odometer, distance to empty
telemetry#fuelLevel Number:Dimensionless Fuel (%) — hybrids and combustion cars
location#position Location Last parked position (updated when the car is parked)
location#name / location#lastUpdate String / DateTime The cloud’s label (“Last Parked”) and when it was acquired

Status, doors, windows, lights (read-only) — the app’s status page

Channel Type Description
status#locked Switch ON when every door reports locked
status#anyDoorOpen / anyWindowOpen / trunkOpen / hoodOpen Contact Summaries
status#overall / status#warnings String / Number ok or a warning state; the number of red marks in the app
doors#driverLocked, driverOpen, passenger…, rearLeft…, rearRight…, rearBack… Switch / Contact Lock and open state of every door and the trunk
doors#hoodOpen, doors#rearSeatReminder Contact / String Hood, rear seat reminder
windows#driver, passenger, rearLeft, rearRight String closed, open, … per window
lights#hazard, tail, head Switch Lights left on
health#warnings String The warnings behind the count, in words (“Tire Pressure Warning System”), or none
health#warningCodes / health#severity String / Number Codes and the worst severity
climate#status String stopped, starting, running

Trips and service history (read-only)

Channel Type Description
trips#latestStart / latestEnd DateTime The newest trip
trips#latestDistance, latestDuration, latestAverageSpeed, latestFuel, latestEvDistance, latestScore Number Its numbers
trips#latestStartPosition / latestEndPosition Location Where it began and ended
trips#latestRoute String The route as lat,lon,flags;… (e = electric, h = highway, o = over the limit) — see the map page in examples/
trips#todayDistance, monthDistance, monthDuration, monthFuel, count30Days Number Totals
service#count, lastDate, lastCategory, lastProvider, lastMileage The service history

Notifications (read-only) — what the app shows

Channel Type Description
notifications#latest String The newest message, e.g. “Your request could not be completed because a keyfob was detected in your vehicle.”
notifications#latestTime / latestCategory DateTime / String When, and RemoteControl, VehicleStatusAlert, …
notifications#unread Number Messages not yet opened in the app
notifications#recent String The five newest, one per line

Control (read/write)

Channel Type Description
control#refresh Switch ON: wake the car for a fresh state of charge and door state; polled again 45 s later
control#lock Switch ON locks, OFF unlocks — mirrors status#locked
control#climate Switch ON starts the remote climate with the setpoints and options below, OFF stops it
control#climateTemperature / climateDuration Number Target and minutes for the next climate start (seeded from the car’s saved setting)
control#chargeNow Switch ON: start charging now while plugged in
control#hazardLights / horn / findVehicle Switch Hazard lights, horn once, flash the lights
control#lastCommandResult String Last command and the cloud’s return code, e.g. door-lock: 000000 (Success)

Created only when the car reports the capability (thing property capabilities): control#trunkLock, buzzer,
engine, headlights, windowsOpen, windowsClose, ventilation, and the climate options defrostFront,
defrostRear, steeringHeater, mirrorHeater, seatHeaterDriver, seatHeaterPassenger, seatHeaterRearLeft,
seatHeaterRearRight. The options are switches you set once; they go with every climate start and are saved in the car,
like the app’s climate schedule settings.

Every command is acknowledged by the cloud (return code 000000 = accepted) and followed by a confirming poll 45 s
later, so the state channels show what the car actually did. A car may refuse: a lock with the key fob inside is
accepted by the cloud and refused by the car, and the reason appears on notifications#latest.


Quick Start

Bridge mytoyota:account:home [ username="me@example.com", password="secret", brand="T", pollInterval=5, wakeWhileCharging=10 ] {
    Thing vehicle car "My car" [ vin="JTMXXXXXXXXXXXXXX" ]
}
Number:Dimensionless Car_SoC       "Battery [%.0f %%]"     { channel="mytoyota:vehicle:home:car:battery#level", unit="%" }
Number:Length        Car_Range     "Range [%.0f km]"       { channel="mytoyota:vehicle:home:car:battery#range", unit="km" }
String               Car_Charging  "Charging [%s]"         { channel="mytoyota:vehicle:home:car:battery#chargingStatus" }
Location             Car_Position  "Position"              { channel="mytoyota:vehicle:home:car:location#position" }
Switch               Car_Locked    "Locked [%s]"           { channel="mytoyota:vehicle:home:car:status#locked" }
String               Car_Warnings  "Warnings [%s]"         { channel="mytoyota:vehicle:home:car:health#warnings" }
String               Car_Says      "Car says [%s]"         { channel="mytoyota:vehicle:home:car:notifications#latest" }
Switch               Car_Lock      "Doors"                 { channel="mytoyota:vehicle:home:car:control#lock", autoupdate="false" }
Switch               Car_Climate   "Climate"               { channel="mytoyota:vehicle:home:car:control#climate", autoupdate="false" }
Switch               Car_Refresh   "Refresh from car"      { channel="mytoyota:vehicle:home:car:control#refresh", autoupdate="false" }
String               Car_LastCmd   "Last command [%s]"     { channel="mytoyota:vehicle:home:car:control#lastCommandResult" }

unit="%" and unit="km" keep the item states in the units you expect; without them openHAB stores 0.18 and
85500 m. autoupdate="false" on the command switches makes them show what the car reports, not what was clicked.

Complete examples in the repository’s examples/
folder: a things file, an items file with every channel, a sitemap page, four rules (preheat before departure,
plug-in reminder, charge to a target with a freshness check, night lock with the car’s refusal reason), and a Leaflet
page that draws the newest trip from trips#latestRoute as a webview.


How fresh is the data?

The cloud holds what the car last sent. Parked and asleep, the car sends nothing, so values keep their timestamp
(see the lastUpdate channels). Position and trips arrive when the car is parked after a drive. While charging the
car reports by itself now and then; wakeWhileCharging asks it for a fresh state of charge more often, and
control#refresh does the same on demand. Every wake reaches the car’s modem over the mobile network and draws on
its 12 V battery — that is why the binding never wakes the car on every poll, and why you should not automate the
refresh every minute.

If location#position never changes and the app says “Vehicle location is currently unavailable because you have
privacy preferences turned on”
, the car’s privacy setting is blocking position upload (dealers often leave it on).
Turn location sharing on in the car’s multimedia settings, then control#refresh. Trips depend on the same data.


Tested on

  • Toyota bZ4X 2025 (Denmark): login, discovery, all reads (battery, telemetry, location, status, per-door /
    window / light, health, climate, notifications), the capability channels the car reports (trunk, buzzer, defrost,
    seat and steering heaters appeared; engine, headlights and windows did not), the wake, and lock — including
    the car refusing it with the key fob inside, reported on notifications#latest.
  • Trips and service history follow pytoyoda’s model; the test car had no trips in the cloud when this was released.
  • Unlock, hazard, horn, find, climate start/stop and options, charge now, charge reservation, trunk and buzzer use
    the same request shape as the app and are not yet exercised on a car.

If you own a different Toyota, Lexus or Subaru, please post what works — model, year and the capabilities
thing property are all that is needed to extend the binding.


Resources


Tested on openHAB 5.2. Not affiliated with Toyota Motor Corporation; “Toyota”, “Lexus”, “Subaru” and “MyToyota” are trademarks of their owners.

Hi @Nanna_Agesen

gr8 work on this - i have installed the Jar on a site with a 2025 Rav 4 - seems to be working but I do not its a PHEV Plug in Hybrid and I do not see any capabilities related to the petrol side

I have not yet put it into debug or trace(time constraints) more but wanted to get your opinion on what my next steps should be.

EDIT: the only property on the thing is

vendor
Toyota

Thank you for the report — a RAV4 PHEV is exactly the car this release needed. Two things were behind what you saw. The capabilities and the other properties were only written when the thing came from discovery; a thing from a .things file showed nothing but vendor: Toyota. And the engine-start capability is spelled estartStopCapable in the vehicle list’s remoteServiceCapabilities, which the binding did not look at — it only knew remoteEngineStartStop. Both are in 1.8.1: the binding writes the properties itself on the first poll (including fuelType and vehicleType), and both spellings count. 1.8.1 also adds fuel consumption in l/100 km per trip and per month, today’s fuel, the four parts of the driving score, service notes, and for your car battery#usableLevel and battery#totalRange (fuel + EV). Cars without a battery are no longer asked for one. Please post your capabilities property once it appears — it tells us which of the petrol-side channels your car reports.

Hi @Nanna_Agesen thanks for the quick reply

I deleted and rediscovered the Car with the new version (its is now collecting data and I will monitor and advise)

These are the capabilities now

acScheduling, automaticCrashNotificationsCapable, bonnetStatus, chargeManagement, chargeNowCapable, doorLockUnlockCapable, drivingAnalyticsCapable, econnectClimateCapable, econnectVehicleStatusCapable, evChargeStationsCapable, frontDefogger, frontDriverDoorLockStatus, frontDriverDoorOpenStatus, frontDriverDoorWindowStatus, frontPassengerDoorLockStatus, frontPassengerDoorOpenStatus, frontPassengerDoorWindowStatus, fuelLevelAvailable, fuelRangeAvailable, guestDriver, hazardCapable, hybridPulse, lastParkedCapable, lightStatus, moonroof, nextCharge, rearDefogger, rearDriverDoorLockStatus, rearDriverDoorOpenStatus, rearDriverDoorWindowStatus, rearHatchRearWindow, rearPassengerDoorLockStatus, rearPassengerDoorOpenStatus, rearPassengerDoorWindowStatus, remoteEConnectCapable, smartKeyStatus, sunroof, telemetryCapable, vehicleDiagnosticCapable, vehicleFinder, vehicleStatus

and these were the channels it created:

		Type battery-level : battery#level "Battery Level"
		Type range : battery#range "EV Range"
		Type range : battery#rangeWithAc "EV Range with A/C"
		Type charging-status : battery#chargingStatus "Charging Status"
		Type charging-schedule : battery#chargingSchedule "Charging Schedule"
		Type next-charging-event : battery#nextChargingEvent "Next Charging Event"
		Type charging : battery#charging "Charging"
		Type remaining-charge-time : battery#remainingChargeTime "Remaining Charge Time"
		Type battery-level : battery#usableLevel "Usable Battery Level"
		Type range : battery#totalRange "Total Range"
		Type timestamp : battery#lastUpdate "Battery Reported"
		Type odometer : telemetry#odometer "Odometer"
		Type range : telemetry#distanceToEmpty "Distance to Empty"
		Type fuel-level : telemetry#fuelLevel "Fuel Level"
		Type timestamp : telemetry#lastUpdate "Telemetry Reported"
		Type timestamp : trips#latestStart "Latest Trip Start"
		Type timestamp : trips#latestEnd "Latest Trip End"
		Type trip-distance : trips#latestDistance "Latest Trip Distance"
		Type trip-duration : trips#latestDuration "Latest Trip Duration"
		Type trip-speed : trips#latestAverageSpeed "Latest Trip Average Speed"
		Type trip-fuel : trips#latestFuel "Latest Trip Fuel"
		Type trip-distance : trips#latestEvDistance "Latest Trip EV Distance"
		Type fuel-economy : trips#latestFuelEconomy "Latest Trip Consumption"
		Type trip-duration : trips#latestEvDuration "Latest Trip EV Time"
		Type trip-score : trips#latestScore "Latest Trip Score"
		Type trip-score : trips#latestScoreAcceleration "Latest Trip Acceleration Score"
		Type trip-score : trips#latestScoreBraking "Latest Trip Braking Score"
		Type trip-score : trips#latestScoreAdvice "Latest Trip Advice Score"
		Type trip-score : trips#latestScoreConstantSpeed "Latest Trip Constant Speed Score"
		Type trip-distance : trips#todayDistance "Today Distance"
		Type trip-fuel : trips#todayFuel "Today Fuel"
		Type trip-distance : trips#monthDistance "This Month Distance"
		Type trip-duration : trips#monthDuration "This Month Driving Time"
		Type trip-fuel : trips#monthFuel "This Month Fuel"
		Type fuel-economy : trips#monthFuelEconomy "This Month Consumption"
		Type trip-distance : trips#monthEvDistance "This Month EV Distance"
		Type trip-count : trips#count30Days "Trips In 30 Days"
		Type trip-position : trips#latestStartPosition "Latest Trip Start Position"
		Type trip-position : trips#latestEndPosition "Latest Trip End Position"
		Type trip-route : trips#latestRoute "Latest Trip Route"
		Type trip-id : trips#latestId "Latest Trip Id"
		Type timestamp : trips#lastUpdate "Trips Read"
		Type service-count : service#count "Service Records"
		Type timestamp : service#lastDate "Last Service Date"
		Type service-text : service#lastCategory "Last Service"
		Type service-text : service#lastProvider "Last Service Provider"
		Type odometer : service#lastMileage "Odometer At Last Service"
		Type service-text : service#lastNotes "Last Service Notes"
		Type service-text : service#lastOperations "Last Service Operations"
		Type service-text : service#lastDealer "Last Service Dealer"
		Type position : location#position "Last Parked Position"
		Type location-name : location#name "Position Name"
		Type timestamp : location#lastUpdate "Position Acquired"
		Type timestamp : location#reportedAt "Location Record Refreshed"
		Type overall-status : status#overall "Overall Status"
		Type warnings : status#warnings "Status Marks In Red"
		Type locked : status#locked "Locked"
		Type open-contact : status#anyDoorOpen "Any Door Open"
		Type open-contact : status#anyWindowOpen "Any Window Open"
		Type open-contact : status#trunkOpen "Trunk Open"
		Type open-contact : status#hoodOpen "Hood Open"
		Type hazard-lights : status#hazardLights "Hazard Lights"
		Type timestamp : status#lastUpdate "Status Reported"
		Type door-locked : doors#driverLocked "Driver Door Locked"
		Type open-contact : doors#driverOpen "Driver Door Open"
		Type door-locked : doors#passengerLocked "Passenger Door Locked"
		Type open-contact : doors#passengerOpen "Passenger Door Open"
		Type door-locked : doors#rearLeftLocked "Rear Left Door Locked"
		Type open-contact : doors#rearLeftOpen "Rear Left Door Open"
		Type door-locked : doors#rearRightLocked "Rear Right Door Locked"
		Type open-contact : doors#rearRightOpen "Rear Right Door Open"
		Type door-locked : doors#rearBackLocked "Trunk Locked"
		Type open-contact : doors#rearBackOpen "Trunk Open"
		Type open-contact : doors#hoodOpen "Hood Open"
		Type rear-seat-reminder : doors#rearSeatReminder "Rear Seat Reminder"
		Type window-state : windows#driver "Driver Window"
		Type window-state : windows#passenger "Passenger Window"
		Type window-state : windows#rearLeft "Rear Left Window"
		Type window-state : windows#rearRight "Rear Right Window"
		Type light-state : lights#hazard "Hazard Lights"
		Type light-state : lights#tail "Tail Lights"
		Type light-state : lights#head "Headlights"
		Type health-warnings : health#warnings "Active Warnings"
		Type health-codes : health#warningCodes "Warning Codes"
		Type health-severity : health#severity "Worst Severity"
		Type timestamp : health#lastUpdate "Health Reported"
		Type climate-status : climate#status "Climate Status"
		Type climate-started : climate#startedAt "Climate Started"
		Type climate-remaining : climate#remaining "Climate Remaining"
		Type climate-cabin-temperature : climate#cabinTemperature "Cabin Temperature"
		Type climate-target-temperature : climate#targetTemperature "Climate Target Temperature"
		Type notification-text : notifications#latest "Latest Message"
		Type timestamp : notifications#latestTime "Latest Message Time"
		Type notification-category : notifications#latestCategory "Latest Message Category"
		Type notification-unread : notifications#unread "Unread Messages"
		Type notification-text : notifications#recent "Recent Messages"
		Type refresh : control#refresh "Refresh From Car"
		Type lock : control#lock "Lock"
		Type hazard-command : control#hazardLights "Hazard Lights"
		Type trigger-command : control#horn "Sound Horn"
		Type trigger-command : control#findVehicle "Find Vehicle"
		Type climate-command : control#climate "Climate"
		Type climate-temperature : control#climateTemperature "Climate Temperature"
		Type climate-duration : control#climateDuration "Climate Duration"
		Type trigger-command : control#chargeNow "Charge Now"
		Type command-result : control#lastCommandResult "Last Command Result"
		Type timestamp : control#lastWake "Last Wake Request"
		Type timestamp : control#lastPoll "Last Poll"
		Type climate-option : control#defrostFront
		Type climate-option : control#defrostRear

Thank you — that is exactly the list I hoped to see, and it answers the “petrol side” question: your car reports fuelLevelAvailable, fuelRangeAvailable and hybridPulse, so telemetry#fuelLevel, telemetry#distanceToEmpty, battery#totalRange and the l/100 km trip channels should fill as the car drives. Two things I would like from you when you have a moment:

Does the MyToyota app offer remote engine start for your RAV4? Your capabilities carry neither remoteEngineStartStop nor estartStopCapable, so the binding created no control#engine — if the app has the button, Toyota is signalling it with a flag I have not seen yet, and I will add it.
Once a trip or two has landed: what battery#usableLevel, battery#totalRange, trips#latestFuelEconomy and trips#latestEvDuration read, and whether they look right against the app. The thing’s vehicleType property should say plug-in hybrid (fuelType I).
hybridPulse, smartKeyStatus and bonnetStatus are flags I have not mapped to anything; if you ever see something in the app those could correspond to, say so — with a DEBUG log of the binding the payloads behind them are visible, and that is how the next channels get built.

the car is reporting “electric”

Useable Battery = UNDEF

Total Range = seems correct and the Same as Distance to Empty
Latest_Trip_Consumption = 0.0 l/100km

Latest Trip Duration (26min ) :- So appears it has been detected

No there is no such option in the App

Hi @BrettLHolmes — thank you, that capability list and those four values were exactly what was needed. Two of them turned out to be my bugs; both are fixed in 1.9.4, which is up now.

“The car is reporting electric” — your car is right and the binding was wrong. Toyota’s registry returns fuelType: E for your RAV4 PHEV, and both this binding and pytoyoda take that at face value. But the same payload also says fuelLevelAvailable, fuelRangeAvailable and hybridPulse, and a car that reports a fuel level is not a battery car. From 1.9.4 the capabilities win over the code, so the thing will say plug-in hybrid. It is only a property and a log line — nothing else keys off it.

Usable Battery = UNDEF — my fault, and worse than it looks. 1.8.x and 1.9.0 read a field called phevUsableBatteryLevel, a name that exists neither in pytoyoda nor, apparently, in your car’s payload, so the channel was empty on exactly the cars it was written for. I am not going to guess another name: from 1.9.4 the binding takes any numeric field in the electric payload whose name contains “usable” and logs at INFO which one it found. If your RAV4 has one under a different name it will simply appear, and the log line tells us what to call it. If nothing shows up, the endpoint does not carry it for your car and the channel stays UNDEF.

Latest Trip Consumption = 0.0 l/100km — I believe this one is correct. The binding gives UNDEF when the figure is missing and only prints a number when the car sent one, so 0.0 means your car reported zero fuel for that trip, which is what a trip driven on the battery uses. Worth a sanity check: compare Latest Trip EV Distance with Latest Trip Distance. If they match, 0.0 is the honest answer.

Total Range the same as Distance to Empty — this one I would like to understand. Total Range is fuelRange + evRangeWithAc from the electric endpoint, the way pytoyoda’s dashboard adds them, so the two being equal means the EV part came back zero or missing. Was the battery flat at the time? If it was not, one line from the log would settle it:

A correction to my own post above, and a new release: 1.9.5.

I wrote that fuelLevelAvailable and fuelRangeAvailable proved your car has a tank. They do not. A bZ4X — a car with no engine at all — advertises both as true, so 1.9.4 turned round and called every battery car a plug-in hybrid. Apologies to anyone who installed it in that hour: the damage is one property and one word in a log line, and 1.9.5 puts it right.

What actually separates the two cars is hybridPulse: false on the bZ4X, true on your RAV4. That flag alone now decides, and only for a car Toyota’s registry already calls electric, so a full hybrid never reaches the test.

Everything else in 1.9.4 stands, the usable-battery change included.

Hi @Nanna_Agesen

I have 1.9.5 installed

I deleted the links and the thing and rediscovered and seems the battery info is not being populated and the fuel level is now the battery level happy to continúe if needed testing as not in production (yet )

Hi @BrettLHolmes — thank you, and please do keep going. A car nobody here owns is worth more than the code.

First, something I can rule out rather than guess at. 1.9.5 changed exactly one line of Java:

- return capable(v, "fuelLevelAvailable") || capable(v, "fuelRangeAvailable") || capable(v, "hybridPulse");
+ return capable(v, "hybridPulse");

Everything else in that commit is comments and documentation. That method feeds only vehicleType(), and vehicleType() is used in two places in the whole binding: the thing’s vehicleType property, and one word in a log line. No channel reads either. And telemetry#fuelLevel is written in exactly one place, from the telemetry endpoint’s own fuelLevel field — there is no path in the binding from any battery field to that channel.

So 1.9.5 cannot have put your battery level into the fuel channel. Your car also reads the same on 1.9.4 and 1.9.5: it has hybridPulse, so both call it a plug-in hybrid.

That leaves two candidates, and I would rather find out which than assume:

  1. A link is on the wrong channel. You deleted the links and the thing and rediscovered, so every link was made fresh. An item that landed on battery#level instead of telemetry#fuelLevel would look exactly like this.
  2. Toyota is sending it that way. If fuelLevel genuinely comes back as the battery percentage for your RAV4, the binding is faithfully showing what arrived, and the fix belongs in the binding — but it has to be the right fix.

Three things would settle both halves of your report. Whichever is least trouble:

  • Which channel your fuel item is linked to. In the UI, the item’s link shows the channel name under the thing.
  • The INFO line the binding writes when the thing starts:
    XXXX is a RAV4 2025 (plug-in hybrid); electric status is polled
    
    That one line confirms the type and whether the electric endpoint is being asked at all, which is the other half of what you are seeing.
  • The DEBUG line I asked for last time and we still do not have. In the console:
    log:set DEBUG org.openhab.binding.mytoyota
    
    then wait for a poll and look for:
    Electric status payload: {...}
    
    That answers the battery question outright. If the payload is there but the fields are named something other than what the binding reads, we will see the real names. If the endpoint returns nothing for your car, that is an answer too — and a different fix.

The next build will log the telemetry payload the same way, so if it does turn out that Toyota puts the battery percentage in fuelLevel, there will be a line proving it instead of the two of us inferring it.

You do not need a new build for any of that; it is all in the 1.9.5 you already have.

Hi @Nanna_Agesen @pologies on the delay i have not been able to access the car/app for the last few days and should be able to confirm tomorrow.

Will advise.

I have good news for you - seems i was to hasty at looking at the data in the Items - I had deleted all the items and re-added them

All is working correctly - i think what confused me is that the Fuel was called a % which is understandable (but i did not expect it like that)

Thanks for a great binding.

I will continue to test - there is an upcoming requirement to interact (on/off) with the charging to optimize house power consumption