I documented a temporary fix to return ZM_PATH_ZMS and ZM_OPT_FRAME_SERVER through the ./api/configs/view/<KEYNAME>.json API so ZoneMinder 1.31.45 worked with the OpenHAB2 binding. Upon upgrading ZoneMinder to 1.32.3, the binding was no longer able to communicate with our ZoneMinder server.
In the OpenHAB2 log, errors indicated malformed JSON was received.
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 7 path $ at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1568) ~[?:?] at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1409) ~[?:?] at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:542) ~[?:?] at com.google.gson.stream.JsonReader.peek(JsonReader.java:425) ~[?:?] at com.google.gson.JsonParser.parse(JsonParser.java:60) ~[?:?] at com.google.gson.JsonParser.parse(JsonParser.java:45) ~[?:?] at name.eskildsen.zoneminder.jetty.JettyConnectionInfo.fetchDataAsJson(JettyConnectionInfo.java:352) ~[?:?]
Using a web browser to access <ZoneMinderURL>/zm/api/configs/view/ZM_PATH_ZMS.json, malformed JSON is returned.
Conf files are not updated when new packages are installed – an conf.rpmnew is created instead. The changes from the new config (zoneminder.conf.rpmnew) file need to be merged into the existing config file (zoneminder.conf). In our zm.conf file, I added:
ZM_DB_SSL_CA_CERT= ZM_DB_SSL_CLIENT_KEY= ZM_DB_SSL_CLIENT_CERT=
Reloading the page in my browser confirmed that the JSON response is valid.
When the ZoneMinder binding started, it successfully attached to our monitors and detected a motion alarm.
This does not negate the need for the original fix — config.php still needs to have the strcmp I added. When ZoneMinder is upgraded, /usr/bin/zmupdate.pl is run (I needed to run “/usr/bin/zmupdate.pl -f” to stop zmc from existing with return code 255), the values I added to the ZoneMinder Config table are removed — they need to be re-added.