Renault

Adapter for Renault, Dacia and Alpine cars

Current Release
1.1.0
Developer
TA2k
License
MIT

Renault / Dacia / Alpine adapter for ioBroker

This adapter connects ioBroker to the cloud of Renault, Dacia and Alpine. It reads vehicle data (battery, charging, climate control, mileage, location, tyre pressure, ...) and sends remote commands (climate control, charging, charge limits, horn and lights) for connected models such as the Renault Zoe, Megane E-Tech, Renault 5, the Dacia Spring and the Alpine A290.

The adapter logs in with the account of the My Renault, My Dacia or My Alpine app. A car works with the adapter when it can be controlled in that app.

Installation / Login

  1. Install the adapter via the ioBroker admin UI.
  2. Open the adapter configuration and enter the credentials of your My Renault (or My Dacia / My Alpine) account: app email and app password.
  3. Select the brand of your app: Renault / Dacia for My Renault and My Dacia, Alpine for My Alpine. All three apps log in at the same Renault service; the brand decides which account of your login the adapter uses.
  4. Select the country of your account in the app.
  5. Click Test login to check email and password before saving. The instance must be running for the button to work.
  6. Optionally set the polling interval in minutes and the API key (leave empty for auto-detect).
  7. Save and the instance will start polling. Connection below the login fields shows whether it is connected.

Supported models

What each model supports comes from the endpoint table of renault-api (src/renault_api/kamereon/models.py, read on 2026-09-17). yes: supported, no: not supported, so the adapter neither creates the state nor sends the request, ?: renault-api does not say, so the adapter tries it. A model that is not in the table gets every request; what the car rejects is asked again once a day. Your model code is in general.vehicleDetails.model.code.

Renault

ModelCodeBatteryCockpitClimateCharging startCharging stopCharge limitsHorn / lightsTyre pressureAlerts
Arkana E-tech full hybridXJL2TR?yes?????no?
AUSTRALXHN1SUnoyesnonononoyesno?
CAPTUR IIXJB1SUyesyesyesnonononono?
CAPTUR II GPLXJB2SUnoyesnonononoyesnono
CLIO VXJA1VPnoyesnonononononono
CLIO VXJA2VPnoyesnonononononono
MEGANE E-TECHXCB1VEyesyesyesyesnoyesyesno?
Megane IVXFB2BIyesyes?????no?
Megane IV Break (E-Tech Plug-in Hybrid)XFB2BKyesyesyesyes??nono?
RafaleXHN1CPyesyes?nono?yesno?
Renault 5 E-TECHR5E1VEyesyesyesyesnoyesyesnoyes
Renault Espace VI (OpenRLink)XHN1MLnoyesnonononoyesnono
Renault Master E-TechXDD1VEyesyesyesyesnoyesyesno?
Renault R4 E-TechA4E1VEyesyesyesyesnoyesyesno?
Renault Symbioz 2025XJB2CPnoyesnonononoyesno?
SCENIC E-TECHXCB1SEyesyesyesyesnoyesyesno?
TWINGO IIIX071VEyesyes?????no?
ZOE phase 1X101VEyesyesyesyes?no?no?
ZOE phase 2X102VEyesyesyesyesyesnonoyes?

Dacia

ModelCodeBatteryCockpitClimateCharging startCharging stopCharge limitsHorn / lightsTyre pressureAlerts
DACIA BIGSTER HYBRID 155 (no EV)BD11SLnoyes?nononononono
Dacia Duster IIIDU31SUnoyes???nonono?
DACIA SANDERO III (ECO-G, petrol+LPG; engineEnergyType OTHER)XJF2BInoyesnonononoyesnono
DACIA SPRINGXBG1VEyesyesyesyesyesnononono

Alpine

ModelCodeBatteryCockpitClimateCharging startCharging stopCharge limitsHorn / lightsTyre pressureAlerts
Alpine A290A5E1AEyesyesyesyesnoyesyesnono

Remote control

Each vehicle is created as a device using its VIN. Remote commands are exposed as states under renault.0.<VIN>.remote.*:

StateTypeRoleAction
climateStartbooleanbutton.startstart the climate control
climateStopbooleanbutton.stopstop the climate control
climateTemperaturenumberlevel.temperaturetarget temperature in °C for the next start (default 21)
chargingStartbooleanbutton.startstart charging (see below)
chargingStopbooleanbutton.stopstop charging
chargeLimitMinnumberlevelminimum charge level in %, 15 to 45 in steps of 5
chargeLimitTargetnumberleveltarget charge level in %, 55 to 100 in steps of 5
chargeModestringtextalways, always_charging, schedule_mode or scheduled; shows the mode the car reports
hornStartbooleanbutton.startsound the horn
lightsStartbooleanbutton.startflash the lights
refreshLocationbooleanbuttonread the location from the cloud now
askForLocationRefreshbooleanbuttonask the car to upload its position, read the location 30 s later
refreshAllbooleanbuttonpoll all vehicle data now
refreshBatterybooleanbuttonread the battery status from the cloud now
refreshClimatebooleanbuttonread the climate control status (hvac-status) from the cloud now
lastCommandErrorstringtexterror of the last command, empty after a successful command

