# Script för uppdatering av SOC på icke supporterade bilar i Tibber

**URL:** <https://community.homey.app/t/script-for-uppdatering-av-soc-pa-icke-supporterade-bilar-i-tibber/154942>\
**Category:** 🇸🇪 Svenska (Swedish)\
**Created:** [May 15, 2026, 10:21pm UTC](https://community.homey.app/t/script-for-uppdatering-av-soc-pa-icke-supporterade-bilar-i-tibber/154942 "2026-05-15T22:21:33Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michael\_Edholm](https://avatars.discourse-cdn.com/v4/letter/m/bc79bd/32.png) [@Michael\_Edholm](https://community.homey.app/u/Michael_Edholm)\
**Post date:** [May 15, 2026, 10:21pm UTC](https://community.homey.app/t/script-for-uppdatering-av-soc-pa-icke-supporterade-bilar-i-tibber/154942/1 "2026-05-15T22:21:33Z")

</div>

Vibekodade ihop ett HomeyScript för att uppdatera SOC på min EV som inte har appstöd hos Tibber.

Skapa ett homey script med nedan kod och fyll i username/password/homeID och VehicleID.

> Blockquote  
> // HomeyScript: push\_soc\_to\_tibber  
> //  
> // Pushes the Zeekr battery level (State of Charge) to Tibber.  
> // Mirrors the Home Assistant tibber\_soc\_updater custom integration.  
> //  
> // Setup:  
> // 1. Fill in TIBBER\_EMAIL, TIBBER\_PASSWORD, TIBBER\_VEHICLE\_ID, TIBBER\_HOME\_ID below.  
> // 2. Create this as a HomeyScript in the Homey app.  
> // 3. Create a flow:  
> // Trigger: Battery level changed  
> // Condition: Battery level is greater than 0  
> // Action: Run HomeyScript “push\_soc\_to\_tibber”  
> // At the moment Tibber has 83% SOC while actual is 87%  
> const TIBBER\_EMAIL = ‘e-mail’; // ← fill in  
> const TIBBER\_PASSWORD = ‘password’; // ← fill in  
> const TIBBER\_VEHICLE\_ID = ’ '; ← fill in Can be extracted from [https://app.tibber.com/](https://app.tibber.com/)  
> const TIBBER\_HOME\_ID = ’ '; ← fill in Can be extracted from [https://app.tibber.com/](https://app.tibber.com/)  
> const TIBBER\_LOGIN\_URL = ‘[https://app.tibber.com/login.credentials](https://app.tibber.com/login.credentials)’;  
> const TIBBER\_GQL\_URL = ‘[https://app.tibber.com/v4/gql](https://app.tibber.com/v4/gql)’;  
> const GQL\_HEADERS = {  
> ‘Accept-Language’: ‘en’,  
> ‘x-tibber-new-ui’: ‘true’,  
> ‘User-Agent’: ‘Tibber/25.20.0 (versionCode:2520004 Dalvik/2.1.0 (Linux; U; Android 10; Android SDK built for x86\_64 Build/QSR1.211112.011))’,  
> ‘Content-Type’: ‘application/json’,  
> ‘Accept’: ‘application/graphql-response+json, application/json’,  
> ‘Origin’: ‘[https://app.tibber.com](https://app.tibber.com)’,  
> ‘Referer’: ‘[https://app.tibber.com/](https://app.tibber.com/)’,  
> };  
> // SOC comes from the flow tag (args is a plain string); fall back to 78 for manual test runs  
> const batteryLevel = (args !== undefined && args !== null && args !== ‘’) ? parseInt(args, 10) : 78;  
> const loginRes = await fetch(TIBBER\_LOGIN\_URL, {  
> method: ‘POST’,  
> headers: { ‘Content-Type’: ‘application/x-www-form-urlencoded’ },  
> body: `email=${encodeURIComponent(TIBBER_EMAIL)}&password=${encodeURIComponent(TIBBER_PASSWORD)}`,  
> });  
> if (!loginRes.ok) throw new Error(`Tibber login failed: ${loginRes.status}`);  
> const { token } = await loginRes.json();  
> if (!token) throw new Error(‘Tibber login returned no token’);  
> const mutation = ` mutation SetVehicleSettings($vehicleId: String!, $homeId: String!, $settings: [SettingsItemInput!]) { me { setVehicleSettings(id: $vehicleId, homeId: $homeId, settings: $settings) { __typename } } }`;  
> const gqlRes = await fetch(TIBBER\_GQL\_URL, {  
> method: ‘POST’,  
> headers: { …GQL\_HEADERS, Authorization: `Bearer ${token}` },  
> body: JSON.stringify({  
> query: mutation,  
> variables: {  
> vehicleId: TIBBER\_VEHICLE\_ID,  
> homeId: TIBBER\_HOME\_ID,  
> settings: [{ key: ‘offline.vehicle.batteryLevel’, value: batteryLevel }],  
> },  
> }),  
> });  
> if (!gqlRes.ok) throw new Error(`Tibber mutation failed: ${gqlRes.status}`);  
> const gqlData = await gqlRes.json();  
> if (gqlData.errors) throw new Error(`Tibber GraphQL error: ${JSON.stringify(gqlData.errors)}`);  
> return `Pushed SOC ${batteryLevel}% to Tibber`;

Ladda ner och installera Homey Script App.  
Skapa ett flow där Action triggers är att SOC ändras på din bil.  
Lägg därefter till att Homey Script skall köra ovan script med SOC som input.

//M
