Netatmo Thermostat

If you want latest evolutions… yes

:wink: Yes I want !
Thanks a lot
Bye

@glhopital I found another problem… It seems that the thermostat stops refreshing every morning at 7 AM (CET) and I have to restart the binding to make it refresh again…

Do you have anything in logs ?

This error:

2021-02-05 07:01:08.268 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.NumberFormatException: Infinite or NaN
at java.math.BigDecimal.(BigDecimal.java:923) ~[?:?]
at java.math.BigDecimal.(BigDecimal.java:900) ~[?:?]
at org.openhab.binding.netatmo.internal.utils.ChannelTypeUtils.toDecimalType(ChannelTypeUtils.java:83) ~[?:?]
at org.openhab.binding.netatmo.internal.channelhelper.Therm1SetpointChannelHelper.getCurrentSetpoint(Therm1SetpointChannelHelper.java:73) ~[?:?]
at org.openhab.binding.netatmo.internal.channelhelper.Therm1SetpointChannelHelper.internalGetProperty(Therm1SetpointChannelHelper.java:54) ~[?:?]
at org.openhab.binding.netatmo.internal.channelhelper.AbstractChannelHelper.getNAThingProperty(AbstractChannelHelper.java:61) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.getNAThingProperty(NetatmoDeviceHandler.java:321) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.lambda$9(NetatmoDeviceHandler.java:239) ~[?:?]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[?:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[?:?]
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[?:?]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[?:?]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.setNAThing(NetatmoDeviceHandler.java:238) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.notifyListener(NetatmoDeviceHandler.java:208) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.lambda$4(NetatmoDeviceHandler.java:197) ~[?:?]
at java.util.HashMap$EntrySet.forEach(HashMap.java:1039) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.updateChildModules(NetatmoDeviceHandler.java:197) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.updateChannels(NetatmoDeviceHandler.java:188) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.scheduleRefreshJob(NetatmoDeviceHandler.java:153) ~[?:?]
at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.lambda$3(NetatmoDeviceHandler.java:158) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]

Cool, I think I got it. Will publish an update soon.

You’ll find an updated JAR that should address your 7AM issue.
I think I also corrected redundant updates of persons/cameras with false states but not 100% sure. Let me know the result of your tests.

Hi

I am beginner and I have the same problem.
Can you guide me on what to do. I am new to the field. Thank you in advance for your assistance.

I work with OpenHAB 3.0.1
Raspberry 3 and openhabian
Linux version 5.4.83-v7+ (dom@buildbot) (gcc version 8.4.0 (Ubuntu/Linaro 8.4.0-3ubuntu1)) #1379 SMP Mon Dec 14 13:08:57 GMT 2020

See below the log file:
2021-02-09 13:50:50.550 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘netatmo:NATherm1:home:2f7be26677’ changed from INITIALIZING to OFFLINE: Pending parent object initialization

==> /var/log/openhab/openhab.log <==

2021-02-09 13:50:55.976 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected an int but was BOOLEAN at line 1 column 163 path $.body.devices[0].plug_connected_boiler

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) ~[?:?]

at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) ~[?:?]

at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82) ~[?:?]

at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) ~[?:?]

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) ~[?:?]

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) ~[?:?]

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) ~[?:?]

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) ~[?:?]

at com.google.gson.Gson.fromJson(Gson.java:888) ~[?:?]

at com.google.gson.Gson.fromJson(Gson.java:853) ~[?:?]

at com.google.gson.Gson.fromJson(Gson.java:802) ~[?:?]

at io.swagger.client.JSON.deserialize(JSON.java:134) ~[?:?]

at io.swagger.client.ApiClient.deserialize(ApiClient.java:711) ~[?:?]

at io.swagger.client.ApiClient.handleResponse(ApiClient.java:914) ~[?:?]

at io.swagger.client.ApiClient.execute(ApiClient.java:841) ~[?:?]

at io.swagger.client.api.ThermostatApi.getthermostatsdataWithHttpInfo(ThermostatApi.java:471) ~[?:?]