A button is pressed by writing true. The adapter resets it to false with ack: true once the command was handled; lastCommandError tells whether the Renault cloud accepted it. The car carries it out afterwards, and the data states show the result after the next poll, for example hvac-status.hvacStatus and battery-status.chargingStatus.

chargeLimitMin and chargeLimitTarget are sent together, so the adapter needs the other limit from soc-levels. It is read once per hour; right after the start a write waits for that first read. Both states show the limits the car reports, also after a change in the app.

The refresh… buttons read only what the cloud holds; the car uploads by itself, for example after a change at the wallbox or when it is switched off. askForLocationRefresh first asks the car to upload its position, which wakes its telematics unit; it reads only when the cloud accepted that request, and the result is in lastCommandError. Do not press it from a script in a tight loop, every press wakes the car and draws on its 12 V battery. The car cannot be asked for its battery or climate control status: the Zoe phase 2 answers the refresh requests known from other projects with 404. Each button costs one read instead of a full poll, and the same data of a vehicle is read at most every three minutes.

A script that follows the wallbox presses refreshBattery itself when the car has had time to upload, for example one minute after the wallbox changed. Frequent use of refreshAll can exhaust the request quota of the account, which also blocks the My Renault app.

Which request a command sends, and which vehicle data the adapter polls, depends on the model. The adapter uses the endpoint table of renault-api (model code in general.vehicleDetails.model.code):

  • A button the model does not support is not created. Models that cannot stop charging remotely, for example the Megane E-Tech, Renault 4, Renault 5 and Alpine A290, have no chargingStop.
  • Renault 4, Renault 5, Alpine A290, Scenic E-Tech and Master E-Tech charge by schedule. On these models chargingStart switches off all charge programs, as the My Renault app does; switch them on again in the app.
  • Data the model does not provide is not polled, which saves requests.
  • A model renault-api does not list yet gets the default requests: every command and endpoint is tried, and unsupported endpoints are asked again once a day.

Vehicle data

The data of each endpoint is written to a channel below renault.0.<VIN>, named after the endpoint, for example battery-status, cockpit and hvac-status. Most are asked on every poll; these change slowly and are asked once per hour:

ChannelContent
charge-historycharges per day
chargessingle charges
pressuretyre pressure per wheel in mbar and a status code
alertsalerts of the car (Renault 5); a cleared alert is removed
soc-levelsminimum and target charge level

FAQ

The log says "Feature not found for … Ignore … for 24 hours". The car or its service pack does not offer this data. The adapter asks again once a day, which costs one request.

The log says "invalid loginID or password", or the login is rejected. Set a new password in the My Renault (My Dacia, My Alpine) app, enter it in the adapter settings and restart the instance. Until then the adapter sends no commands, so it cannot lock the account with the old password.

The log or the admin notifications say Renault asks for a code by email. Renault asks some accounts for a code sent by email at login (two-factor authentication). Open the instance settings and press Test login. The adapter has Renault send the code and names the address. Enter the code in Code from the email within 10 minutes and press Confirm code. A wrong code can be corrected without a new email; after 10 minutes press Test login again for a new code. If the email on the page is the one the instance uses, the instance connects at once and removes the notification; for a new email, save and close the settings. Renault remembers the ioBroker installation for about 30 days, and the adapter keeps its login session across restarts, so a new code is needed only when Renault ends that session.

The log says the Renault request quota is used up (429). The account allows about 60 requests per hour, shared with the app. The adapter pauses by itself for 15, 30 and then 60 minutes. Raise the update interval, and use refreshAll rarely; the adapter warns once when its settings need more requests than the quota allows.

chargingStart switched off my charge schedule. On the Renault 4, Renault 5, Alpine A290, Scenic E-Tech and Master E-Tech this is how charging is started, the app does the same. Switch the programs on again in the app.

A remote state is missing. The model does not support the command according to the table above; the adapter does not create it, and removes it if an older version had created it.

Changelog

WORK IN PROGRESS

  • The buttons refreshBattery, refreshClimate and refreshLocation no longer fail now and then with "Timeout (-1) is smaller than 0".

