Connect your Porsche Taycan, Macan EV, Panamera PHEV (any Porsche Connect vehicle) to Shelly virtual components via the unofficial Porsche Connect API.
β οΈ This uses an unofficial API. Porsche may change it at any time. An active Porsche Connect subscription is required.
By bridging your Porsche to the Shelly ecosystem you unlock the full power of smart home automation:
Set recurring schedules directly in the Shelly app β preheat or pre-cool the cabin every weekday at 7:45 AM without touching the My Porsche app.
Shelly logs all component values over time. Track your battery level trends, charging patterns and range degradation through built-in charts β weeks and months of history.
Trigger push notifications when charging starts or finishes. Get alerted if charging unexpectedly stops (e.g. cable disconnected, power outage) β directly to your phone via the Shelly app.
When the Taycan starts charging (Charging kW > 0), automatically turn off other high-power loads β water heater, dryer, dishwasher β to stay within your home's power limit. When charging ends, restore them automatically.
How: Porsche Connect does not support remotely starting/stopping charging. Connect those other loads (not the EV charger) to Shelly relays β the script tells Shelly when the car is charging, Shelly handles the rest.
Set the charging target via the Porsche app (e.g. 80%) β the car stops automatically. Use Shelly to notify you when the target is reached, or trigger other automations at that point.
Note: Direct start/stop of charging is not available through Porsche Connect. To control the charger power itself you need a Shelly relay or smart plug between the wall outlet and the charger.
Monitor solar production with a Shelly energy meter. When solar output exceeds home consumption, send a push notification or trigger a scene reminding you to plug in. When solar drops, get alerted.
Full automation (auto start/stop the charger based on solar) requires a Shelly relay on the charger power supply β then use the
Charging kWandBattery %values from this script as triggers.
A lightweight FastAPI server acts as a bridge between Porsche Connect and your Shelly device:
| Shelly Component | Data |
|---|---|
number:200 Battery % |
Current state of charge |
number:201 Climate temp Β°C |
Target temperature for climate (slider) |
number:202 Charging kW |
Active charging power |
boolean:200 Climate |
Toggle to start/stop remote climatisation |
boolean:201 Locked |
Vehicle lock status |
boolean:202 Doors |
All doors and lids closed? |
boolean:203 Charging |
True when power is actively flowing (kW > 0) |
Best option for non-technical users. Free tier β kept alive by the Shelly 10-min poll.
Click Fork (top right) β Fork to your GitHub account.
- Go to render.com β Sign up (free) β New β Web Service
- Connect your GitHub account β select your fork of this repo
- Render auto-detects the
Dockerfileβ - Set these Environment Variables in the Render dashboard:
| Variable | Value |
|---|---|
PORSCHE_EMAIL |
your-myporsche@email.com |
PORSCHE_PASSWORD |
your-password |
PORSCHE_OVERVIEW_MODE |
stored |
REFRESH_INTERVAL_MINUTES |
10 |
PORSCHE_TOKEN_FILE |
/tmp/porsche_token.json |
- Click Deploy β wait ~2 min
- Copy your URL:
https://porsche-connect-xxxx.onrender.com
π‘ Why free tier works: Render's free plan sleeps after 15 min of inactivity. The Shelly script polls every 10 minutes β keeping the server always awake.
Open your Render URL in browser β you'll see the login page.
Default password: porsche β change it immediately in Settings!
Settings β My Porsche Account β enter email + password β Save.
The server will connect to Porsche and cache your vehicle data.
Settings β API Key β Copy. You'll need it for the Shelly script.
- Shelly Pro or Gen2+ device (1PM Mini Gen3, Pro 4PM, Plus 1, etc.)
- Firmware β₯ 1.1.0 (for virtual components support)
Go to your Shelly web UI β Components β Add virtual component:
| Type | ID | Label | View |
|---|---|---|---|
| Number | 200 | Battery % | label |
| Number | 201 | Climate temp Β°C | slider (min: 10, max: 30) |
| Number | 202 | Charging kW | label |
| Boolean | 200 | Climate | toggle |
| Boolean | 201 | Locked | label |
| Boolean | 202 | Doors | label |
| Boolean | 203 | Charging | label |
- Shelly web UI β Scripts β Create script
- Name:
Porsche Connect - Paste the contents of
shelly_porsche.js - Edit the top 3 variables:
var API_BASE = "https://YOUR-RENDER-URL.onrender.com"; // your Render URL
var API_KEY = "your-api-key-from-settings"; // from Settings β API Key
var VIN = "WP0ZZZY1XXXXXXXX"; // your VIN (My Porsche app β Vehicle)- Save β Start
In the script console you should see:
[Porsche] Script started. VIN=WP0ZZZY... poll=600s
[Porsche] Polling...
[Porsche] Battery: 86%
[Porsche] Climate ON: false
[Porsche] Locked: true
[Porsche] Doors closed: true
[Porsche] Charging kW: 10.25
Open the Shelly app β your device β the Porsche virtual device will appear with all components. Customize the name, icon and room from the app.
git clone https://github.com/kmetabg/porsche-ev-shelly-connector.git
cd porsche-ev-shelly-connector
cp .env.example .env
# Edit .env β add PORSCHE_EMAIL and PORSCHE_PASSWORD
docker compose up -dOpen http://localhost:8000 β login with password porsche.
Any vehicle with an active Porsche Connect subscription:
| Model | From |
|---|---|
| Taycan (all variants) | 2019 |
| Macan EV | 2024 |
| Panamera (PHEV) | 2021 |
| Cayenne (E-Hybrid) | 2017 |
| 911 | 992 (2019) |
| Boxster / Cayman 718 | 2016 |
Check connect-store.porsche.com to confirm your model is supported.
All endpoints require ?api_key=YOUR_KEY or header X-API-Key: YOUR_KEY.
| Method | Endpoint | Description |
|---|---|---|
| GET | /health |
Server + cache status |
| GET | /vehicles |
List vehicles from cache |
| GET | /vehicles/{vin}/battery |
Battery, charging, doors, lock status |
| GET | /vehicles/{vin}/climate/start?temperature=21 |
Start climate (async, instant response) |
| GET | /vehicles/{vin}/climate/stop |
Stop climate (async, instant response) |
| POST | /refresh |
Force cache refresh from Porsche API |
The /climate/start and /climate/stop endpoints return immediately with {"status": "PENDING"} β the command runs in the background. The Shelly script polls every 5 seconds to detect when the car confirms the action.
- pyporscheconnectapi by Johan Isaksson β the Python library that makes this possible
- Porsche Connect API reverse-engineered by the open-source community
This project is not affiliated with or endorsed by Porsche AG. It uses an unofficial API that may break at any time. Use at your own risk.


