Drayton Wiser Thermostat Binding

No, that’s what I’ve got too. It seems to make most sense, there’s no point storing data when it hasn’t changed right?

From the brief look the other day, there doesn’t appear to be a canonical list of API paths, as they build them dynamically in various methods. It’s also interesting to note that it shares much of its codebase with the miGenie app, so probably has a load of endpoints in it that won’t work on the HubR.

I saw Drayton now support IFTTT, so I can’t see the API changing drastically in the future.

Yeah, I had a look at that, basically turning away mode on and off by the looks of things.

The range-extender/smart plug model does suggest that we’ll be able to switch the plugs on and off in the future though :slight_smile:

Ok, it is confirmed that whenever I get the messages below:

2018-02-02 08:48:57.594 [WARN ] [org.eclipse.jetty.http.HttpParser   ] - parse exception: java.lang.NumberFormatException: !hex 108 in CHUNK_SIZE for HttpReceiverOverHTTP@32289c(rsp=CONTENT,failure=null)[HttpParser{s=CHUNK_SIZE,8704 of 0}]
2018-02-02 09:35:42.432 [WARN ] [org.eclipse.jetty.http.HttpParser   ] - parse exception: java.lang.NumberFormatException: !hex 34 in CHUNKED_CONTENT for HttpReceiverOverHTTP@1f2e8f(rsp=CONTENT,failure=null)[HttpParser{s=CHUNKED_CONTENT,3072 of 0}]

it means that openhab is stuck…

Have you got any other bindings installed? Given there are no line numbers in the log, it looks like a more fundamental openhab/httpclient problem to me because the http response makes no sense.

The only binding I have is the wiser one:

Actually it is the latest one you recomended, but it was happening with previous one too…

Hmm, haven’t had much luck debugging your issue @jimmyss04. It’s been logging data for >24 hours now, and except for a brief period overnight when 2 of my room temperatures seemed to drop below absolute zero, it has been working fine.

I’ve added LQI to the supported channels for the zigbee items (it isn’t accessible for the controller though).

Looking into more detail at the android app source, I think I need to add a new thing for hot water control though, so it doesn’t clutter up the controller with channels people might not have. (Hopefully supporting auto/manual mode, togglable on/off state, boosting).

I really appreciate your help, and I think I will be writing a small script to restart openhab when that message is logged into the logs. In any case keep up with the good job, and look how beautiful it is when working:

Ok, as I have a bit more time today, I have reviewed the logs not just openhab but system and others, here are the findings:

openhab2:

2018-02-03 19:09:59.486 [WARN ] [org.eclipse.jetty.http.HttpParser   ] - parse exception: java.lang.NumberFormatException: !hex 115 in CHUNKED_CONTENT for HttpReceiverOverHTTP@1b50130(rsp=CONTENT,failure=null)[HttpParser{s=CHUNKED_CONTENT,4608 of 0}]
2018-02-03 20:26:38.873 [WARN ] [org.eclipse.jetty.http.HttpParser   ] - parse exception: java.lang.NumberFormatException: !hex 79 in CHUNK_SIZE for HttpReceiverOverHTTP@130b185(rsp=CONTENT,failure=null)[HttpParser{s=CHUNK_SIZE,10240 of 0}]

daemon.log:

Feb  3 19:09:59 openHABianPi karaf[2285]: java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@4c7e29(l:/192.168.0.71:32964 <-> r:/192.168.0.72:80,closed=false)[HttpChannelOverHTTP@a4aafb(exchange=HttpExchange@1feef87 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@d3d6c9(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@17b4b0c{s=START}],recv=HttpReceiverOverHTTP@1b50130(rsp=CONTENT,failure=null)[HttpParser{s=CHUNKED_CONTENT,4608 of 0}]]]
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:674)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.sendMessageToHeatHub(HeatHubHandler.java:339)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.sendMessageToHeatHub(HeatHubHandler.java:330)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.getDomain(HeatHubHandler.java:137)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.refresh(HeatHubHandler.java:129)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.lambda$0(HeatHubHandler.java:121)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at java.lang.Thread.run(Thread.java:748)
Feb  3 19:09:59 openHABianPi karaf[2285]: Caused by: java.io.EOFException: HttpConnectionOverHTTP@4c7e29(l:/192.168.0.71:32964 <-> r:/192.168.0.72:80,closed=false)[HttpChannelOverHTTP@a4aafb(exchange=HttpExchange@1feef87 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@d3d6c9(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@17b4b0c{s=START}],recv=HttpReceiverOverHTTP@1b50130(rsp=CONTENT,failure=null)[HttpParser{s=CHUNKED_CONTENT,4608 of 0}]]]
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:300)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.http.HttpParser.badMessage(HttpParser.java:1461)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1445)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:159)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:120)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:70)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:90)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:115)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
Feb  3 19:09:59 openHABianPi karaf[2285]: #011... 1 more