at io.swagger.client.api.ThermostatApi.getthermostatsdata(ThermostatApi.java:457) ~[?:?]

at org.openhab.binding.netatmo.internal.handler.NetatmoBridgeHandler.lambda$6(NetatmoBridgeHandler.java:315) ~[?:?]

at java.util.Optional.map(Optional.java:265) ~[?:?]

at org.openhab.binding.netatmo.internal.handler.NetatmoBridgeHandler.getThermostatsDataBody(NetatmoBridgeHandler.java:315) ~[?:?]

at org.openhab.binding.netatmo.internal.thermostat.NAPlugHandler.lambda$0(NAPlugHandler.java:50) ~[?:?]

at java.util.Optional.flatMap(Optional.java:294) ~[?:?]

at org.openhab.binding.netatmo.internal.thermostat.NAPlugHandler.updateReadings(NAPlugHandler.java:50) ~[?:?]

at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.updateChannels(NetatmoDeviceHandler.java:127) ~[?:?]

at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.updateChannels(NetatmoDeviceHandler.java:110) ~[?:?]

at java.util.Optional.ifPresent(Optional.java:183) ~[?:?]

at org.openhab.binding.netatmo.internal.handler.NetatmoModuleHandler.requestParentRefresh(NetatmoModuleHandler.java:120) ~[?:?]

at org.openhab.binding.netatmo.internal.handler.NetatmoModuleHandler.lambda$0(NetatmoModuleHandler.java:55) ~[?:?]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]

at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]

at java.lang.Thread.run(Thread.java:834) [?:?]

Caused by: java.lang.IllegalStateException: Expected an int but was BOOLEAN at line 1 column 163 path $.body.devices[0].plug_connected_boiler

at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1197) ~[?:?]

at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:225) ~[?:?]

at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:217) ~[?:?]

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) ~[?:?]

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) ~[?:?]

See above post #9 on how to install this version.

just did that.
it now detects “my home” via Energy API, but my Valves are not recognized.
When I add them manually via Serial Number they appear online, but all fields stay UNDEF.

anything I can do to help here?

Sorry, I do not owe any valve, so not possible to test this on my side. If some owner (you ?) is able to provide appropriate code, it can be merged in the PR.

1 Like

Will have a look!

1 Like

BTW m workaround for the Time being is using a node red Netatmo energy component which periodically publishes setpoint and temperature of each valve to MQTT topics. In OH I have MQTT things from which I created Items.

Works fine, but I’d prefer an integrated solution.

Hi @glhopital,

some days passed without any major problem. Good work! Just one question, right now the thermostat is updated once every hour. Do you think is possible to specify a shortest period? This way we can have a better control of temperature and the duration for every run of the boiler.

@glhopital
I tested the jar from Google drive. It worked at the beginning but then the token expired and is not automatically renewed.

Unable to connect Netatmo API : Rest call failed: statusCode=403, message=Authorization exception : {"error":{"code":3,"message":"Access token expired"}}

Is there anything I did wrong?

I don’t think you did something wrong. Only thing : did you test the very last version available on the google drive ?

The fact is afair that Netatmo only update these data hourly

I downloaded it 2 days ago.
This is my used version
248 │ Active │ 80 │ 3.1.0.202102051514 │ openHAB Add-ons :: Bundles :: Netatmo Binding

after restart there is no connection available at all:
Thing 'netatmo:NAHomeEnergy:5ea821a0f20023a06b0a8480' changed from INITIALIZING to OFFLINE (BRIDGE_OFFLINE): Unable to connect Netatmo API : Rest call failed: statusCode=-1, message=Exception while calling oauth2/token

That’s quite interesting as I use the newest version and had no token issues so far.

Hi @glhopital ,
I have migrated to OH3.0.1
I have also Netatmo Binding 3.0.1
I’m in text file configuration and the following things is UP :

  • API Netatmo : Online
  • NetAtmo Relay : Online

Only Thermostat is Offline

  • NetAtmo Thermostat : Offline (Pending parent object initialization)

Is there something to to ?

Thanks a lot for your support !