Viessmann API binding for OpenHAB 4.0 [4.0.0;5.0.0)

See this post for how to get the json:

Since yesterday, Viessmann Binding suddenly stopped working:

2024-04-17 07:17:56.569 [WARN ] [ar.vicare.internal.VicareServiceImpl] - Unable to refresh, access server sent 400
2024-04-17 07:17:56.570 [WARN ] [.vicare.internal.VicareBridgeHandler] - Unable to prefetch features
com.qubular.vicare.AuthenticationException: Unable to refresh access token
        at com.qubular.vicare.internal.VicareServiceImpl.getValidAccessToken(VicareServiceImpl.java:181) ~[?:?]
        at com.qubular.vicare.internal.VicareServiceImpl.getFeatures(VicareServiceImpl.java:199) ~[?:?]
        at com.qubular.openhab.binding.vicare.internal.CachedFeatureService.lambda$getFeatures$2(CachedFeatureService.java:68) ~[?:?]
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) [?:?]
        at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760) [?:?]
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) [?:?]
        at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) [?:?]
        at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) [?:?]
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) [?:?]
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) [?:?]

Hi, #1 reason for this is that the refresh token is limited to 6 months IIRC, you will need to go to vicare/setup page in OpenHAB and re-authorize the binding.

1 Like

Ah, didn’t know that, sorry. I guess automatic reauthorization is impossible?

Correct, it’s a security measure to prevent excessively long lived sessions. Viessmann’s API documentation states it lasts 180 days.

1 Like

But couldn’t you silently re-authorize it in the bakground? After all i just clicked on the button
if you can’t i think of writing a a script myself that checks the status every day and does that :wink:

No because the authorize button takes you to the Viessmann login page where you have to enter your password, in exchange for which Viessmann API grants the plugin a new token. The point of this is that applications such as OpenHAB can access the API without ever having access to your Viessmann password.

Ah, i see, so it only worked because i was already logged in.

I just tried the plugin for the first time. Thanks for that! Setup worked well but when I add the heating device I get the error for Duplicate channels heating_dhw_hygiene_active

Maybe a Bug?

2024-04-23 11:13:30.303 [WARN ] [re.internal.VicareDeviceThingHandler] - Unexpected error initializing Thing
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: Duplicate channels vicare:heating:add4f0cb27:66831c18-53ae-3285-ad4b-f8a65e2XXXXX:heating_dhw_hygiene_active
        at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) ~[?:?]
        at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320) ~[?:?]
        at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:722) ~[?:?]
        at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) [?:?]
        at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760) [?:?]
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) [?:?]
        at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) [?:?]
        at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) [?:?]
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) [?:?]
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) [?:?]
Caused by: java.lang.IllegalArgumentException: Duplicate channels vicare:heating:add4f0cb27:66831c18-53ae-3285-ad4b-f8a65eXXXXX:heating_dhw_hygiene_active
        at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:135) ~[?:?]
        at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:111) ~[?:?]
        at org.openhab.core.thing.binding.builder.ThingBuilder.withChannels(ThingBuilder.java:150) ~[?:?]
        at com.qubular.openhab.binding.vicare.internal.VicareDeviceThingHandler.lambda$initialize$1(VicareDeviceThingHandler.java:124) ~[?:?]
        at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718) ~[?:?]
        ... 8 more

I’m running OH 4.1.2 and try to use the bundle for the first time but fail for now.
I could not install the plugin from the marketplace, it wasn’t there ?

Putting the .kar into the addons dir resulted in bundles becoming active:

openhab> bundle:list|grep vica
287 x Active x  80 x 4.0.3                  x com.qubular.openhab-binding-vicare-bundle
288 x Active x  80 x 4.0.3                  x com.qubular.vicare-osgi

But now I’m stuck and don’t see how to proceed.
When adding a Thing, OH does not offer any of vicare binding type.

Anyone who is successfully using the binding with current OH 4.1.2 ?

Hi there,

