[APP][Pro] Swiss Dynamic Electricity Tariff – 15-minute prices for Innostrom/Swisspower tariffs

[APP][Pro] Swiss Dynamic Electricity Tariff – 15-minute prices for Innostrom/Swisspower tariffs (AEW Classic Dynamic & more)

Swiss Dynamic Electricity Tariff pulls your dynamic electricity tariff’s 15-minute prices straight into Homey, so you can run your big consumers (heat pump, EV, battery) automatically when power is cheapest.

What is this?

Swiss dynamic electricity tariffs change their price every 15 minutes instead of once a year. This app brings those prices into Homey, using the Innostrom API from Swisspower, so your heat pump, EV, boiler or battery can run when electricity is cheapest. AEW is introducing its “Classic Dynamic” tariff in 2027 and the app was built for it. It works with any Swiss utility on the same Innostrom platform.

What can it do?

Prices

  • Fetches today’s and tomorrow’s quarter-hourly prices automatically (tomorrow’s as soon as they are published).
  • Current price, next price, today’s low/high/average, rank of the current slot, and a price level (very cheap … very expensive).
  • Prices survive app restarts; the last update time is shown on the device.

Three dashboard widgets

  • Price: current price and level, the cheapest 2-hour block and today’s/tomorrow’s curve with your old tariff as a reference line. One tap overlays your grid import.
  • Price list: all 24 hours in a grid, color-coded, with the cheapest and most expensive block marked and quarter-hours on tap.
  • Costs: your accumulated cost against your old tariff.

[SCREENSHOT: the three widgets]

Cost comparison (optional) Report cumulative meter readings from a Flow (grid import/export, battery, single consumers like an EV or heat pump) and the app shows costs, savings and the battery benefit against your old tariff, which you enter directly or calculate from your bill. No extra permissions are needed.

  • A read-only battery analysis shows what an optimal charging plan would have brought, within a charge range you set, and an efficiency score (how much of that best case your real days achieved).
  • Optional device values for the tile and for Flows: cost today, cost with your old tariff, savings today / this month, average import price, feed-in price, battery efficiency. You choose which ones appear in the device settings (“Displayed values”).
  • A daily “The day has been summarised” trigger gives you yesterday’s numbers for a notification.

Keeping an eye on things

  • A Status card in the app overview shows when prices were last fetched, how many quarter-hours you have for today and tomorrow, the last error and when each meter reading last arrived.
  • If meter readings that you report from a Flow stop arriving, the app warns you (threshold in hours, default 1 h): an alarm value on the device, Flow cards, and optionally one timeline message per incident. Only meters you have reported at least once are watched; if you report nothing, you never get a warning.
  • Your cost data is backed up automatically every night and survives removing and re-adding the device. You can also export and import the backup as text.

App settings page Overview with live values and status, curve or hourly table, a Costs tab (page through the last 14 days), setup checklist, VAT, reference tariff, battery, monitoring, backup and data tools, and buttons to test your Flows. English, German, French and Italian, light and dark.

Flow cards (26)

  • When (9): the price changed; the day has been summarised (yesterday’s costs and savings); meter readings stopped arriving / are arriving again; the price rises above / drops below a threshold (only fires when crossing it); tomorrow’s prices are available; no prices for tomorrow at 18:30; the cheapest block begins.
  • And (6): meter readings are missing; price below X; price level is X; the current slot is among the N cheapest / most expensive hours of a window; the current slot is in the cheapest contiguous block.
  • Then (11): find the cheapest block in a fixed daily window, from now until a time, or within the next N hours; get today’s / tomorrow’s 24 hourly prices as a JSON array for EMS apps (unit Rp. or CHF per kWh, VAT and decimals are configurable in the app settings); reload prices now; report meter counters (grid import/export, battery charge/discharge, single consumers) for the cost comparison.

Setup

You need the metering point number (EAN) and the API token from your grid operator. Both are entered when you add the device; the token stays on your Homey and is never logged. The settings guide further down this thread explains every setting, with example Flows.

About this app

