Tibber [OH5]

I tried to install the marketplace-binding, but I keep getting this error:

Installation of add-on marketplace:164158 failed

I have already tried restarting openHAB, clearing the cache, and trying again, but the problem persists.

Sorry, my fault. Please try again

Now it works!

I receive all relevant data, and the price and cost channels are not present for me, as expected.
Thank you very much for your effort!

1 Like

I experience same problem as others. Since I upgraded OH4>5 I have issues with Tibber and my heater is again “dummy”, so:

  • Live data items works correctly - like energy consumption and volts taken from Tibber Pulse
  • Spot price and Price level items are always NULL

What I tried to do - upgrade from OH 5.1 stable to snapshot version, reinstalling the Tibber binding, trying Tibber marketplace version as well - nothing helped, same behavior.

Right now I stayed on OH 5.1.0-SNAPSHOT - Build #4788 and have official Tibber binding as per picture:

In the traces I found such errors as

2025-08-23 10:09:16.069 [ERROR] [xbase.resource.BatchLinkableResource] - resolution of uriFragment ‘|::0.2.0.2.0.10.0.0.1.1.0.0.2::0::/3’ failed.
java.lang.NullPointerException: null

and

2025-08-23 10:07:28.906 [ERROR] [xbase.resource.BatchLinkableResource] - resolution of uriFragment '|::0.2.0.2.0.6.0.0.1.1.0.0.2.1.0::0::/1' failed.
java.lang.NullPointerException: Cannot read field "actionServices" because the return value of "org.openhab.core.model.script.ScriptServiceUtil.getInstance()" is null
	at org.openhab.core.model.script.ScriptServiceUtil.getActionServices(ScriptServiceUtil.java:123) ~[?:?]
	at org.openhab.core.model.script.scoping.ActionClassLoader.loadClass(ActionClassLoader.java:36) ~[?:?]
	at java.lang.Class.forName0(Native Method) ~[?:?]
...

While reading this thread I found this advice:

Please double check if all items from price group are connected to a forecast persistence strategy. Similar to solarforecast binding these are future values showing the day-ahead info with price, level and average24h values.

But I don’t have any persistance enabled in my OH. In fact I don’t need it as I initialize all important item values in my startup rule of OH and it works perfect. And I do not want to increase load on CPU and disk for storing persistance data´in DB. So I simply do not need it.

But is it maybe requirement for Tibber since OH5 to have the persistance Add-On? Could you please confirm that?

I have not try activating rrd4j add-on yet, but still would like to avoid it.

My heater became dummy since OH5 update since I do not manage it by the Tibber price levels anymore for quite a long time. However recently I managed to find an “ugly workaround” - I have written the python html-parsing script that takes data from the table on the HTML page https://elspot.nu/dagens-spotpris/timpriser-pa-elborsen-for-elomrade-se3-stockholm/ and then convert those into text file, which is then parsed by OH rule every hour. That works but is defenitely not optimal and a lot of code is involved…

In fact I don’t have experience without any persistence installed in an OH system. Especially if you mention “I initialize all important item values in my startup rule of OH and it works perfect” looks like you’re doing some kind of refresh, otherwise the value from the previous lifecycle cannot be obtained without being stored before.

But I think I understand your point so let’s dig into it:

I would say yes, you need a persistence addon, see below.

Correct, don’t do it as rrd4j doesn’t support future values. It will not help!

I don’t know the complete history when forecast TimeSeries were introduced but I know the core developers were aware that not everbody has a database service installed likeinfluxdb, mysql,… . So inmemory persistence was introduced - no database, no storage on disc just temporary RAM. I think this shall fufill your requirements

I would ask you to give it a try

  • Install inmemory persistence addon
  • Add price items to configuration (example picture below) and save configuration
  • Shortly disable Tibber thing and enable again to refresh values
  • FYI - after startup Tibber binding refreshes prices automtically so there’s no restore values necessary

Thousand thanks @weymann for a very prompt response, much appreciated!

I now tried your recommendations and now all works as a charm! :+1:

InMemory persistance configuration is:

And after disabling / enabling the thing, the result became:

2025-08-24 14_36_28-Window

2025-08-24 14_36_55-Window

Greaaaaat! Thanks :wink:

1 Like

I’m slightly confused right now! :wink:
should i use the core-binding or the markeplace-binding? My understanding was, that the core-binding is the way to go and the Marketplace one “Tibber [OH5]” is deprecated? But it was currently updated 5 days ago? :wink:

*EDIT: *
the following changed since 13h and now I get timeseries for all “future” items like price, average24h and level.
… question above still stands! :wink:

works now since 13h!

I ask, because on my sandbox OH5 I do get updates and everything works fine, but on my production OH5 (both docker 5.0.1 btw) I don’t. There’s no updates on non-live items. I do get those in events.log:

2025-08-29 11:12:26.204 [INFO ] [openhab.event.ItemTimeSeriesEvent   ] - Item 'TIB_Current_Total_Price' shall process timeseries with 24 values.
2025-08-29 11:12:26.211 [INFO ] [openhab.event.ItemTimeSeriesEvent   ] - Item 'TIB_SpotPrices' shall process timeseries with 24 values.
2025-08-29 11:12:26.221 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item 'TIB_Current_Total_Price' updated timeseries with 24 values.
2025-08-29 11:12:26.221 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item 'TIB_SpotPrices' updated timeseries with 24 values.
(...)
2025-08-29 11:12:53.003 [INFO ] [openhab.event.ItemTimeSeriesEvent   ] - Item 'TIB_Average24h' shall process timeseries with 0 values.
2025-08-29 11:12:53.005 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item 'TIB_Average24h' updated timeseries with 0 values.

interestingly enough, there’s a roughly 30sec gap between timeseries for price/level and average?

that’s the openhab.log:

2025-08-29 11:11:54.033 [DEBUG] [ibber.internal.handler.TibberHandler] - try to get bundleresource://372.fwk1159694255/graphql/currency.graphql
2025-08-29 11:11:54.036 [TRACE] [ibber.internal.handler.TibberHandler] - Query with body {"query":"{  viewer {    home(id: \"xxx\") {      currentSubscription {        priceInfo {          current {            currency          }        }      }    }  }}"}
2025-08-29 11:11:54.197 [TRACE] [ibber.internal.handler.TibberHandler] - doInitialze response 200 - {"data":{"viewer":{"home":{"currentSubscription":{"priceInfo":{"current":{"currency":"EUR"}}}}}}}

2025-08-29 11:11:54.197 [TRACE] [ibber.internal.handler.TibberHandler] - Currency is set to €
2025-08-29 11:11:54.199 [DEBUG] [ibber.internal.handler.TibberHandler] - try to get bundleresource://372.fwk1159694255/graphql/prices.graphql
2025-08-29 11:11:54.255 [TRACE] [ibber.internal.handler.TibberHandler] - updatePrices response 200 - {"data":{"viewer":{"home":{"currentSubscription":{"priceInfo":{"tomorrow":[],"today":[{"startsAt":"2025-08-29T00:00:00.000+02:00","total":0.2642,"level":"NORMAL"},{"startsAt":"2025-08-29T01:00:00.000+02:00","total":0.2621,"level":"NORMAL"},{"startsAt":"2025-08-29T02:00:00.000+02:00","total":0.2619,"level":"NORMAL"},{"startsAt":"2025-08-29T03:00:00.000+02:00","total":0.2601,"level":"NORMAL"},{"startsAt":"2025-08-29T04:00:00.000+02:00","total":0.2618,"level":"NORMAL"},{"startsAt":"2025-08-29T05:00:00.000+02:00","total":0.2713,"level":"NORMAL"},{"startsAt":"2025-08-29T06:00:00.000+02:00","total":0.3029,"level":"NORMAL"},{"startsAt":"2025-08-29T07:00:00.000+02:00","total":0.3075,"level":"NORMAL"},{"startsAt":"2025-08-29T08:00:00.000+02:00","total":0.3058,"level":"NORMAL"},{"startsAt":"2025-08-29T09:00:00.000+02:00","total":0.2943,"level":"NORMAL"},{"startsAt":"2025-08-29T10:00:00.000+02:00","total":0.2633,"level":"NORMAL"},{"startsAt":"2025-08-29T11:00:00.000+02:00","total":0.2559,"level":"CHEAP"},{"startsAt":"2025-08-29T12:00:00.000+02:00","total":0.2433,"level":"CHEAP"},{"startsAt":"2025-08-29T13:00:00.000+02:00","total":0.2272,"level":"CHEAP"},{"startsAt":"2025-08-29T14:00:00.000+02:00","total":0.234,"level":"CHEAP"},{"startsAt":"2025-08-29T15:00:00.000+02:00","total":0.2499,"level":"CHEAP"},{"startsAt":"2025-08-29T16:00:00.000+02:00","total":0.2642,"level":"NORMAL"},{"startsAt":"2025-08-29T17:00:00.000+02:00","total":0.2877,"level":"NORMAL"},{"startsAt":"2025-08-29T18:00:00.000+02:00","total":0.304,"level":"NORMAL"},{"startsAt":"2025-08-29T19:00:00.000+02:00","total":0.3387,"level":"EXPENSIVE"},{"startsAt":"2025-08-29T20:00:00.000+02:00","total":0.3016,"level":"NORMAL"},{"startsAt":"2025-08-29T21:00:00.000+02:00","total":0.2962,"level":"NORMAL"},{"startsAt":"2025-08-29T22:00:00.000+02:00","total":0.2769,"level":"NORMAL"},{"startsAt":"2025-08-29T23:00:00.000+02:00","total":0.2654,"level":"NORMAL"}]}}}}}}