maybe you can help me after days of searching for a solution. My vicare-binding (4.0.3) suddenly stopped working a few weeks ago. The bridge is running, the binding is authorized and the devices are shown correctly on the ‘/vicare/setup’ page. However the added thing(s) keeps initializing and never get online. Any suggestions?

Lars

did you read 10 posts up ?

After installation did you manage to authorise the binding from the /vicare/setup page as described in the instructions and did it then list your discovered heating device on the page?

Does the device report correctly in your viessmann ViCare phone app? I don’t believe there has been any substantive change in the API, however I did have a few days ago an interruption where I assume there was some sort of interruption (network, or possibly Viessmann took their portal down for maintenance) however when it came back up my boiler did not re-connect.
In the end I had to power-cycle my boiler for it to re-connect to the API. During this time the API was reporting strange status and no data which the binding couldn’t handle.

possibly, if it persists on a restart, send me a captureResponse.json and I can take a look and possibly reproduce it. Unless somehow you have got two versions of the binding installed or something, which is maybe the only other thing that comes to mind as a possibility.

I’ve been unable to add the binding in the first place.
Turned out to be an installation issue with the marketplace, solved now, thanks.

No. The Thing is in yellow ‘unknown’ state.
Clicking ‘authorize ViCare binding’ results in a HTTP query to https://iam.viessmann.com/idp/v3/authorize?state=fed3b7d9-027e-...... but it gets an ‘invalid_request’ response.
I’ve raised debug levels but don’t see any debug output

openhab> log:get|grep vica
com.qubular.openhab-binding-vicare-bundle                             x DEBUG
com.qubular.vicare-osgi                                               x DEBUG

EDIT: Silly(?) question do I have to configure the heating device first and if so how does that work ?

I just started to use this binding with our Vitocal 200-S heat pump and wanted to thank for it!
Would it be possible to add “heating.sensors.pressure.supply” as channel - or is it already implemented?
I would like to see if I have to fill up water because the pressure is below a certain value.
The app shows the value.

Does anyone know if this device can be controlled via the API?

Viessmann Vitovent Bedienteil Wifi

It is unclear to me if this device uses a cloud connection or works just locally

Hi,
since my OH update to 4.2.1 I got a lot of new errors from the vicare addon. So I deleted the bridge and the header thing, removed the addon, reinstalled the addon, reauthorized the binding and the bridge went “green”.

After that I added the heater from the inbox. But now it hangs with “initializing”. I repeated this several times without success. I does not go further and I can’t see any channels.

I get this error:

2024-08-27 19:47:32.005 [WARN ] [re.internal.VicareDeviceThingHandler] - Unexpected error initializing Thing
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: Duplicate channels vicare:heating:2dedf64c91:30d23790-ab86-3836-8e84-1c421bc1139d:heating_dhw_hygiene_enabled
	at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) ~[?:?]
	at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320) ~[?:?]
	at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:722) ~[?:?]
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) [?:?]
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) [?:?]
	at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760) [?:?]
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) [?:?]
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) [?:?]
	at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) [?:?]
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) [?:?]
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) [?:?]
Caused by: java.lang.IllegalArgumentException: Duplicate channels vicare:heating:2dedf64c91:30d23790-ab86-3836-8e84-1c421bc1139d:heating_dhw_hygiene_enabled
	at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:135) ~[?:?]
	at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:111) ~[?:?]
	at org.openhab.core.thing.binding.builder.ThingBuilder.withChannels(ThingBuilder.java:150) ~[?:?]
	at com.qubular.openhab.binding.vicare.internal.VicareDeviceThingHandler.lambda$initialize$1(VicareDeviceThingHandler.java:124) ~[?:?]
	at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718) ~[?:?]
	... 8 more

→ Duplicate channels “heating_dhw_hygiene_enabled”?

Could it be that there have been API changes within the last 12 months and now this error blocks the activation of new installs?

Before my removal the addon worked most of the time.

Thanks for any help.