Homey Pro only, no special permissions, no cloud beyond the Innostrom API. The app only provides prices, Flow cards and calculations; it does not control any device by itself. Source code and issues: GitHub. Feedback and questions are welcome right here in the thread.

Support the development

Building, testing and maintaining this app takes a lot of time, and I’m happy to keep doing it. If it helps your smart home run smarter and you’d like to say thanks, a coffee (or a beer) is always appreciated.

PayPal | Buy Me a Coffee

Settings guide and FAQ (v0.2.3)

1. Pairing

You need two things from your grid operator: the metering point number (33 characters, starts with CH...) and the API token. Enter both when you add the device. A wrong token or a wrong number both come back as HTTP 403, so the app names both in the error message.

If the token is rejected later, open the device and use Repair with the same metering point.

Test environment: Innostrom has a public test environment with constant dummy prices. If you pair with the published test metering point and token, the device switches to test automatically. Production credentials do not work there. Constant prices therefore mean you are on the test environment.

2. The app settings page (Settings → Apps → this app)

The page has four tabs.

Overview

Live values (current price, level, next price, rank, low/average/high), a Status card (below) and the price curve with your reference tariff as a dashed line. “Chart | Table” switches to an hourly grid: tap an hour to see its four quarter-hours. The green/red edge marks the cheapest/most expensive 2-hour block, and “from now” shows the cheapest block that is still ahead.

The Status card sits under the live values. It shows when prices were last fetched and when the next fetch is planned, how many quarter-hours you have for today and tomorrow, the last error, the environment (production or test), and when each reported meter reading last arrived. It turns amber or red when something needs your attention, for example when tomorrow’s prices are still missing or when meter readings stop arriving.

Costs

Costs and savings against your reference tariff for today, week, month and total, consumers (EV, heat pump), the battery analysis (with the efficiency per day and overall) and the curves. Use the arrows to page through the last 14 days. The 30-day view unlocks once seven days of data exist.

Settings

Collapsible sections: Setup (a 3-step checklist that folds away when done), General (VAT, and under “Advanced” how feed-in is valued), Hourly prices for an EMS (unit, VAT and decimals of the hourly price list), Appearance (automatic / light / dark), Reference tariff, Battery, Meter readings, Monitoring (when to warn about missing meter readings), Test Flows (buttons that fire the new triggers right away), Backup and Manage data.

Help

Features, recommended settings and the link to this thread.

The page is available in English, German, French and Italian, following the language of your browser or phone.

3. Device settings (gear icon on the device)

Setting What it does
Price used for Flows Total (energy + grid), Energy only, or Grid only. Total is the one that matters for decisions.
Fallback price Used when a day has no prices; 0 turns it off.
Price level thresholds Percent of the daily average. Defaults: very cheap below 75, cheap below 90, expensive above 110, very expensive above 125.

Displayed values. Optional values you can add to the device tile and use in Flows. They are the same numbers as in the Costs tab.

Setting What it does
Cost values Cost today, cost with your old tariff, savings today and this month, average import price. Automatic (only once meter readings arrive), always, or never.
Battery analysis values Battery efficiency and the value of grid charging. Automatic (only if you report battery meters), always, or never.
Feed-in price Checkbox, on by default: shows the feed-in price from the API.

VAT (default 8.1 %, added to the API prices, which are excluding VAT) is set once in the app settings, not per device.

4. When prices are fetched

  • On app start: today and tomorrow.
  • Daily from 16:05: tomorrow’s prices, retried every 15 minutes until 23:45 if incomplete.
  • At 18:30 without tomorrow’s prices: the alarm turns on and the fallback price applies.
  • Network or server errors: retries after 1, 2, 5, 10 and 15 minutes.
  • If today’s price is missing when you open the app settings, the app reloads it by itself (at most every 5 minutes).
  • The Status card shows all of this live: last fetch, next planned fetch, failed attempts in a row and the last error.

Backup: every night at 03:30 and when the device is removed, the app saves your cost data in the app settings. See “Backup and monitoring” below.

5. Dashboard widgets