(...)
2025-08-29 11:13:54.201 [DEBUG] [ibber.internal.handler.TibberHandler] - try to get bundleresource://372.fwk1159694255/graphql/realtime.graphql
2025-08-29 11:13:54.346 [TRACE] [ibber.internal.handler.TibberHandler] - isRealtimeEnabled response 200 - {"data":{"viewer":{"home":{"features":{"realTimeConsumptionEnabled":true}}}}}

2025-08-29 11:13:54.357 [DEBUG] [r.internal.websocket.TibberWebsocket] - Starting Websocket connection
2025-08-29 11:13:54.399 [TRACE] [r.internal.websocket.TibberWebsocket] - getSubscriptionUrl response 200 - {"data":{"viewer":{"websocketSubscriptionUrl":"wss://websocket-api.tibber.com/v1-beta/gql/subscriptions"}}}

2025-08-29 11:13:54.563 [TRACE] [r.internal.websocket.TibberWebsocket] - Websocket send message {"type":"connection_init", "payload":{"token":"xxx"}}
2025-08-29 11:13:54.613 [DEBUG] [r.internal.websocket.TibberWebsocket] - WebSocket connected to Server
2025-08-29 11:13:54.614 [TRACE] [r.internal.websocket.TibberWebsocket] - Websocket send message {"id":"1","type":"subscribe","payload":{"variables":{},"extensions":{},"operationName":null,"query":"subscription { liveMeasurement(homeId:\"xxx\") { timestamp power lastMeterConsumption lastMeterProduction accumulatedConsumption accumulatedConsumptionLastHour accumulatedCost currency minPower averagePower maxPower voltagePhase1 voltagePhase2 voltagePhase3 currentL1 currentL2 currentL3 powerProduction accumulatedProduction accumulatedProductionLastHour minPowerProduction maxPowerProduction }}"}}

(the empty lines are present there also, btw)

Anyone know, why the timeseries won’t update on my production OH5?

Thomas, don’t be confused!
For some milliseconds the Marketplace binding was obsolete until new findings required changes which need to go in. Development goes on :slight_smile:

Thats’s why Tibber OH5 Marketplace binding contains now some OH5+ changes.

1 Like

thanks for your explanation.
ok, so I’ll have to wait for >5.0.1 for total-price and tax to appear, I guess? I can live with that.

Sure or you can install Marketplace binding right now :wink:

I’m for sure aware that this contains the risk that it won’t be taken into the next release/milestone 1:1. For me is quite appealing to identify negative energy prices so I’ve already installed this on my productive system.

It’s up to everybodies choice!

1 Like

I have the same issue but I was not able to solve this problem the way you did. I tried with 5.0.1 and 5.1.0-SNAPSHOT. Not working at all - even though in the events.log it looks like the Binding did receive some values:

2025-09-13 17:42:18.597 [INFO ] [openhab.event.ItemTimeSeriesEvent   ] - Item 'Tibber_API_Current_Total_Price' shall process timeseries with 192 values.
2025-09-13 17:42:18.608 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item 'Tibber_API_Current_Total_Price' updated timeseries with 192 values.

But the linked Item remains NULL - so do the forecast values.

I am pretty pissed right now, having spent several hours / evenings without any useful result, when the release notes from OH 5.0 read like its not big deal (recreate thing, link channels,…). :frowning:

WAF of the 5.0 update is very bad :-1:

Any Ideas?

Did you create a persistence rule with forecast for the items?

image

Only after I did that did the items in the price group stop being NULL.

What do you mean with a persistance rule? The Items are assigned to groups and I have persistance configured on this groups.

For my forecast solar I needed a forecast strategy to be defined in order to get the forecast data. But for tibber I did not have that.