...removed entries until next exception...

Feb  3 20:26:38 openHABianPi influxd[449]: [httpd] 192.168.0.4, 192.168.0.4,::1 - grafana [03/Feb/2018:20:26:37 +0000] "GET /query?db=openhab_db&epoch=ms&q=%3BSELECT+mean%28%22value%22%29+FROM+%22Living_Temperature%22+WHERE+time+%3E%3D+n
ow%28%29+-+12h+GROUP+BY+time%2820s%29+fill%28null%29%3BSELECT+mean%28%22value%22%29+FROM+%22Lroom_Temperature%22+WHERE+time+%3E%3D+now%28%29+-+12h+GROUP+BY+time%2820s%29+fill%28null%29%3BSELECT+mean%28%22value%22%29+FROM+%22Sroom_Tempera
ture%22+WHERE+time+%3E%3D+now%28%29+-+12h+GROUP+BY+time%2820s%29+fill%28null%29 HTTP/1.1" 200 17747 "http://192.168.0.71:3000/dashboard/db/temps?orgId=1&from=now-12h&to=now&refresh=10s" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0)
 Gecko/20100101 Firefox/57.0" 891143e9-0920-11e8-9b8b-000000000000 221667
Feb  3 20:26:38 openHABianPi karaf[2285]: java.util.concurrent.ExecutionException: java.net.SocketTimeoutException: Connect Timeout
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:674)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.sendMessageToHeatHub(HeatHubHandler.java:339)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.sendMessageToHeatHub(HeatHubHandler.java:330)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.getStation(HeatHubHandler.java:264)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.ControllerHandler.updateControllerData(ControllerHandler.java:136)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.ControllerHandler.refresh(ControllerHandler.java:84)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.DraytonWiserThingHandler.lambda$0(DraytonWiserThingHandler.java:56)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.lang.Thread.run(Thread.java:748)
Feb  3 20:26:38 openHABianPi karaf[2285]: Caused by: java.net.SocketTimeoutException: Connect Timeout
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.ManagedSelector$ConnectTimeout.run(ManagedSelector.java:672)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.FutureTask.run(FutureTask.java:266)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011... 3 more
Feb  3 20:26:38 openHABianPi karaf[2285]: java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@cb8c25(l:/192.168.0.71:33412 <-> r:/192.168.0.72:80,closed=false)[HttpChannelOverHTTP@11ecc77(exchange=HttpExchange@11b1c15 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@18b34aa(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@1b3321a{s=START}],recv=HttpReceiverOverHTTP@130b185(rsp=CONTENT,failure=null)[HttpParser{s=CHUNK_SIZE,10240 of 0}]]]
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:674)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.sendMessageToHeatHub(HeatHubHandler.java:339)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.sendMessageToHeatHub(HeatHubHandler.java:330)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.getDomain(HeatHubHandler.java:137)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.refresh(HeatHubHandler.java:129)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.openhab.binding.draytonwiser.handler.HeatHubHandler.lambda$0(HeatHubHandler.java:121)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at java.lang.Thread.run(Thread.java:748)
Feb  3 20:26:38 openHABianPi karaf[2285]: Caused by: java.io.EOFException: HttpConnectionOverHTTP@cb8c25(l:/192.168.0.71:33412 <-> r:/192.168.0.72:80,closed=false)[HttpChannelOverHTTP@11ecc77(exchange=HttpExchange@11b1c15 req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@18b34aa(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@1b3321a{s=START}],recv=HttpReceiverOverHTTP@130b185(rsp=CONTENT,failure=null)[HttpParser{s=CHUNK_SIZE,10240 of 0}]]]
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:300)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.http.HttpParser.badMessage(HttpParser.java:1461)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1445)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:159)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:120)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:70)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:90)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:115)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
Feb  3 20:26:38 openHABianPi karaf[2285]: #011... 1 more