Add them from the Homey dashboard editor.

  • Innostrom price: current price, level, next price, rank, low/average/high, the cheapest 2-hour block and today’s and tomorrow’s curve with the reference line. The Grid import button overlays the kWh you bought from the grid.

  • Innostrom price list: 24 hours as a grid with day tabs, cheapest and most expensive block, tap an hour for its quarter-hours.

  • Innostrom costs: accumulated cost with the dynamic tariff against the reference tariff.

6. Cost comparison: how the numbers get in

The app does not read other devices. You report cumulative meter readings from a Flow:

  1. In the app settings, enter your reference tariff (your old import and feed-in price), directly or with the calculator from the lines of your bill.
  2. Create a Flow: When Time: every 15 minutes, Then “Report grid import counter” (and export, battery charge/discharge, and “Report consumer counter” for an EV or heat pump). In the counter field pick your meter’s cumulative kWh value (the one that keeps counting up, not W and not “today”).
  3. The first report only sets the baseline; from the second one on the kWh are priced.

7. Example Flows with prices

Run a consumer in the cheapest hours (boiler, heat pump)

  • When “The cheapest block of 3 hours between 20:00 and 06:00 begins”
  • Then switch the boiler on, and switch it off again with a delay of 3 hours. The trigger card gives you the average price and the end time as tokens.

EV charging only in the cheapest block

  • When “The price has changed” (every quarter-hour)
  • And “Now is in the cheapest block of 4 hours between 18:00 and 07:00”
  • Then start charging. Make a second Flow with the condition inverted to stop.

Plan for tomorrow

  • When “Tomorrow’s prices are available”
  • Then “Find the cheapest block of 2 hours between 11:00 and 16:00” and use the start/end tokens in a notification or to schedule your consumer.

Feed an energy management app with hourly prices

  • When “Tomorrow’s prices are available”
  • Then “Get tomorrow’s hourly prices” and hand the token to your EMS card. The token is a JSON array of 24 values, index 0 = 00:00-01:00. By default the values are Rp./kWh incl. VAT, for example [19.8,18.2,17.5,...].
  • The format of the list is set in the app settings (section “Hourly prices for an EMS”): Rp./kWh or CHF/kWh, with or without VAT, and the number of decimals. If your EMS expects CHF/kWh (like the Huawei FusionSolar EMS), choose CHF/kWh there and the list comes out as [0.198,0.182,0.175,...], so you do not need a HomeyScript to divide by 100.
  • On the spring-forward day the 02:00 hour does not exist, so this card fails that day instead of returning an incomplete array.

A message with yesterday’s numbers

  • When “The day has been summarised” (fires shortly after midnight)
  • Then send a notification with the tokens, for example “Yesterday: [[savings]] CHF saved, battery benefit [[batteryBenefit]] CHF, efficiency [[batteryEfficiency]] %”. Further tokens: import/export kWh, cost with the dynamic and the old tariff, average import price, value of grid charging. The very first night after updating to 0.2.3 stays silent, so you do not get a message for a day that was not tracked yet.
  • The app settings page has a button “Fire ‘day summarised’ (for yesterday)” to test the Flow right away.

Warn me when my meter readings stop

  • When “Meter readings stopped arriving”
  • Then send a notification with the tokens “Minutes since the last reading” and “Affected meters”. Add a second Flow When “Meter readings are arriving again” for the all-clear.
  • Alternatively use the condition “Meter readings are missing” in any Flow. The same state is also a device value (“Meter readings missing”) and, if enabled, one message in the timeline per incident.

Not on the dynamic tariff yet? Put a Logic yes/no variable (“dynamic tariff active”) in front of your price Flows, so they only run from your start date.

8. Backup and monitoring

Backup

The app saves your cost data every night at 03:30 and when you remove the device. The backup lives in the app settings, so it survives re-adding the device. If a new device has no cost data, the Costs tab offers to restore it. In App settings, Settings tab, “Backup”, you can also save a backup right now, export it as text (to keep or to use on another Homey) and import text with a preview: it shows the period, the days and the totals, and whether you would merge or replace. The token is never part of a backup.