So what kind of rule are you talking about? And where is that mentioned in the docs?

I mean under Settings → Add-on Settings → the relevant Persistence → persistence configuration

It states multiple times, that you need a persistence for forecasted items, and not rrd4j.
the spot-price and level channel (and total-price for >=5.1/marketplace binding) need forecast to function properly.

I have file based config. And yes, the “Energy*” groups are persisted every 2 minutes. I have now added a forecast group with strategy “forecast”. And added the items only to that group.

In the log I got the info, that data has been received. And when I analyze the Item, I see forecast values now. But the Item itself remains NULL.
EDIT: After some waiting/ reloading the items are now also showing values!

2025-09-13 21:37:22.230 \[TRACE\] \[ibber.internal.handler.TibberHandler\] - Query with body {"query":"{  viewer {    home(id: \\"543a7b78-d049-4e05-a7c9-0a955afa356a\\") {      currentSubscription {        priceInfo {          current {            currency          }        }      }    }  }}"}

2025-09-13 21:37:22.383 \[TRACE\] \[ibber.internal.handler.TibberHandler\] - doInitialze response 200 - {"data":{"viewer":{"home":{"currentSubscription":{"priceInfo":{"current":{"currency":"EUR"}}}}}}}

2025-09-13 21:37:22.383 \[TRACE\] \[ibber.internal.handler.TibberHandler\] - Add channels? true. Has spot price channel? true

2025-09-13 21:37:22.384 \[TRACE\] \[ibber.internal.handler.TibberHandler\] - Currency is set to €

2025-09-13 21:37:22.445 \[TRACE\] \[ibber.internal.handler.TibberHandler\] - updatePrices response 200 - {"data":{"viewer":{"home":{"currentSubscription":{"priceInfo":{"tomorrow":\[{"startsAt":"2025-09-14T00:00:00.000+02:00","total":0.3109,"energy":0.0857,"tax":0.2252,"level":"NORMAL"},{"startsAt":"2025-09-14T00:15:00.000+02:00","total":0.3109,"energy":0.0857,"tax":0.2252,"level":"NORMAL"},{"startsAt":"2025-09-14T00:30:00.000+02:00","total":0.3109,"energy":0.0857,"tax":0.2252,"level":"NORMAL"},{"startsAt":"2025-09-14T00:45:00.000+02:00","total":0.3109,"energy":0.0857,"tax":0.2252,"level":"NORMAL"},{"startsAt":"2025-09-14T01:00:00.000+02:00","total":0.3012,"energy":0.0776,"tax":0.2236,"level":"NORMAL"},[....cut]

2025-09-13 21:37:22.453 \[DEBUG\] \[ibber.internal.handler.TibberHandler\] - update found - continue

Hey Thomas - thanks for the link to the docs of the binding.

After you mentioned it, I ran a text search again over it. Indeed there is ONE (not multiple) HINT in a kind of footnote that states:

Please note time series are not supported by the default rrd4j (opens new window) persistence. The items connected to the above channels needs to be stored in e.g. InfluxDB (opens new window) or InMemory (opens new window).

So I am using a influx . It does not say at any line, that the persistance for that Group need to be configured as “forecast”.

Maybe the docs should be modified so that this is more clearly.

Follow-up question: Is it allowed to have the item also added to groups that have no forcast strategy definied?

Hi,

Iam using the last snaphot: org.openhab.binding.tibber-4.3.8-SNAPSHOT-Hourly.jar but there no price updates in any item.

Here´s the event.log:

2025-09-26 13:24:38.999 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item ‘Tibber_API_OH5_Total_Price’ updated timeseries with 48 values.
2025-09-26 13:24:39.001 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mail:smtp:ad7c2719ad’ changed from UNINITIALIZED (NOT_YET_READY) to INITIALIZING
2025-09-26 13:24:39.034 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item ‘Tibber_API_OH5_Spot_Price’ updated timeseries with 48 values.
2025-09-26 13:24:39.035 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mail:smtp:ad7c2719ad’ changed from INITIALIZING to ONLINE
2025-09-26 13:24:39.062 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item ‘Tibber_API_OH5_Tax’ updated timeseries with 48 values.
2025-09-26 13:24:39.076 [INFO ] [hab.event.ItemTimeSeriesUpdatedEvent] - Item ‘Tibber_API_OH5_Price_Level’ updated timeseries with 48 values.

Did you setup InMemory persistence for the TimeSeries items ? That’s a prerequisite.

Yes, inMemory is active and configured, items always null.