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
- Install the adapter via the ioBroker admin UI.
- Open the adapter configuration and enter the credentials of your My Renault (or My Dacia / My Alpine) account: app email and app password.
- Select the brand of your app:
Renault / Daciafor My Renault and My Dacia,Alpinefor My Alpine. All three apps log in at the same Renault service; the brand decides which account of your login the adapter uses. - Select the country of your account in the app.
- Click Test login to check email and password before saving. The instance must be running for the button to work.
- Optionally set the polling interval in minutes and the API key (leave empty for auto-detect).
- 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
| Model | Code | Battery | Cockpit | Climate | Charging start | Charging stop | Charge limits | Horn / lights | Tyre pressure | Alerts |
|---|---|---|---|---|---|---|---|---|---|---|
| Arkana E-tech full hybrid | XJL2TR | ? | yes | ? | ? | ? | ? | ? | no | ? |
| AUSTRAL | XHN1SU | no | yes | no | no | no | no | yes | no | ? |
| CAPTUR II | XJB1SU | yes | yes | yes | no | no | no | no | no | ? |
| CAPTUR II GPL | XJB2SU | no | yes | no | no | no | no | yes | no | no |
| CLIO V | XJA1VP | no | yes | no | no | no | no | no | no | no |
| CLIO V | XJA2VP | no | yes | no | no | no | no | no | no | no |
| MEGANE E-TECH | XCB1VE | yes | yes | yes | yes | no | yes | yes | no | ? |
| Megane IV | XFB2BI | yes | yes | ? | ? | ? | ? | ? | no | ? |
| Megane IV Break (E-Tech Plug-in Hybrid) | XFB2BK | yes | yes | yes | yes | ? | ? | no | no | ? |
| Rafale | XHN1CP | yes | yes | ? | no | no | ? | yes | no | ? |
| Renault 5 E-TECH | R5E1VE | yes | yes | yes | yes | no | yes | yes | no | yes |
| Renault Espace VI (OpenRLink) | XHN1ML | no | yes | no | no | no | no | yes | no | no |
| Renault Master E-Tech | XDD1VE | yes | yes | yes | yes | no | yes | yes | no | ? |
| Renault R4 E-Tech | A4E1VE | yes | yes | yes | yes | no | yes | yes | no | ? |
| Renault Symbioz 2025 | XJB2CP | no | yes | no | no | no | no | yes | no | ? |
| SCENIC E-TECH | XCB1SE | yes | yes | yes | yes | no | yes | yes | no | ? |
| TWINGO III | X071VE | yes | yes | ? | ? | ? | ? | ? | no | ? |
| ZOE phase 1 | X101VE | yes | yes | yes | yes | ? | no | ? | no | ? |
| ZOE phase 2 | X102VE | yes | yes | yes | yes | yes | no | no | yes | ? |
Dacia
| Model | Code | Battery | Cockpit | Climate | Charging start | Charging stop | Charge limits | Horn / lights | Tyre pressure | Alerts |
|---|---|---|---|---|---|---|---|---|---|---|
| DACIA BIGSTER HYBRID 155 (no EV) | BD11SL | no | yes | ? | no | no | no | no | no | no |
| Dacia Duster III | DU31SU | no | yes | ? | ? | ? | no | no | no | ? |
| DACIA SANDERO III (ECO-G, petrol+LPG; engineEnergyType OTHER) | XJF2BI | no | yes | no | no | no | no | yes | no | no |
| DACIA SPRING | XBG1VE | yes | yes | yes | yes | yes | no | no | no | no |
Alpine
| Model | Code | Battery | Cockpit | Climate | Charging start | Charging stop | Charge limits | Horn / lights | Tyre pressure | Alerts |
|---|---|---|---|---|---|---|---|---|---|---|
| Alpine A290 | A5E1AE | yes | yes | yes | yes | no | yes | yes | no | no |
Remote control
Each vehicle is created as a device using its VIN. Remote commands are exposed as states under renault.0.<VIN>.remote.*:
| State | Type | Role | Action |
|---|---|---|---|
climateStart | boolean | button.start | start the climate control |
climateStop | boolean | button.stop | stop the climate control |
climateTemperature | number | level.temperature | target temperature in °C for the next start (default 21) |
chargingStart | boolean | button.start | start charging (see below) |
chargingStop | boolean | button.stop | stop charging |
chargeLimitMin | number | level | minimum charge level in %, 15 to 45 in steps of 5 |
chargeLimitTarget | number | level | target charge level in %, 55 to 100 in steps of 5 |
chargeMode | string | text | always, always_charging, schedule_mode or scheduled; shows the mode the car reports |
hornStart | boolean | button.start | sound the horn |
lightsStart | boolean | button.start | flash the lights |
refreshLocation | boolean | button | read the location from the cloud now |
askForLocationRefresh | boolean | button | ask the car to upload its position, read the location 30 s later |
refreshAll | boolean | button | poll all vehicle data now |
refreshBattery | boolean | button | read the battery status from the cloud now |
refreshClimate | boolean | button | read the climate control status (hvac-status) from the cloud now |
lastCommandError | string | text | error 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
chargingStartswitches 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:
| Channel | Content |
|---|---|
charge-history | charges per day |
charges | single charges |
pressure | tyre pressure per wheel in mbar and a status code |
alerts | alerts of the car (Renault 5); a cleared alert is removed |
soc-levels | minimum 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-startbecomesclimateStartandclimateStop,hvac-temperaturebecomesclimateTemperature(default 21 °C, a valid old value is taken over),actions/charging-start,charge/pause-resumeandcharge/startbecomechargingStartandchargingStop, andrefreshbecomesrefreshAll. 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; thecockpitv2channel is removed - (typhosj) Breaking change: battery, range, mileage, fuel and temperature states get units and specific roles
- (typhosj)
battery-status.plugStatusandbattery-status.chargingStatusname their codes, for example1plugged or0.3waiting 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.lastCommandErrorholds the error of the last command - (typhosj)
chargingStartstarts 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.chargeLimitMinandremote.chargeLimitTargeton models that support it; the current limits are in the new channelsoc-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.hornStartandremote.lightsStarton models that support them;remote.refreshLocation,remote.refreshBatteryandremote.refreshClimateread only the location, the battery status or the climate control status from the cloud, andremote.askForLocationRefreshfirst 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 inlastCommandError - (typhosj) new channels
pressure(tyre pressure in mbar) andalerts(Renault 5), read once per hour; a cleared alert is removed - (typhosj) the vehicle is named after its model without doubling it (
ZOEinstead ofZOEZOE); 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
mainbranch 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.connectionis 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.