Netatmo Binding gives NPE while informing handler (ThingLinkManager)

The Netatmo binding is throwing errors with the 2.4.0 Release Build shortly after it is activated and no Items get updated. It used to work just fine in Milestone and SNAPSHOT builds before. I use the binding to get data from a Healty Home Coach device.

The relevant openhab.log entries when including the binding (in services/addons.cfg and the things/netatmo.things file):

2019-01-03 19:12:06.984 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'netatmo.things'
2019-01-03 19:14:09.999 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'netatmo:NHC:home:70ee5025e226' to inbox.

And the events.log entries:

2019-01-03 19:14:09.993 [me.event.ThingUpdatedEvent] - Thing 'netatmo:NHC:home:livingroom' has been updated.
2019-01-03 19:14:09.999 [home.event.InboxAddedEvent] - Discovery Result with UID 'netatmo:NHC:home:70ee5025e226' has been added.
2019-01-03 19:15:57.783 [.ItemChannelLinkAddedEvent] - Link 'LR_NHC_Temperature-netatmo:NHC:home:livingroom:Temperature' has been added.
2019-01-03 19:15:57.791 [.ItemChannelLinkAddedEvent] - Link 'LR_NHC_CO2-netatmo:NHC:home:livingroom:Co2' has been added.
2019-01-03 19:15:57.796 [.ItemChannelLinkAddedEvent] - Link 'LR_NHC_Humidity-netatmo:NHC:home:livingroom:Humidity' has been added.
2019-01-03 19:15:57.797 [.ItemChannelLinkAddedEvent] - Link 'LR_NHC_Pressure-netatmo:NHC:home:livingroom:Pressure' has been added.

As soon as I add an .items file defining the Items it trows a bunch of NPE errors:

2019-01-03 19:15:57.773 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'netatmo.items'
2019-01-03 19:15:58.063 [ERROR] [ome.core.thing.link.ThingLinkManager] - Exception occurred while informing handler: null
java.lang.NullPointerException: null
        at org.openhab.binding.netatmo.internal.homecoach.NAHealthyHomeCoachHandler.getNAThingProperty(NAHealthyHomeCoachHandler.java:57) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.lambda$3(AbstractNetatmoThingHandler.java:109) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:?]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[?:?]
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[?:?]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:?]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[?:?]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.updateChannels(AbstractNetatmoThingHandler.java:106) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.updateChannels(NetatmoDeviceHandler.java:155) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.handleCommand(AbstractNetatmoThingHandler.java:133) ~[?:?]
        at org.eclipse.smarthome.core.thing.binding.BaseThingHandler.channelLinked(BaseThingHandler.java:233) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.channelLinked(AbstractNetatmoThingHandler.java:119) ~[?:?]
        at org.eclipse.smarthome.core.thing.link.ThingLinkManager.lambda$0(ThingLinkManager.java:300) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
        at java.lang.Thread.run(Thread.java:748) [?:?]
2019-01-03 19:15:58.081 [ERROR] [ome.core.thing.link.ThingLinkManager] - Exception occurred while informing handler: null
java.lang.NullPointerException: null
        at org.openhab.binding.netatmo.internal.homecoach.NAHealthyHomeCoachHandler.getNAThingProperty(NAHealthyHomeCoachHandler.java:57) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.lambda$3(AbstractNetatmoThingHandler.java:109) ~[?:?]
  ... etc

Restarting OH gives a similar different error:

2019-01-03 19:54:36.698 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.NullPointerException: null
        at org.openhab.binding.netatmo.internal.homecoach.NAHealthyHomeCoachHandler.getNAThingProperty(NAHealthyHomeCoachHandler.java:57) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.lambda$3(AbstractNetatmoThingHandler.java:109) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:?]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[?:?]
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[?:?]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:?]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[?:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[?:?]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.AbstractNetatmoThingHandler.updateChannels(AbstractNetatmoThingHandler.java:106) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.updateChannels(NetatmoDeviceHandler.java:155) ~[?:?]
        at org.openhab.binding.netatmo.internal.handler.NetatmoDeviceHandler.lambda$0(NetatmoDeviceHandler.java:82) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
        at java.lang.Thread.run(Thread.java:748) [?:?]

To make the picture complete, the .things file and .items files (which worked just fine).

Bridge netatmo:netatmoapi:home [ clientId="secret", clientSecret="secret", username = "user@domain.ext", password = "password",
        readStation=false, readHealthyHomeCoach=true, readThermostat=false, readWelcome=false ] 
{
    Thing NHC livingroom [ id="00:11:22:33:44:55" ]
}
Number:Temperature   LR_NHC_Temperature "Temp [%.1f °C]"      {channel="netatmo:NHC:home:livingroom:Temperature"}
Number:Dimensionless LR_NHC_CO2         "CO2 [%.0f ppm]"      {channel="netatmo:NHC:home:livingroom:Co2"}
Number:Dimensionless LR_NHC_Humidity    "Humidity [%.0f %]"   {channel="netatmo:NHC:home:livingroom:Humidity"}
Number:Pressure      LR_NHC_Pressure    "Pressure [%.0f hPa]" {channel="netatmo:NHC:home:livingroom:Pressure"}

I also double-checked the API credentials online to make sure they where not disabled somehow. I even went so far as a complete new install of OH 2.4.0 and adding the configuration files one by one, but the error remains…

@glhopital Since you have co-created this binding and I had a similar error with the VolvoOnCall binding, I was wondering if you can give me a clue… :smiley:

UPDATE: As a ‘last resort’ I installed a fresh and clean OH2.4.0 system and added only the Netatmo binding and just one Item (Temperature). It immediately gives the same error.

UPDATE2: I couldn’t help but notice that the same set of NPE errors (one in ThingLinkManager and one in WrappedScheduledExecutorService) are thrown by the Feed binding here. Could it be that Netatmo changed its API?

Sounds like a similar (or the same) cause we faced with the Netatmo weather API (see https://github.com/openhab/openhab2-addons/issues/4263).

Ah, likely both related to API issues I suppose.
I could swear I searched the forum for Netatmo errors before posting…guess not.

Turns out the Netatmo Healthy Home Coache device had a dead power supply. Talking about coincidence: right when activating OH 2.4.0 Release Build!

Still, would be nice if the binding handled error status or unexpected data without ‘crasching’. :grin: