I am having trouble connecting to the iAqualink pool controller after upgrading to OpenHAB 3.3. The status of my iaqualink controller thing is perpetually “initializing” on the Things configuration page. I have manually configured the iaqualing controller thing as shown below. Attempting to add a new iaqualink controller thing from the administration page gives the same problem.
There is only one entry in the log pertaining to iaqualink, and that is:
2022-07-15 21:59:59.120 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAY at path $.serialized_map.
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) ~[?:?]
at com.google.gson.Gson.fromJson(Gson.java:963) ~[?:?]
at com.google.gson.Gson.fromJson(Gson.java:1034) ~[?:?]
at com.google.gson.Gson.fromJson(Gson.java:1006) ~[?:?]
at org.openhab.binding.iaqualink.internal.api.IAqualinkClient$HomeDeserializer.deserialize(IAqualinkClient.java:402) ~[?:?]
at org.openhab.binding.iaqualink.internal.api.IAqualinkClient$HomeDeserializer.deserialize(IAqualinkClient.java:1) ~[?:?]
at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69) ~[?:?]
at com.google.gson.Gson.fromJson(Gson.java:963) ~[?:?]
at com.google.gson.Gson.fromJson(Gson.java:928) ~[?:?]
at com.google.gson.Gson.fromJson(Gson.java:877) ~[?:?]
at org.openhab.binding.iaqualink.internal.api.IAqualinkClient.getAqualinkObject(IAqualinkClient.java:352) ~[?:?]
at org.openhab.binding.iaqualink.internal.api.IAqualinkClient.homeScreenCommand(IAqualinkClient.java:318) ~[?:?]
at org.openhab.binding.iaqualink.internal.api.IAqualinkClient.getHome(IAqualinkClient.java:160) ~[?:?]
at org.openhab.binding.iaqualink.internal.handler.IAqualinkHandler.pollController(IAqualinkHandler.java:352) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
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:829) [?:?]
Caused by: java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAY at path $.serialized_map.
at com.google.gson.internal.bind.JsonTreeReader.nextString(JsonTreeReader.java:181) ~[?:?]
at com.google.gson.internal.bind.TypeAdapters$15.read(TypeAdapters.java:380) ~[?:?]
at com.google.gson.internal.bind.TypeAdapters$15.read(TypeAdapters.java:368) ~[?:?]
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) ~[?:?]
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187) ~[?:?]
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145) ~[?:?]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) ~[?:?]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) ~[?:?]
... 19 more
Please could you let me know if you have any ideas?
My TRACE log is attached - with serial number and user information listed as XXXXXX or YYYYYY. Everything looks OK to me… Still perpetually in “initializing”. Any help would be much appreciated!
PS - also changed my serial number in the log to VALIDSERIALNUMBER. I did check my iaqualink account to verify that the binding pulled the correct serial number, so it appears to be making a connection to the iaqualink server, as I did not enter the serial number in the Thing configuration.
Thank you. I downloaded the file to my /usr/share/openhab/addons folder. How do I install it? It does not appear on the configuration page in the UI. The documentation suggests that putting the .jar file in this directory should be sufficient.
Hi,
I got the same issue and only installed openhab for the first time today. The reason is to test this plugin. I can’t figure out what to put in the addons.cfg file though. Can you share your config?
-Magnus
Hi Magnus and welcome. Installing nightly builds of addons is usually a more advanced topic that most users don’t have to deal with, so apologies for this being your first experience.
My recommendation would be to uninstall the binding (through the webUI), then on your openHAB machine there should be a folder called “addons” where you can place the jar from the download link above. openHAB will automatically pick this up and install it after a second or 2 . See Installation of Add-ons | openHAB for more info. On linux (including rasp pi) this is located at /usr/share/openhab/addons or in the root of the openHAB folder on windows/mac.
If you want to do it as I did, you need to modify the addons.cfg file in /etc/openhab/services (for apt-based installations). There is a line that starts with #binding =
Remove the # to uncomment the line, and then list all of your bindings with comma delimiters. For the new binding placed in the /usr/share/openhab/addons folder, you need to list the part of the binding that comes after org.openhab.binding. and before .jar
Note that you will need to list on this line ALL of your bindings that you want installed - not just the new one. Also, you will not be able to install new bindings in the web interface. I may just follow Dan’s suggestion and comment out this line in my addons.cfg file. The reason mine did not pick up the new binding is because I did not uninstall the old one on the web UI first (silly error on my part).
Hi Collin, can you let me know what version of openHAB you are running? Also can you verify that your username and password work on the iAqualink website? Even if your mobile app is working, i would try logging in anyways on the web to verify they are not asking you to accept some terms or something (i seem to remember that happening once)
I had a similar connection issue, and can report that upgrading to OH 3.4 fixed it for me. Thanks for getting the update into the release stream!
It may be related, but none of the aux channels are showing up. I have lights on two of the Aux relays, and I can control them with the iAqualink interface, but they do not appear to be discovered by the binding. Any thoughts?
However, the connections always stays in offline mode. I know that the backend of Zodiac seems to be very unreliable, sometimes the App does not get a refreshment for hours. This morning however all is working good in the app, but not with the binding.
Running OH 3.4 on a Raspberry with the binding installed via OH. I’ve set the logging of the binding to trace, following output.
So the 30 second poll rate seems to get honored as I see the above every 30 seconds, but the binding is right now “OFFLINE” while it’s online with the app.
And just tried something more: I put the URL from the log file into my browser and got back the following JSON, so I assume the credentials are working. Serial is however not the serial of the pump and all other fields are empty, so I don’t know what’s happening here, thanks for any help.
That was very helpful, looking at the response you can see the following in the JSON
"status": "Offline"
The binding by default uses the first controller under the account, in this case its serial JX21160121 , do you have more then one controller thats under that user name and password? There is an optional parameter serialId you can add to the thing config to specify the specific device to use if there are multiple. I never tested this (and i wrote this quite a long time ago), but put that in there just in case this came up. If you do have multiple, and the first one is not operational, deleting it from iaqualink (if you can) would also probably fix this.
Hi Dan, thanks for looking into this! It confirms my first thoughts, the “status” value was quite obvious ,-) Actually I have two other devices (pool control and a robot), both however are not aqualink cappable, so I absolutely have no clue what is returned here. Maybe the serial is just different internally as what is printed on the sticker outside of the heater. I’ll try fiddle around with it, maybe I find something.
On the long term I want to control anyhow everything with Modbus and also the heater with a shelly device, so the cloud would not be required any more