Monitoring

If you report meter readings from a Flow and they stop arriving for longer than the threshold (App settings, “Monitoring”, default 1 hour, 0 = off), the Status card turns amber, the device value “Meter readings missing” switches on and, if enabled, one timeline message is sent per incident. After 6 hours or six times the threshold (whichever is longer) it escalates to a red alarm. Only meters you have reported at least once are watched, and consumers (EV, heat pump) only if you tick them. If you do not report any meters, you never get a warning.

FAQ

Which utilities?

Any Swiss utility that offers its dynamic tariff via Innostrom (Swisspower). AEW Classic Dynamic (from 1 January 2027) is the first target.

Where do I get the metering point number and the token?

Your grid operator provides both when you sign up for its dynamic tariff. To just try the app, use the public test credentials (see Pairing): you get constant dummy prices.

Why are my prices constant?

You are on the Innostrom test environment (see Pairing). Real prices only come with your operator’s credentials.

HTTP 403 / credentials rejected?

A wrong token and a wrong metering point number both return 403, so check both. If the token was renewed, open the device and use Repair with the same metering point number. A different metering point needs a new device.

Requirements?

Homey Pro, no special permissions, no cloud access beyond the Innostrom API. The token stays on your Homey and is never logged or part of a backup.

Which languages?

English, German, French and Italian, following the language of your Homey or browser.

When are tomorrow's prices there?

Normally around 16:00. The app fetches from 16:05 and retries every 15 minutes until 23:45. If they are still missing at 18:30, the alarm turns on, the trigger “No prices for tomorrow yet at 18:30” fires and the fallback price applies.

Why does the total differ from my bill?

Fixed fees (base fee, metering fee) are not part of the 15-minute price. Check the VAT setting too (default 8.1 %, in the app settings).

Which price do the Flow cards use?

The device setting “Price used for Flows”: Total (energy + grid, the one that matters for decisions), Energy only, or Grid only.

How is the price level calculated?

As a percentage of the daily average. Defaults: very cheap below 75, cheap below 90, expensive above 110, very expensive above 125. You can change them in the device settings.

Daylight saving?

Days have 92 or 100 quarter-hours and the app handles that. On the spring-forward day the 02:00 hour does not exist, so “Get hourly prices” fails that day instead of returning an incomplete list.

Negative prices?

Handled like any other price. The cost comparison counts import at a negative price as income and export at a negative price as a cost (shown in a separate note).

Hourly prices for my EMS?

Use “Get today’s / tomorrow’s hourly prices” (JSON list of 24 values). Choose Rp./kWh or CHF/kWh, VAT and decimals in the app settings, section “Hourly prices for an EMS”, so you need no script. If you already convert with a script, remove it when you change the setting, otherwise the values are divided twice.

Where is the refresh button?

Gone. Use the Flow card “Reload prices now”. The app also reloads missing prices when you open its settings.

The widget does not update.

Widgets poll the app once a minute. A new price shows up at the start of the next quarter-hour. If a widget stays empty, open the app settings once: the app reloads missing prices by itself.

The Costs tab or widget shows nothing.

The app does not read your meters by itself. It needs a Flow that reports cumulative kWh counters (see “Cost comparison: how the numbers get in”) and a reference tariff. The first report only sets the baseline, so costs appear from the second report.

Which counter do I pick?

A cumulative kWh value that keeps counting up: total grid import and export, total battery charged and discharged, the total energy of an EV or heat pump. Not the power in W and not a “today” value that resets at midnight.

How often should I report the meter readings?

Every 15 minutes is ideal, at least hourly. After a long pause the increase is attributed to the last hour.

Is feed-in paid dynamically?

That depends on your grid operator. By default the cost comparison values feed-in like your reference tariff; under “Advanced” in the app settings you can use the API’s feed-in price instead.

Cost values on the device?

Device settings, group “Displayed values”: cost today, cost with your old tariff, savings today and this month, average import price, battery values and the feed-in price. Each is automatic, always or never (feed-in is a checkbox). Same numbers as in the Costs tab.

Yesterday's numbers as a message?

Use the trigger “The day has been summarised”. It fires shortly after midnight with yesterday’s costs, savings, average price, battery benefit and efficiency as tokens. The first night after updating to 0.2.3 stays silent. The app settings have a test button.

How do I start over with the cost data?

App settings, Settings tab, “Manage data”: delete single days or a consumer, reset the meter baselines (for example after replacing a meter) or delete all cost data. Every delete needs a second click, and price data and the reference tariff are always kept.

Does the app control my battery or my EV?

No. It only provides prices, Flow cards and the cost comparison. The battery analysis is a read-only calculation of what an optimal charging plan would have brought, with perfect foresight inside the charge range you set (default 5 to 90 %). Treat it as an upper bound, not a promise.

What does the battery efficiency mean?

The share, from 0 to 100 %, of the best possible battery benefit of a day that your real day achieved. Days with almost nothing to gain are ignored. It is an estimate: the meters change coarsely, so a day can even beat the plan. Also available as device values and in the daily trigger.

What is the value of grid charging?

What an optimal plan that may also charge from the grid at cheap prices would have gained over a plan using solar surplus only, in CHF. Only an estimate.

Which battery settings are used?

App settings, section “Battery”: usable capacity (kWh), maximum charge and discharge power (one value in kW), round-trip efficiency (%), and minimum and maximum charge level (default 5 to 90 %).

What does the Status card show? When does the app warn me?

It shows the last and next price fetch, the quarter-hours available for today and tomorrow, the last error and when each reported meter reading last arrived. If reported readings stop for longer than the threshold (app settings, “Monitoring”, default 1 hour, 0 = off), the card turns amber, the device value “Meter readings missing” switches on and, if enabled, one timeline message is sent per incident. Only meters you have reported at least once are watched.

How do I get notified when my meter readings stop?

Trigger “Meter readings stopped arriving” (tokens: minutes since the last reading, affected meters) and “Meter readings are arriving again” for the all-clear. The condition “Meter readings are missing” works in any Flow. The settings page has a test button.

Which meters are monitored?

App settings, “Monitoring”: tick the meters you report and want watched. Consumers such as an EV or heat pump are off by default.

Backup of the cost data? What if I remove the device?

The app backs up every night at 03:30 and when you remove the device, in the app settings, so it survives re-adding the device. If the new device has no cost data, the Costs tab offers to restore it. You can also export the backup as text and import it later or on another Homey, with a preview (merge or replace). The token is never part of a backup.

Several metering points?

You can add several devices and use them in Flows. The widgets, the app settings page and the cost comparison show the first device only.

Not on the dynamic tariff yet?

You can already try the app with the public test credentials. Put a Logic yes/no variable (“dynamic tariff active”) in front of your price Flows, so they only run from your start date.

Questions, bugs and feature wishes are welcome here in the thread or on GitHub.

placeholder (soon)

App is live now and rdy :slight_smile:

Update 0.2.1: costs, three widgets, battery analysis

Thanks to everyone who gave early feedback. This update turns the app from “show the price” into “show what the dynamic tariff does for you”.

Three dashboard widgets

  • Price: the curve with a reference line and the cheapest 2-hour block. A “Grid import” button overlays what you bought from the grid.
  • Price list: all 24 hours in a grid, color-coded, with the cheapest and most expensive block marked. Tap an hour for its quarter-hours.
  • Costs: your accumulated cost against your old tariff.

Cost comparison against your old tariff Report cumulative meter readings from a Flow (grid import/export, battery, single consumers like an EV or heat pump) and see costs, savings and the battery benefit, per day, week, month and in total. Enter your old tariff directly or calculate it from the lines of your bill, with validity periods for price changes and an optional fixed-cost difference. No extra permissions are needed.

Battery analysis (read-only) For every full day the app recomputes what an optimal charging plan would have earned, inside a charge range you set (default 5 to 90 %). Nothing is controlled. It is an upper bound with perfect foresight, so treat it as a guide, not a promise.

Settings page Four tabs (Overview, Costs, Settings, Help). Page through the last 14 days in the Costs tab. The price table shows an hourly grid with the cheapest block of the day and from now on. There is now an appearance option (automatic, light, dark).

Smaller changes

  • The refresh button on the device tile is gone, which also removes the duplicate “Press the button” Flow card. The Flow card “Reload prices now” stays, and the app reloads missing prices when you open its settings.
  • Feed-in in the comparison is valued like your reference tariff by default, because it depends on your grid operator whether it is paid dynamically. “Advanced” switches to the API’s feed-in price.
  • VAT is now set once in the app settings instead of per device.

A note on the screenshots

All screenshots come from a live test with real data, but only about two days so far. Longer series (weeks of costs, the 30-day view, the battery analysis over many days) are not available yet, so the numbers you see are a first impression, not a result. I will add longer data as it comes in.

What I would like feedback on

  • Does the comparison match your first dynamic bill?
  • Is anything unclear in the settings page or the example Flows in the settings guide above?
  • If your grid operator pays dynamic feed-in to PV customers, please tell me which one, so I can verify the default.

The settings guide in this thread is updated for 0.2.1.

Update 0.2.2: hourly prices exactly as your EMS expects them

A small update for everyone who feeds an energy management system (EMS) with the hourly prices.

The cards “Get today’s hourly prices” and “Get tomorrow’s hourly prices” return a JSON list of 24 values. Until now it was always Rp./kWh including VAT. Many EMS apps expect CHF/kWh, so you needed a HomeyScript in between that divided by 100.

You can now set the format in the app settings, section “Hourly prices for an EMS”:

  • Unit: Rp./kWh or CHF/kWh
  • VAT: including or excluding
  • Decimals: 0 to 6, or empty for automatic (2 for Rp., 4 for CHF)

A preview underneath shows what the list will look like, for example [0.198, 0.189, 0.184, ...] for CHF/kWh incl. VAT with 3 decimals.

Nothing changes if you do not touch it. The default is still Rp./kWh incl. VAT.

The settings guide in this thread is updated for 0.2.2.

Update 0.2.3: backup, status, cost values and battery efficiency

A bigger update, all of it optional. Nothing changes in your Flows or widgets if you do not touch it.

Backup of your cost data
The cost data is now backed up automatically every night (and when you remove the device), so it survives removing and re-adding the device. If a new device has no cost data, the Costs tab offers to restore the backup. You can also export the backup as text and import it later or on another Homey, with a preview before you merge or replace. The token is never part of a backup.

Status card and meter monitoring
A new Status card in the app overview shows when prices were last fetched, the next planned fetch, how many quarter-hours you have for today and tomorrow, the last error, and when each reported meter reading last arrived. If meter readings that you report from a Flow stop arriving, the app now warns you:

  • threshold in hours, default 1 h, 0 = off (App settings, section “Monitoring”)
  • a new device value “Meter readings missing”, two new triggers (stopped arriving / arriving again) and a condition
  • optionally one timeline message per incident
  • you choose which meters (and optionally which consumers) are watched. Only meters you have reported at least once are watched, so if you do not report any, you never get a warning.

New values on the device
In the device settings, under “Displayed values”, you can switch on: cost today, cost with your old tariff, savings today and this month, average import price, and the feed-in price. They are the same numbers as in the Costs tab, available for the tile and for Flows.

“The day has been summarised” trigger
Fires shortly after midnight with yesterday’s numbers as tokens: import/export kWh, cost with the dynamic and the old tariff, savings, average import price, battery benefit, battery efficiency and the value of grid charging. Handy for a daily message. The settings page has buttons to fire this trigger (and the meter-readings warning) right away, so you can build and test your Flows.

Battery efficiency
The battery analysis now compares your real day with the best possible plan (perfect foresight, inside your charge range) and shows the share you reached, per day and overall, plus the value of grid charging. It is an estimate and only shown, never used to control anything. The numbers are also available as device values and as tokens of the daily trigger.

French and Italian
The app, its Flow cards and the settings page are now also available in French and Italian.

The first post and the settings guide in this thread are updated for 0.2.3.