1.1.0 (2026-10-22)

  • New button in the settings to test the login before saving.
  • Accounts that need a login code by email work again. The code is requested and confirmed in the settings.
  • The login is kept across restarts.
  • A space around the email no longer breaks the login (#82).
  • The country setting is shown in the language of the admin.
  • Map widgets now find the vehicle position.

1.0.0 (2026-09-23)

  • (typhosj) Breaking change: the remote states are renamed and every command is a button. actions/hvac-start becomes climateStart and climateStop, hvac-temperature becomes climateTemperature (default 21 °C, a valid old value is taken over), actions/charging-start, charge/pause-resume and charge/start become chargingStart and chargingStop, and refresh becomes refreshAll. The old states are removed on the first start. Adjust scripts and visualizations
  • (typhosj) Breaking change: only one cockpit version is polled per vehicle (v2 if it answers, else v1; v1 fills in while v2 answers with server errors), and its data is always written to cockpit; the cockpitv2 channel is removed
  • (typhosj) Breaking change: battery, range, mileage, fuel and temperature states get units and specific roles
  • (typhosj) battery-status.plugStatus and battery-status.chargingStatus name their codes, for example 1 plugged or 0.3 waiting for current charge
  • (typhosj) Breaking change: the update interval is at least 5 minutes (15 minutes for new installations)
  • (typhosj) commands and polled data follow the endpoint table of renault-api per model: each command sends the request the model needs, and commands or data the model does not offer are neither created nor polled
  • (typhosj) a command button is reset with ack after the command, charge mode and charge limits are confirmed with ack once the Renault cloud accepted them, and remote.lastCommandError holds the error of the last command
  • (typhosj) chargingStart starts charging on the Renault 4, Renault 5, Alpine A290, Scenic E-Tech and Master E-Tech by switching off their charge programs, as the app does
  • (typhosj) read and set the minimum and target charge level with remote.chargeLimitMin and remote.chargeLimitTarget on models that support it; the current limits are in the new channel soc-levels
  • (typhosj) set the charge mode with remote.chargeMode; it and the charge limit states show the values the car reports
  • (typhosj) new buttons remote.hornStart and remote.lightsStart on models that support them; remote.refreshLocation, remote.refreshBattery and remote.refreshClimate read only the location, the battery status or the climate control status from the cloud, and remote.askForLocationRefresh first asks the car to upload its position and reads it 30 seconds later; during a quota pause, or while the car does not offer the data, these buttons send nothing and say why in lastCommandError
  • (typhosj) new channels pressure (tyre pressure in mbar) and alerts (Renault 5), read once per hour; a cleared alert is removed
  • (typhosj) the vehicle is named after its model without doubling it (ZOE instead of ZOEZOE); a name given by the user is kept
  • (typhosj) the vehicle list and details are loaded again every 24 hours, new vehicles are picked up, and the details channel is named "Vehicle details"
  • (typhosj) fewer requests against Renault's quota of about 60 per hour: slow-changing data such as the charge history is fetched once per hour, and the adapter warns once when its settings need more requests than the quota allows
  • (typhosj) when the request quota is used up (429), polling pauses for 15, 30 and then 60 minutes instead of logging an error per endpoint; a command that meets the quota error starts the pause too
  • (typhosj) an expired token during a poll is refreshed and the poll repeated once; after a failed token refresh the adapter logs in again with growing delay; only wrong credentials stop the login, a temporary error of the account service is retried
  • (typhosj) an endpoint the car rejected is asked again once a day instead of never until restart; an answer without data counts as not supported; an endpoint with server errors for 24 hours is asked only hourly, and its server error is logged once as warning
  • (typhosj) login and requests use the country from the settings instead of always Germany; the settings offer the countries of the My Renault app as a list
  • (typhosj) the Kamereon API key lookup accepts only a well-formed key; an invalid key in the settings is ignored with a warning, and the link to the current key in the settings points to renault-api, where the lookup reads it
  • (typhosj) polls no longer overlap, requests time out after 30 seconds, no timer survives a stop of the instance, and the adapter only listens to its remote states
  • (typhosj) the log no longer contains the vehicle list, the position of the car or the whole answer to a failed login
  • (typhosj) a vehicle whose VIN contains characters other than letters and digits is skipped with a warning
  • (typhosj) an invalid number of charge history entries or an unknown brand in the settings is replaced by the default with a warning; more than 1000 entries are capped at 1000
  • (typhosj) the adapter icon and readme links point to the main branch again
  • (typhosj) lint uses the shared @iobroker/eslint-config; dependencies updated

0.0.25

  • (typhosj) retry the connection with growing delay (5 to 60 minutes) when login or vehicle list fail at startup; a login rejected by the account service is not retried
  • (typhosj) info.connection is true only after the account was found and turns false when the token refresh fails
  • (typhosj) a temporary server error (5xx) on the first poll no longer disables that endpoint until restart
  • (typhosj) fix crash for vehicles without vehicle details and for the refresh button before login
  • (typhosj) no longer write password, session cookie, id token or account data into the log
  • (typhosj) add missing admin translations, remove unused dependencies
  • (typhosj) require Node.js 22 or newer, test with Node.js 26, update dependencies

0.0.24

  • (TA2k) add Alpine support: brand selection (Alpine accounts use the same Renault Gigya/Kamereon tenant, only product/account type MYALPINE differs)

0.0.23

  • (TA2k) align API headers with My Renault Android app, drop EOL Node 18/20, migrate admin UI to jsonConfig

License

MIT License

Copyright (c) 2021-2026 TA2k tombox2020@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.