I will try to do some research regarding the above exceptions and see what I find.

Btw, would you mind sharing the versions of the software that you are using? ie. openhab, indexdb, grafana…

Thanks!

I’m running openhab 2.2.0 + whatever the latest versions of InfluxDB and grafana are (on Windows at the moment).

Looking at those logs, it seems your controller is sending the “away mode” trigger periodically (at least this is what the line referenced in the error message), so I don’t know what is happening there.

However, I think I’m now seeing something similar to you in that my controller item is no longer updating, but it doesn’t appear to have broken anything else. Hopefully I’ll be able to debug it more that I can at least partially replicate it. I have a similar number format parse exception, but it hasn’t taken openhab down with it.

Not sure if I should say glad that you have the problem :smiley:

In any case, sharing my workaround just in case someone is interested, running the script below every 2 minutes using cron:

*/2 * * * * /root/monitor.sh >> /var/log/monitor.log
#!/bin/bash
log=/var/log/syslog
TIMESTAMP=`date "+%d-%m-%Y %H:%M:%S"`
current=`date +"%s"`

exception=`grep java.io.EOFException /var/log/syslog|tail -1|awk {'print $1, $2, $3'}`
exceptionT=`date +"%s" --date "$exception"`

if [ -n "$exceptionT" ]; then
        diff=$((current-exceptionT))
        if [ $diff -lt 120 ]; then
                echo "$TIMESTAMP Exception found!"
                echo "$TIMESTAMP stopping openhab2"
                systemctl stop openhab2.service
                echo "$TIMESTAMP Moving log..."
                logrotate -f /etc/logrotate.d/rsyslog
                echo "$TIMESTAMP starting openhab2"
                systemctl start openhab2.service
        fi
fi

Full JSON with hot water:

{
    "System": {
        "PairingStatus": "Paired",
        "TimeZoneOffset": 0,
        "AutomaticDaylightSaving": true,
        "Version": 6,
        "FotaEnabled": true,
        "ValveProtectionEnabled": false,
        "EcoModeEnabled": false,
        "BoilerSettings": {
            "ControlType": "HeatSourceType_RelayControlled",
            "FuelType": "Gas",
            "CycleRate": "CPH_6"
        },
        "UnixTime": 1517775517,
        "CloudConnectionStatus": "Connected",
        "ZigbeeModuleVersion": "R311 B030517",
        "ZigbeeEui": "000B57FFFEAA7FC6",
        "LocalDateAndTime": {
            "Year": 2018,
            "Month": "February",
            "Date": 4,
            "Day": "Sunday",
            "Time": 2018
        },
        "HeatingButtonOverrideState": "Off",
        "HotWaterButtonOverrideState": "Off"
    },
    "Cloud": {
        "Environment": "Prod",
        "WiserApiHost": "api-nl.wiserair.com",
        "BootStrapApiHost": "bootstrap.gl.struxurewarecloud.com",
        "PublishRequests": {
            "RoomTimeSeries": false,
            "EcoMode": false,
            "BoilerOnOffEvent": false,
            "PercentageDemand": false,
            "ZigbeeDebug": false,
            "FotaProgress": false,
            "SupportPackage": false,
            "PairingToken": false,
            "Notification": false
        },
        "ScheduleIdsToPublish": [
        ]
    },
    "HeatingChannel": [
        {
            "id": 1,
            "Name": "Channel-1",
            "RoomIds": [
                1,
                2,
                3,
                4,
                5,
                6,
                7
            ],
            "PercentageDemand": 100,
            "DemandOnOffOutput": "Off",
            "HeatingRelayState": "Off",
            "IsSmartValvePreventingDemand": true
        }
    ],
    "HotWater": [
        {
            "id": 2,
            "OverrideType": "None",
            "ScheduleId": 1000,
            "Mode": "Auto",
            "WaterHeatingState": "Off",
            "HotWaterRelayState": "Off"
        }
    ],
    "Room": [
        {
            "id": 1,
            "OverrideType": "None",
            "RoomStatId": 63270,
            "SmartValveIds": [
                12483,
                3323
            ],
            "ScheduleId": 1001,
            "Name": "Living Room",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 207,
            "CurrentSetPoint": 205,
            "PercentageDemand": 0,
            "ControlOutputState": "Off",
            "WindowState": "Closed",
            "DisplayedSetPoint": 205
        },
        {
            "id": 2,
            "OverrideType": "None",
            "SmartValveIds": [
                25436
            ],
            "ScheduleId": 1002,
            "Name": "Kitchen",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 180,
            "CurrentSetPoint": 175,
            "PercentageDemand": 0,
            "ControlOutputState": "Off",
            "WindowState": "Closed",
            "DisplayedSetPoint": 175
        },
        {
            "id": 3,
            "OverrideType": "None",
            "SmartValveIds": [
                62258
            ],
            "ScheduleId": 1003,
            "Name": "Hallway",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 171,
            "CurrentSetPoint": 175,
            "PercentageDemand": 100,
            "ControlOutputState": "On",
            "WindowState": "Closed",
            "DisplayedSetPoint": 175
        },
        {
            "id": 4,
            "OverrideType": "None",
            "SmartValveIds": [
                12711
            ],
            "ScheduleId": 1004,
            "Name": "Bathroom",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 175,
            "CurrentSetPoint": 175,
            "PercentageDemand": 0,
            "ControlOutputState": "Off",
            "WindowState": "Closed",
            "DisplayedSetPoint": 175
        },
        {
            "id": 5,
            "OverrideType": "None",
            "SmartValveIds": [
                52952
            ],
            "ScheduleId": 1005,
            "Name": "Front Bedroom",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 179,
            "CurrentSetPoint": 175,
            "PercentageDemand": 0,
            "ControlOutputState": "Off",
            "WindowState": "Closed",
            "DisplayedSetPoint": 175
        },
        {
            "id": 6,
            "OverrideType": "None",
            "SmartValveIds": [
                40332
            ],
            "ScheduleId": 1006,
            "Name": "Back Bedroom",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 179,
            "CurrentSetPoint": 175,
            "PercentageDemand": 0,
            "ControlOutputState": "Off",
            "WindowState": "Closed",
            "DisplayedSetPoint": 175
        },
        {
            "id": 7,
            "OverrideType": "None",
            "SmartValveIds": [
                8288
            ],
            "ScheduleId": 1007,
            "Name": "Top Bedroom",
            "Mode": "Auto",
            "DemandType": "Modulating",
            "WindowDetectionActive": false,
            "CalculatedTemperature": 141,
            "CurrentSetPoint": 140,
            "PercentageDemand": 0,
            "ControlOutputState": "Off",
            "WindowState": "Closed",
            "DisplayedSetPoint": 140
        }
    ],
 "Schedule": [
        {
            "id": 1000,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 1000,
                        "DegreesC": -200
                    },
                    {
                        "Time": 1700,
                        "DegreesC": 1100
                    },
                    {
                        "Time": 2000,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "HotWater",
            "CurrentSetpoint": -200,
            "NextEventTime": 390,
            "NextEventSetpoint": 1100
        },
        {
            "id": 1001,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 205
                    },
                    {
                        "Time": 1800,
                        "DegreesC": 205
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 205,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        },
        {
            "id": 1002,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 175,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        },
        {
            "id": 1003,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 175,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        },
        {
            "id": 1004,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 175,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        },
        {
            "id": 1005,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 175,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        },
        {
            "id": 1006,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 630,
                        "DegreesC": 175
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 175,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        },
        {
            "id": 1007,
            "Monday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Tuesday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Wednesday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Thursday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Friday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Saturday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Sunday": {
                "SetPoints": [
                    {
                        "Time": 1800,
                        "DegreesC": 140
                    },
                    {
                        "Time": 2300,
                        "DegreesC": -200
                    }
                ]
            },
            "Type": "Heating",
            "CurrentSetpoint": 140,
            "NextEventTime": 1380,
            "NextEventSetpoint": -200
        }
    ],

…continued…

"Device": [
        {
            "id": 0,
            "ProductType": "Controller",
            "ProductIdentifier": "Controller",
            "ActiveFirmwareVersion": "2.18.100",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "WT724R1S0902",
            "DisplayedSignalStrength": "VeryGood",
            "Rssi": -40
        },
        {
            "id": 63270,
            "ProductIdentifier": "RoomStat",
            "ActiveFirmwareVersion": "0401000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "Thermostat",
            "HardwareVersion": "0",
            "SerialNumber": "000B57FFFE5516AA",
            "ProductRange": "Wiser Heat",
            "ProductModel": "Thermostat",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 0,
            "DisplayedSignalStrength": "VeryGood",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -59,
            "Lqi": 164
        },
        {
            "id": 12483,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE62D27C",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 0,
            "DisplayedSignalStrength": "VeryGood",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -55,
            "Lqi": 180,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 3323,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE62D30A",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 0,
            "DisplayedSignalStrength": "Good",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -64,
            "Lqi": 144,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 25436,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE5191E0",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 0,
            "DisplayedSignalStrength": "Good",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -70,
            "Lqi": 120,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 62258,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE519351",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 1,
            "DisplayedSignalStrength": "Good",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -64,
            "Lqi": 144,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 12711,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE518FDD",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 1,
            "DisplayedSignalStrength": "Medium",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -79,
            "Lqi": 84,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 52952,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE62D2F7",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 1,
            "DisplayedSignalStrength": "Good",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -63,
            "Lqi": 148,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 40332,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE62D3CD",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 1,
            "DisplayedSignalStrength": "VeryGood",
            "BatteryVoltage": 29,
            "BatteryLevel": "Normal",
            "Rssi": -49,
            "Lqi": 204,
            "PendingZigbeeMessageMask": 0
        },
        {
            "id": 8288,
            "ProductIdentifier": "iTRV",
            "ActiveFirmwareVersion": "0201000000002371",
            "Manufacturer": "Schneider",
            "ModelIdentifier": "iTRV",
            "HardwareVersion": "0",
            "SerialNumber": "90FD9FFFFE518342",
            "ProductRange": "Wiser Heat",
            "ProductModel": "iTRV",
            "ProductFamily": "Wiser Heat",
            "OtaImageQueryCount": 0,
            "LastOtaImageQueryCount": 1,
            "DisplayedSignalStrength": "Good",
            "BatteryVoltage": 30,
            "BatteryLevel": "Normal",
            "Rssi": -70,
            "Lqi": 120,
            "PendingZigbeeMessageMask": 0
        }
    ],
    "UpgradeInfo": [
        {
            "id": 9,
            "FirmwareFilename": "0541010100000018FOTA.BIN"
        },
        {
            "id": 8,
            "FirmwareFilename": "0541000000000018FOTA.BIN"
        },
        {
            "id": 7,
            "FirmwareFilename": "0501010100000018FOTA.BIN"
        },
        {
            "id": 6,
            "FirmwareFilename": "0501000000000018FOTA.BIN"
        },
        {
            "id": 5,
            "FirmwareFilename": "0441010100002371FOTA.BIN"
        },
        {
            "id": 4,
            "FirmwareFilename": "0441000000002371FOTA.BIN"
        },
        {
            "id": 3,
            "FirmwareFilename": "0401010100002371FOTA.BIN"
        },
        {
            "id": 2,
            "FirmwareFilename": "0401000000002371FOTA.BIN"
        },
        {
            "id": 1,
            "FirmwareFilename": "0201000000002371FOTA.BIN"
        }
    ],
    "SmartValve": [
        {
            "id": 12483,
            "MountingOrientation": "Vertical",
            "SetPoint": 205,
            "MeasuredTemperature": 176,
            "PercentageDemand": 0,
            "WindowState": "Closed",
            "ExternalRoomStatTemperature": 207
        },
        {
            "id": 25436,
            "MountingOrientation": "Vertical",
            "SetPoint": 175,
            "MeasuredTemperature": 180,
            "PercentageDemand": 0,
            "WindowState": "Closed"
        },
        {
            "id": 62258,
            "MountingOrientation": "Vertical",
            "SetPoint": 175,
            "MeasuredTemperature": 171,
            "PercentageDemand": 0,
            "WindowState": "Closed"
        },
        {
            "id": 12711,
            "MountingOrientation": "Vertical",
            "SetPoint": 175,
            "MeasuredTemperature": 175,
            "PercentageDemand": 0,
            "WindowState": "Closed"
        },
        {
            "id": 52952,
            "MountingOrientation": "Vertical",
            "SetPoint": 175,
            "MeasuredTemperature": 179,
            "PercentageDemand": 0,
            "WindowState": "Closed"
        },
        {
            "id": 40332,
            "MountingOrientation": "Vertical",
            "SetPoint": 175,
            "MeasuredTemperature": 179,
            "PercentageDemand": 0,
            "WindowState": "Closed"
        },
        {
            "id": 8288,
            "MountingOrientation": "Vertical",
            "SetPoint": 140,
            "MeasuredTemperature": 141,
            "PercentageDemand": 0,
            "WindowState": "Closed"
        },
        {
            "id": 3323,
            "MountingOrientation": "Vertical",
            "SetPoint": 205,
            "MeasuredTemperature": 170,
            "PercentageDemand": 0,
            "WindowState": "Closed",
            "ExternalRoomStatTemperature": 207
        }
    ],
    "RoomStat": [
        {
            "id": 63270,
            "SetPoint": 205,
            "MeasuredTemperature": 207,
            "MeasuredHumidity": 44
        }
    ]
}

…and various hot water states:

"HotWater":[
{
"id": 2,
"OverrideType": "None",
"ScheduleId": 1000,
"Mode": "Auto",
"WaterHeatingState": "Off",
"HotWaterRelayState": "Off"
}
],

"HotWater":[
{
"id": 2,
"ScheduleId": 1000,
"Mode": "Manual",
"WaterHeatingState": "Off",
"HotWaterRelayState": "Off"
}
],

HotWater":[
{
"id": 2,
"OverrideType": "Manual",
"OverrideWaterHeatingState": "On",
"ScheduleId": 1000,
"Mode": "Auto",
"WaterHeatingState": "On",
"HotWaterRelayState": "On"
}
],

"HotWater":[
{
"id": 2,
"OverrideType": "Manual",
"OverrideTimeoutUnixTime": 1517780154,
"OverrideWaterHeatingState": "On",
"ScheduleId": 1000,
"Mode": "Auto",
"WaterHeatingState": "On",
"HotWaterRelayState": "On"
}
],

@ultraviolet Thanks, that’s great. I’ve pushed an update that moves the the hotwater items into their own thing, and allows toggling manual mode. I need to think of a good way of distinguishing the 2 override types though. The current readonly one, is the state of the button on the controller itself, whereas the togglable state (not implemented) is when you manually turn the hot water on from the app (not boosting).

@jimmyss04 I’m testing some changes that might help with the controller not updating anymore. I’ve altered some exception handling (which might break your restart script at the moment), which hopefully means that if it happens again, more useful detail gets written to the log. I’ve got this new code running here, so I can leave it logging and see if/when the errors start occurring again.

@andrew-schofield do you need any help testing?

Well, it doesn’t appear to have made my setup worse, but it took a couple of days for it to fall over last time, so if you want to test it then I say go ahead :slight_smile:

I have just installed it, btw it would be really nice to have the version or date in the jar name, so we can easily identify it.

Thanks again!

Yeah, that seems to be controlled by the build runner attached to the pull request unfortunately, I can’t work out if it’s possible to configure it at all.

Any idea what happened here (huge negative temp value):

2018-02-05 21:06:19.693 [vent.ItemStateChangedEvent] - SmartValve31688_Temperature changed from 20.600000381469727 to 20.700000762939453
2018-02-05 21:06:27.633 [vent.ItemStateChangedEvent] - Controller_Channel1RequestingHeat changed from OFF to ON
2018-02-05 21:07:19.457 [vent.ItemStateChangedEvent] - Living_CurrentHeatDemand changed from 86 to 20
2018-02-05 21:07:19.461 [vent.ItemStateChangedEvent] - Living_CurrentlyRequestingHeat changed from OFF to ON
2018-02-05 21:07:19.532 [vent.ItemStateChangedEvent] - Yroom_Temperature changed from 18.799999237060547 to -3276.800048828125
2018-02-05 21:07:19.537 [vent.ItemStateChangedEvent] - Yroom_CurrentHeatDemand changed from 43 to 0
2018-02-05 21:07:19.541 [vent.ItemStateChangedEvent] - Lroom_Temperature changed from 16.5 to -3276.800048828125
2018-02-05 21:07:19.548 [hingStatusInfoChangedEvent] - 'draytonwiser:itrv:WiserHeat028823:90FD9FFFFE518235' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR)
2018-02-05 21:07:19.564 [vent.ItemStateChangedEvent] - Sroom_Temperature changed from 17.299999237060547 to -3276.800048828125
2018-02-05 21:07:19.597 [hingStatusInfoChangedEvent] - 'draytonwiser:itrv:WiserHeat028823:90FD9FFFFE509FBF' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR)
2018-02-05 21:07:19.603 [hingStatusInfoChangedEvent] - 'draytonwiser:itrv:WiserHeat028823:90FD9FFFFE5182E6' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR)
2018-02-05 21:07:19.609 [hingStatusInfoChangedEvent] - 'draytonwiser:itrv:WiserHeat028823:000B57FFFEAA1C45' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR)
2018-02-05 21:07:19.654 [hingStatusInfoChangedEvent] - 'draytonwiser:itrv:WiserHeat028823:90FD9FFFFE104335' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR)
2018-02-05 21:07:19.669 [hingStatusInfoChangedEvent] - 'draytonwiser:roomstat:WiserHeat028823:000B57FFFEE941B6' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR)
2018-02-05 21:07:27.667 [vent.ItemStateChangedEvent] - Controller_Channel1HeatDemand changed from 86 to 20
2018-02-05 21:07:27.677 [vent.ItemStateChangedEvent] - Controller_Channel1RequestingHeat changed from ON to OFF
2018-02-05 21:08:19.494 [vent.ItemStateChangedEvent] - Yroom_Temperature changed from -3276.800048828125 to 19.0
2018-02-05 21:08:19.528 [vent.ItemStateChangedEvent] - Yroom_CurrentHeatDemand changed from 0 to 52
2018-02-05 21:08:19.545 [vent.ItemStateChangedEvent] - Yroom_CurrentlyRequestingHeat changed from OFF to ON
2018-02-05 21:08:19.557 [vent.ItemStateChangedEvent] - Lroom_Temperature changed from -3276.800048828125 to 16.5
2018-02-05 21:08:19.586 [vent.ItemStateChangedEvent] - Sroom_Temperature changed from -3276.800048828125 to 17.299999237060547

I can’t see anything suspicious in the logs, any ideas?

Thanks!

Yeah, it just means that your TRV disconnected from the zigbee network. The temperature value is actually the MinValue of a signed short integer, which I’m going to use as a “Connected/Disconnected” state check. I had the same issue last night with one of my TRVs, I just need to alter the temperature state to return undefined (null) when this happens which will clean up the charts.
Unfortunately it my case it was more of a problem because the TRV had actually fully disconnected and wouldn’t re-join without removing the batteries.

In other news, I did manage to completely replicate your situation where everything stops updating. I think I’ve managed to narrow it down to the following weird situation:

  • When the httpclient hits a timeout exception, in certain situations it will fail to recover and never send any more requests.

I don’t know why this happens, it could be a bug in jetty, but that seems unlikely. I’m going to have a dig around in the source code for some other bindings that do regular http requests to see if they handle things differently.

The current code in github also has a “bug” which means that after a while all your things apart from the bridge will appear in the offline state, but will keep updating. It doesn’t affect the reporting/logging, it just appears wrong. I’ve fixed this locally but not pushed my changes yet.

2 Likes

So, I’m still investigating the timeout bug, which I’ve partially replicated again, but in the meantime I’ve fixed the large negative value issue. The rooms should report a null/undefined temperature when the device loses it’s network connection. I’ve also added a new zigbeeConnected item to the roomstat/trv things to track when a device decides to fall off the network.

The README file is now up to date with all supported channels, + some that I hope to include in the near future.
These are essentially:

  • Move awayModeSetPoint to a config variable, as it isn’t persisted by the controller
  • Add the on/off setpoint for hot water
  • Add boosting (basically set a number of hours for boost) to rooms and hot water
  • Possibly add schedules to room and hot water.

I’d quite like to add schedules as it means if openHAB breaks, my heating can still work as normal (i.e. in auto mode).

Can anyone else think of any other channels that are necessary for this binding to be usable?

1 Like