asantaga / wiserHomeAssistantPlatform

Platform and related climate/sensors to support the Drayton Wiser Home Heating System
MIT License
225 stars 43 forks source link

Give me feedback here! #46

Closed asantaga closed 4 years ago

asantaga commented 4 years ago

Hey all,

Use this issue to comment, feedback etc to me about this component.

I created this issue/feedback thing because github doesnt have a way of sending emails/feedbacks to components anywhere.. Issues work!

scooper1 commented 4 years ago

thanks for rapid response on the issues

michthom commented 4 years ago

Can't wait to see this appear in the main HA stream, well done for all your work so far. Is there any way to interrogate / change the schedules (configured via the Wiser app), or do the Heat Hub / devices not expose that in a way you can get at it? I realise it would be reimplementing what their app already gives you, but if possible it would presumably mean HA could adjust the schedules or the Wiser App could update HA's view of the schedules, making it two-way and opening the option to not use the Wiser app at all?

scooper1 commented 4 years ago

another thing that seems to be a little wrong the set times on graphs seams to be a hour offset except when you do a boost i think this is also making the set point show wrong when the last change is at 23.59

scooper1 commented 4 years ago

it would be nice if we can set the schedule - then we would not need to win the lottery to get the wiser heat program to connect and show info

asantaga commented 4 years ago

WOW you guys are quick at noticing this feedback issue!!!! :-) :-)

michthom

Can't wait to see this appear in the main HA stream, well done for all your work so far. Is there any way to interrogate / change the schedules (configured via the Wiser app), or do the Heat Hub / devices not expose that in a way you can get at it? I realise it would be reimplementing what their app already gives you, but if possible it would presumably mean HA could adjust the schedules or the Wiser App could update HA's view of the schedules, making it two-way and opening the option to not use the Wiser app at all?

Ive not seen how to do this.. Also im not sure how useful it would be.. I'll have a hunt around and see if I can work it out.. may need to do some wiresharking

asantaga commented 4 years ago

@scooper1

another thing that seems to be a little wrong the set times on graphs seams to be a hour offset except when you do a boost i think this is also making the set point show wrong when the last change is at 23.59

I just checked my HA install and the set appears spot on.. Can u double check and if it is out log a issue.. that said... im not 100% sure what it could be , we just report back the "set" value at that time.....

it would be nice if we can set the schedule - then we would not need to win the lottery to get the wiser heat program to connect and show info

Not sure what you mean... Do you mean the android/ios wiser app is a little "flaky" when it connects?

asantaga commented 4 years ago

@michthom

Can't wait to see this appear in the main HA stream, well done for all your work so far

Yeah , its just a ton of work. Most of it tedious, making sure one space not two, 80 character line limits and I still aint figured out the documentation part.. Alas work is a bit hectic atm.

Anyone wanna help here?

asantaga commented 4 years ago

ps One advantage of HACS is that we can re-release versions quickly.. that said if my testing procedure was .... better... then it wouldnt an issue !! :-) :-)

scooper1 commented 4 years ago

android app is very flaky only connect 25% of time if you ping heat hub from pc the 5% of pings get dropped

it seems like a time zone issue

info - i am in london house is london - the set times appear to to show a hour early it may be just my linux setup if i set a heat demand change it appears to be shown at 7am instead of the set 8am time I will investigate some more now it appears to be stable

asantaga commented 4 years ago

@scooper1 Yeah the android app is a little flaky and yeah Ive noticed that the heat hub isnt the most responsive.. Id be weary of pinging it too much .. I had some bad experiences with the Max! heating in the past and whilst the wiser hub appears to be MUCH better Im a little cautious now. this is why I put a back off in the code..

michthom commented 4 years ago

@asantaga

Anyone wanna help here?

Well that's fair. I'd be willing to help with some of the drudge work. With luck there's a lint recipe that could be used to find code that doesn't meet the standards set down? What's the best way to contribute? I'm guessing just fork your repo, make adjustments and send you a pull request as normal?

[edit] I've run the Python code through black (version 19.10b0) and sent you a pull request.

asantaga commented 4 years ago

Hey thanks!

Ill check tomorrow and merge... i have man flu today :-(

msp1974 commented 4 years ago

I was thinking the same about being able to set schedules. The new wiser boost service was partly useful but partly so i could learn about adding services to HA before i tried to tackle being able to do schedules.

Use case i have is being able to have more than one schedule for a trv depending on whether we are out or in during the day rather than just using away mode which is more for a vacation etc.

As HA doesnt really have schedules for climate devices, this is what i was thinking of doing. Fedback from all on whether this seems like a good idea or any better ideas welcome.

Service to get a schedule This would read the schedule for a trv and save it to a yaml file

Service to set a schedule This would read a yaml file and pass to the wiser hub to set a new schedule for a trv

My thoughts are that this would allow you to have multiple different schedules and be able to use an automation or script to set different schedules for a trv.

Downside is that you would have to manually edit each schedule but creating a schedule manager in HA is way beyond my capability.

@asantaga

I have worked out how to read and write individual schedules. As is common with wiser hub, reading is data/domain/Schedule/scheduleid To write you have to supply the full schedule in json as displayed when you read. When you write it is a full replacement so anything you dont send is erased.

michthom commented 4 years ago

I was thinking the same about being able to set schedules. ... Use case i have is being able to have more than one schedule for a trv Feedback from all on whether this seems like a good idea or any better ideas welcome.

Absolutely - exactly my thoughts too.

As is common with wiser hub, reading is data/domain/Schedule/scheduleid To write you have to supply the full schedule in json as displayed when you read. When you write it is a full replacement so anything you dont send is erased.

Brilliant! I'm struggling to capture traffic involving my own HeatHub because my Wifi can't separate the 5/2.4GHz channels, and my Mac can't disable the 5GHz band! May have to break out a different machine that I can camp on 2.4...

scooper1 commented 4 years ago

I think it would be in keeping with Ha stand alone way of working This a interesting idea as you could have schedules for rotating shift patterns

it would be interesting to a complete alternative to wiser heat - to do this we would need to be able to add remove and assign devices to rooms

asantaga commented 4 years ago

@scooper1 Ive logged enh https://github.com/asantaga/wiserHomeAssistantPlatform/issues/48 , which is dependant on ER https://github.com/asantaga/wiserheatingapi/issues/8 in the core library..

Implementing the core library isnt too hard, making it useful in HA.. different story

asantaga commented 4 years ago

@michthom See here https://github.com/asantaga/wiserHomeAssistantPlatform/issues/7

relaystar commented 4 years ago

My 2 cents:

1) being able to manage the schedules in HA would be great, but I'm not sure its a great fit for HA. FWIW I currently manage my schedules using curl and vim because the android app was annoying me.

2) WRT HACS, it works pretty well, being integrated into HA would be nice, but not urgent IMO.

3) if possible I'd like to control the hot-water with HA, specifically so I could attach it to away mode.

scooper1 commented 4 years ago

If the wiser heat hub is offline ...... And you restart the hassio the init routine fails as expected would it be possible to keep on retrying init routine until heat hub is online This maybe normal hassio behaviour - I don't have much other equipment that goes offline regularly

scooper1 commented 4 years ago

would it break too much to change order of attributes in the climate object so when you do a badge etc it sees the current temperature by default instead of current operating mode

msp1974 commented 4 years ago

would it break too much to change order of attributes in the climate object so when you do a badge etc it sees the current temperature by default instead of current operating mode

@scooper1 this is a function of HA not the wiser component. You could always use a template sensor to put this on a badge if you want to just show current temp. Something like this.

- platform: template sensors: office_temp: friendly_name: "Office Temperature" unit_of_measurement: '°C' value_template: "{{ state_attr('climate.wiser_office', 'current_temperature') }}"

asantaga commented 4 years ago

guys,

Just wanted to say WOW AND THANK YOU for all responding and collaborating on this. Since Ive posted this thread Ive received a number of really good ideas and awesome contributors. (@msp1974 @michthom are the latest heros!)

This weekend I plan to merge a number of new enhancements and start the process of adding the integration to HA natively. HACS support will remain however I may deprecate the custom_components approach (which I think isnt needed anymore).

Thanks again all

asantaga commented 4 years ago

@scooper1

If the wiser heat hub is offline ...... And you restart the hassio the init routine fails as expected would it be possible to keep on retrying init routine until heat hub is online This maybe normal hassio behaviour - I don't have much other equipment that goes offline regularly

Logged https://github.com/asantaga/wiserHomeAssistantPlatform/issues/51

@relaystar PR submitted by @msp1974 for the ability to modify TRV schedules https://github.com/asantaga/wiserHomeAssistantPlatform/pull/49

scooper1 commented 4 years ago

The heat hub locks out on wifi so often I am think of putting a power switch inline with it to reset it so any improvement in recovery for this component would be useful Again thanks for doing these changes

jchasey commented 4 years ago

I was having loads of issues with heathub with Unifi wifi. Turned off the 'auto improve' wifi settings in unifi and now solid as a rock

scooper1 commented 4 years ago

I have a both tp link deco m4r mesh   and archer c7 running openwrt The deco has fast roaming and 5ghz turned offTry both and no differance  both routers are within 5m of heathub Seams related to how many polls are done per hour  Sent from Yahoo Mail on Android

On Fri, 17 Jan 2020 at 11:45, jchaseynotifications@github.com wrote:
I was having loads of issues with heathub with Unifi wifi. Turned off the 'auto improve' wifi settings in unifi and now solid as a rock

— You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub, or unsubscribe.

mrvladis commented 4 years ago

Just in case it would be helpful for anyone - hub works perfectly fine with Google WiFi. Using it already for more than a year, with around 40-50 other devices seating on the same WiFi.

lewisbeard commented 4 years ago

I get this error in log. Any ideas?

Error while setting up platform wiser Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 158, in _async_setup_platform await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT) File "/usr/local/lib/python3.7/asyncio/tasks.py", line 442, in wait_for return fut.result() File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run result = self.fn(*self.args, self.kwargs) File "/config/custom_components/wiser/climate.py", line 56, in setup_platform handler.update() File "/config/custom_components/wiser/init.py", line 106, in update self.wiserHubInstance = wiserHub.wiserHub(self.ip, self.secret) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 47, in init self.refreshData() # Issue first refresh in init File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 87, in refreshData self.hubIP), headers=self.headers, timeout=TIMEOUT).json() File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 897, in json return complexjson.loads(self.text, kwargs) File "/usr/local/lib/python3.7/site-packages/simplejson/init.py", line 525, in loads return _default_decoder.decode(s) File "/usr/local/lib/python3.7/site-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/local/lib/python3.7/site-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

asantaga commented 4 years ago

oo this last error is a nasty one.. Can u log a seperate issue for this. this thread is (primarily) for discussion...

asantaga commented 4 years ago

Whilst Im here, I have gotta give a shout to @msp1974 , Hes just done an awesome job of reimplementing the custom component to use async and fix some bugs. Im planning to add the hotwater switch (issue#34) and black formatting and then that will be be release 1.9

Anything else we want to include for 1.9?

If you want to test out 1.9, clone the repo and checkout branch R1.9DEV

scooper1 commented 4 years ago

just been testing 1.9 comments so far its mostly working - well done I was expecting a switch to appear to control the wiser plug My hotwater sensor seams have morphed into wiser_heating_2

msp1974 commented 4 years ago

@scooper you're right. There is an error in the sensor.py code on line 51. This should say HOTWATER not HEATING. Don't have a hot water one so missed this in my testing! @asantaga do you want me to do a PR or will you do?

asantaga commented 4 years ago

@msp1974 I was planning to do some coding tonight, so I'll add this to the mix tonight :-)

Fixed

scooper1 commented 4 years ago

just had to reset the heathub again 1.9 recovered much better from this problem - thanks!

is there anyway currently of spotting the last time the hub communicated as i am going to put a remote reset switch on the hub ( cut power for 5 seconds then power back up again_

asantaga commented 4 years ago

@scooper1 I've never had to reboot the hub.. strange.. You could create a restful command (https://www.home-assistant.io/integrations/rest_command/) and periodically call the heathub with a GET. If you get a 200 then all is ok, anything else means time to reboot!

asantaga commented 4 years ago

R1.9 is being developed and in the R1.9DEV branch. last thing to add is smartplug which I am nearly finished in doing.

Fulch commented 4 years ago

Testing 1.9DEV

Noticed that the Get Schedule service is rounding all temperatures to 0 dec places. i.e. 14.5 > 14 , 19.5 > 20 , 15.5 > 16

Should line 46 in 'util.py' "value = round(value / 10)" be changed to "value = round(value / 10 , 1)"

Thank you and all the other contributors for making Wiser much more useful!

scooper1 commented 4 years ago

testing 1.9dev

all my climate entries have gone missing after restart error in log see below tia after about 30 minutes the climate entries did manage to populate does not seam to error all the time - mostly errors are as below but sometimes other random errors i have restarted the heat hub and hassio server a number of times

2020-02-05 17:18:54 INFO (SyncWorker_16) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-05 17:18:56 DEBUG (SyncWorker_16) [wiserHeatingAPI.wiserHub] Wiser Hub Data received {'System': {'PairingStatus': 'Paired', 'TimeZoneOffset': 0, 'AutomaticDaylightSaving': True, 'SystemMode': 'Heat', 'FotaEnabled': True, 'ValveProtectionEnabled': False, 'EcoModeEnabled': True, 'AwayModeAffectsHotWater': False, 'AwayModeSetPointLimit': 160, 'BoilerSettings': {'ControlType': 'HeatSourceType_RelayControlled', 'FuelType': 'Gas', 'CycleRate': 'CPH_6', 'OnOffHysteresis': 5}, 'CoolingModeDefaultSetpoint': 210, 'CoolingAwayModeSetpointLimit': 240, 'ComfortModeEnabled': True, 'PreheatTimeLimit': 10800, 'DegradedModeSetpointThreshold': 180, 'UnixTime': 1580923080, 'ActiveSystemVersion': '2.44.0-0b3fba4327', 'BrandName': 'WiserHeat', 'CloudConnectionStatus': 'Connected', 'LocalDateAndTime': {'Year': 2020, 'Month': 'February', 'Date': 5, 'Day': 'Wednesday', 'Time': 1718}, 'HeatingButtonOverrideState': 'Off', 'HotWaterButtonOverrideState': 'Off', 'OpenThermConnectionStatus': 'Disconnected'}, 'Cloud': {'Environment': 'Prod', 'DetailedPublishing': False, 'EnableDiagnosticTelemetry': False, 'WiserApiHost': 'api-nl.wiserair.com', 'BootStrapApiHost': 'bootstrap.gl.struxurewarecloud.com'}, 'HeatingChannel': [{'id': 1, 'Name': 'Channel-1', 'RoomIds': [1, 2, 4, 5, 6, 7, 8, 9, 10, 11], 'PercentageDemand': 100, 'DemandOnOffOutput': 'On', 'HeatingRelayState': 'On', 'IsSmartValvePreventingDemand': False}], 'HotWater': [{'id': 2, 'OverrideType': 'None', 'ScheduleId': 1000, 'Mode': 'Manual', 'ManualWaterHeatingState': 'Off', 'WaterHeatingState': 'Off', 'ScheduledWaterHeatingState': 'Off', 'HotWaterRelayState': 'Off', 'HotWaterDescription': 'FromManualMode'}], 'Room': [{'id': 1, 'ManualSetPoint': 190, 'ScheduleId': 1, 'ComfortModeScore': 409, 'HeatingRate': 1162, 'SmartValveIds': [2], 'Name': 'Mum bedroom', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 196, 'CurrentSetPoint': 150, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 150, 'ScheduledSetPoint': 150, 'RoundedAlexaTemperature': 195, 'ComfortTarget': 230, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}, {'id': 2, 'ManualSetPoint': 150, 'ScheduleId': 2, 'ComfortModeScore': 963, 'HeatingRate': 1094, 'SmartValveIds': [8], 'Name': 'Mums bath room', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 207, 'CurrentSetPoint': 150, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 150, 'ScheduledSetPoint': 150, 'RoundedAlexaTemperature': 205, 'ComfortTarget': 220, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}, {'id': 4, 'ManualSetPoint': 150, 'ScheduleId': 4, 'HeatingRate': 1200, 'SmartValveIds': [4], 'Name': 'Old kitchen', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 206, 'CurrentSetPoint': 200, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 200, 'ScheduledSetPoint': 200, 'RoundedAlexaTemperature': 205, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}, {'id': 5, 'ManualSetPoint': 120, 'ScheduleId': 5, 'HeatingRate': 1200, 'SmartValveIds': [5], 'Name': 'Hall', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 205, 'CurrentSetPoint': 190, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 190, 'ScheduledSetPoint': 190, 'RoundedAlexaTemperature': 205, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}, {'id': 6, 'ManualSetPoint': 150, 'ScheduleId': 6, 'ComfortModeScore': 6781, 'HeatingRate': 3731, 'RoomStatId': 3, 'SmartValveIds': [6], 'Name': 'Back room', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 217, 'CurrentSetPoint': 225, 'PercentageDemand': 58, 'ControlOutputState': 'On', 'WindowState': 'Closed', 'SetpointOrigin': 'FromComfortMode', 'DisplayedSetPoint': 225, 'ScheduledSetPoint': 180, 'RoundedAlexaTemperature': 215, 'ComfortTarget': 225, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 58}, {'id': 7, 'ManualSetPoint': 120, 'ScheduleId': 7, 'ComfortModeScore': 3231, 'HeatingRate': 2074, 'SmartValveIds': [7], 'Name': 'Front room', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 236, 'CurrentSetPoint': 250, 'PercentageDemand': 100, 'ControlOutputState': 'On', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 250, 'ScheduledSetPoint': 250, 'RoundedAlexaTemperature': 235, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 100}, {'id': 8, 'ManualSetPoint': 100, 'ScheduleId': 8, 'ComfortModeScore': 1343, 'HeatingRate': 1080, 'SmartValveIds': [9], 'Name': 'Top floor', 'Mode': 'Manual', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 129, 'CurrentSetPoint': 100, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromManualMode', 'DisplayedSetPoint': 100, 'ScheduledSetPoint': 180, 'RoundedAlexaTemperature': 130, 'EffectiveMode': 'Manual', 'PercentageDemandForItrv': 0}, {'id': 9, 'ManualSetPoint': 120, 'ScheduleId': 9, 'ComfortModeScore': 615, 'HeatingRate': 1564, 'SmartValveIds': [10], 'Name': 'Top bath room', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 180, 'CurrentSetPoint': 170, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 170, 'ScheduledSetPoint': 170, 'RoundedAlexaTemperature': 180, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}, {'id': 10, 'ManualSetPoint': 150, 'ScheduleId': 10, 'ComfortModeScore': 2482, 'HeatingRate': 1828, 'SmartValveIds': [11], 'Name': 'Middle Toilet', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 192, 'CurrentSetPoint': 170, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 170, 'ScheduledSetPoint': 170, 'RoundedAlexaTemperature': 190, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}, {'id': 11, 'ManualSetPoint': 150, 'ScheduleId': 11, 'ComfortModeScore': 310, 'HeatingRate': 1080, 'SmartValveIds': [12], 'Name': 'Back Bedroom', 'Mode': 'Auto', 'DemandType': 'Modulating', 'WindowDetectionActive': False, 'ControlSequenceOfOperation': 'HeatingOnly', 'HeatingType': 'HydronicRadiator', 'CalculatedTemperature': 186, 'CurrentSetPoint': 160, 'PercentageDemand': 0, 'ControlOutputState': 'Off', 'WindowState': 'Closed', 'SetpointOrigin': 'FromSchedule', 'DisplayedSetPoint': 160, 'ScheduledSetPoint': 160, 'RoundedAlexaTemperature': 185, 'EffectiveMode': 'Auto', 'PercentageDemandForItrv': 0}], 'Device': [{'id': 0, 'NodeId': 0, 'ProductType': 'Controller', 'ProductIdentifier': 'Controller', 'ActiveFirmwareVersion': '2.44.0', 'ModelIdentifier': 'WT724R1S0902', 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'VeryGood', 'ReceptionOfController': {'Rssi': -58}}, {'id': 3, 'NodeId': 11778, 'ProductType': 'RoomStat', 'ProductIdentifier': 'RoomStat', 'ActiveFirmwareVersion': '04E1000900042002', 'ModelIdentifier': 'Thermostat', 'HardwareVersion': '1', 'SerialNumber': '086BD7FFFEF573A9', 'ProductModel': 'Thermostat', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -79, 'Lqi': 84}, 'ReceptionOfDevice': {'Rssi': -76, 'Lqi': 96}}, {'id': 2, 'NodeId': 38699, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7C8702', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 35505, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 29, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -73, 'Lqi': 108}, 'ReceptionOfDevice': {'Rssi': -81, 'Lqi': 76}}, {'id': 4, 'NodeId': 7613, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7FC0F5', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -71, 'Lqi': 116}, 'ReceptionOfDevice': {'Rssi': -71, 'Lqi': 116}}, {'id': 5, 'NodeId': 59042, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7FC0EE', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -75, 'Lqi': 100}, 'ReceptionOfDevice': {'Rssi': -75, 'Lqi': 100}}, {'id': 6, 'NodeId': 1914, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7C8E06', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -74, 'Lqi': 104}, 'ReceptionOfDevice': {'Rssi': -74, 'Lqi': 104}}, {'id': 7, 'NodeId': 35011, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': '14B457FFFE769487', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 35505, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -77, 'Lqi': 92}, 'ReceptionOfDevice': {'Rssi': -81, 'Lqi': 76}}, {'id': 8, 'NodeId': 11320, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': '086BD7FFFEF38BC3', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 35505, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Medium', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -77, 'Lqi': 92}, 'ReceptionOfDevice': {'Rssi': -81, 'Lqi': 76}}, {'id': 9, 'NodeId': 5751, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7C7A11', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 4, 'ParentNodeId': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Good', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -62, 'Lqi': 152}, 'ReceptionOfDevice': {'Rssi': -66, 'Lqi': 136}}, {'id': 10, 'NodeId': 39298, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7C767F', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 35505, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'VeryGood', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -59, 'Lqi': 164}, 'ReceptionOfDevice': {'Rssi': -81, 'Lqi': 76}}, {'id': 11, 'NodeId': 64125, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': 'CCCCCCFFFE7C8E72', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 35505, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Good', 'BatteryVoltage': 31, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -69, 'Lqi': 124}, 'ReceptionOfDevice': {'Rssi': -81, 'Lqi': 76}}, {'id': 12, 'NodeId': 17135, 'ProductType': 'iTRV', 'ProductIdentifier': 'iTRV', 'ActiveFirmwareVersion': '0201000000042002', 'ModelIdentifier': 'iTRV', 'HardwareVersion': '0', 'SerialNumber': '086BD7FFFEF56395', 'ProductModel': 'iTRV', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 1, 'ParentNodeId': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Poor', 'BatteryVoltage': 30, 'BatteryLevel': 'Normal', 'ReceptionOfController': {'Rssi': -82, 'Lqi': 72}, 'ReceptionOfDevice': {'Rssi': -83, 'Lqi': 68}}, {'id': 13, 'NodeId': 35505, 'ProductType': 'SmartPlug', 'ProductIdentifier': 'HeimanSmartplug', 'ActiveFirmwareVersion': '', 'ModelIdentifier': 'SmartPlug', 'HardwareVersion': '', 'SerialNumber': '000D6F0014F70B19', 'ProductModel': '', 'OtaImageQueryCount': 0, 'LastOtaImageQueryCount': 0, 'DeviceLockEnabled': False, 'DisplayedSignalStrength': 'Good', 'ReceptionOfDevice': {'Rssi': -81, 'Lqi': 76}}], 'Zigbee': {'Error72Reset': 3, 'JPANCount': 11, 'NetworkChannel': 25, 'NoSignalReset': 3, 'SuppressApsAcks': True, 'ZigbeeModuleVersion': 'R311 B021019', 'ZigbeeEUI': '14B457FFFE767F49'}, 'UpgradeInfo': [{'id': 1, 'FirmwareFilename': '0201000000042002FOTA.BIN'}, {'id': 2, 'FirmwareFilename': '0401000000010005FOTA.BIN'}, {'id': 3, 'FirmwareFilename': '0401010100010005FOTA.BIN'}, {'id': 4, 'FirmwareFilename': '0441000000010005FOTA.BIN'}, {'id': 5, 'FirmwareFilename': '0441010100010005FOTA.BIN'}, {'id': 6, 'FirmwareFilename': '04E1000900042002FOTA.BIN'}, {'id': 7, 'FirmwareFilename': '05E1000900000023FOTA.BIN'}, {'id': 8, 'FirmwareFilename': '0A00000000032000FOTA.BIN'}], 'SmartValve': [{'id': 2, 'MountingOrientation': 'Vertical', 'SetPoint': 150, 'MeasuredTemperature': 196, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 4, 'MountingOrientation': 'Vertical', 'SetPoint': 200, 'MeasuredTemperature': 206, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 5, 'MountingOrientation': 'Vertical', 'SetPoint': 190, 'MeasuredTemperature': 205, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 6, 'MountingOrientation': 'Vertical', 'SetPoint': 225, 'MeasuredTemperature': 233, 'PercentageDemand': 77, 'WindowState': 'Closed', 'ExternalRoomStatTemperature': 217}, {'id': 7, 'MountingOrientation': 'Vertical', 'SetPoint': 250, 'MeasuredTemperature': 236, 'PercentageDemand': 100, 'WindowState': 'Closed'}, {'id': 8, 'MountingOrientation': 'Vertical', 'SetPoint': 150, 'MeasuredTemperature': 207, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 9, 'MountingOrientation': 'Vertical', 'SetPoint': 100, 'MeasuredTemperature': 129, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 10, 'MountingOrientation': 'Vertical', 'SetPoint': 170, 'MeasuredTemperature': 180, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 11, 'MountingOrientation': 'Vertical', 'SetPoint': 170, 'MeasuredTemperature': 192, 'PercentageDemand': 0, 'WindowState': 'Closed'}, {'id': 12, 'MountingOrientation': 'Vertical', 'SetPoint': 160, 'MeasuredTemperature': 186, 'PercentageDemand': 0, 'WindowState': 'Closed'}], 'RoomStat': [{'id': 3, 'SetPoint': 225, 'MeasuredTemperature': 217, 'MeasuredHumidity': 39}], 'SmartPlug': [{'id': 13, 'ScheduleId': 2000, 'ManualState': 'Off', 'Name': 'Cooling fan', 'Mode': 'Manual', 'AwayAction': 'Off', 'OutputState': 'Off', 'ControlSource': 'FromManualMode', 'ScheduledState': 'Off'}], 'DeviceCapabilityMatrix': {'Roomstat': True, 'ITRV': True, 'SmartPlug': True, 'UFH': False, 'UFHFloorTempSensor': False, 'UFHDewSensor': False, 'HACT': False, 'LACT': False}, 'Schedule': [{'id': 1, 'Monday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Tuesday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Wednesday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Thursday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Friday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Saturday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Sunday': {'SetPoints': [{'Time': 810, 'DegreesC': 230}, {'Time': 900, 'DegreesC': 150}, {'Time': 2015, 'DegreesC': 230}, {'Time': 2130, 'DegreesC': 190}]}, 'Type': 'Heating'}, {'id': 2, 'Monday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Tuesday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Wednesday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Thursday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Friday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Saturday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Sunday': {'SetPoints': [{'Time': 735, 'DegreesC': 240}, {'Time': 830, 'DegreesC': 150}, {'Time': 1915, 'DegreesC': 220}, {'Time': 2130, 'DegreesC': 150}]}, 'Type': 'Heating'}, {'id': 4, 'Monday': {'SetPoints': [{'Time': 630, 'DegreesC': 190}, {'Time': 830, 'DegreesC': 150}, {'Time': 1630, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Tuesday': {'SetPoints': [{'Time': 630, 'DegreesC': 190}, {'Time': 830, 'DegreesC': 150}, {'Time': 1630, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Wednesday': {'SetPoints': [{'Time': 630, 'DegreesC': 190}, {'Time': 830, 'DegreesC': 150}, {'Time': 1630, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Thursday': {'SetPoints': [{'Time': 630, 'DegreesC': 190}, {'Time': 830, 'DegreesC': 150}, {'Time': 1630, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Friday': {'SetPoints': [{'Time': 630, 'DegreesC': 190}, {'Time': 830, 'DegreesC': 150}, {'Time': 1630, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Saturday': {'SetPoints': [{'Time': 700, 'DegreesC': 190}, {'Time': 1000, 'DegreesC': 170}, {'Time': 1600, 'DegreesC': 200}, {'Time': 2300, 'DegreesC': 150}]}, 'Sunday': {'SetPoints': [{'Time': 700, 'DegreesC': 190}, {'Time': 1000, 'DegreesC': 170}, {'Time': 1600, 'DegreesC': 200}, {'Time': 2300, 'DegreesC': 150}]}, 'Type': 'Heating'}, {'id': 5, 'Monday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}, {'Time': 915, 'DegreesC': 205}, {'Time': 1015, 'DegreesC': 190}]}, 'Tuesday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}, {'Time': 915, 'DegreesC': 205}, {'Time': 1015, 'DegreesC': 190}]}, 'Wednesday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}, {'Time': 915, 'DegreesC': 205}, {'Time': 1015, 'DegreesC': 190}]}, 'Thursday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}, {'Time': 915, 'DegreesC': 205}, {'Time': 1015, 'DegreesC': 190}]}, 'Friday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}, {'Time': 915, 'DegreesC': 205}, {'Time': 1015, 'DegreesC': 190}]}, 'Saturday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}]}, 'Sunday': {'SetPoints': [{'Time': 30, 'DegreesC': 120}, {'Time': 730, 'DegreesC': 190}]}, 'Type': 'Heating'}, {'id': 6, 'Monday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Tuesday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Wednesday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Thursday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Friday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Saturday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Sunday': {'SetPoints': [{'Time': 900, 'DegreesC': 200}, {'Time': 1000, 'DegreesC': 180}, {'Time': 1800, 'DegreesC': 225}, {'Time': 2359, 'DegreesC': 150}]}, 'Type': 'Heating'}, {'id': 7, 'Monday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 945, 'DegreesC': 190}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2259, 'DegreesC': 120}]}, 'Tuesday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 945, 'DegreesC': 190}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2259, 'DegreesC': 120}]}, 'Wednesday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 945, 'DegreesC': 190}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2259, 'DegreesC': 120}]}, 'Thursday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 945, 'DegreesC': 190}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2259, 'DegreesC': 120}]}, 'Friday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 945, 'DegreesC': 190}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2259, 'DegreesC': 120}]}, 'Saturday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2359, 'DegreesC': 120}]}, 'Sunday': {'SetPoints': [{'Time': 800, 'DegreesC': 230}, {'Time': 1640, 'DegreesC': 250}, {'Time': 2050, 'DegreesC': 210}, {'Time': 2359, 'DegreesC': 120}]}, 'Type': 'Heating'}, {'id': 8, 'Monday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Tuesday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Wednesday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Thursday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Friday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Saturday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Sunday': {'SetPoints': [{'Time': 730, 'DegreesC': 200}, {'Time': 830, 'DegreesC': 180}, {'Time': 2130, 'DegreesC': 200}, {'Time': 2230, 'DegreesC': 150}]}, 'Type': 'Heating'}, {'id': 9, 'Monday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Tuesday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Wednesday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Thursday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Friday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Saturday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Sunday': {'SetPoints': [{'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 120}]}, 'Type': 'Heating'}, {'id': 10, 'Monday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Tuesday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Wednesday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Thursday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Friday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Saturday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Sunday': {'SetPoints': [{'Time': 800, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 170}, {'Time': 2230, 'DegreesC': 150}]}, 'Type': 'Heating'}, {'id': 11, 'Monday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Tuesday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Wednesday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Thursday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Friday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Saturday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Sunday': {'SetPoints': [{'Time': 15, 'DegreesC': 190}, {'Time': 45, 'DegreesC': 150}, {'Time': 830, 'DegreesC': 190}, {'Time': 930, 'DegreesC': 160}]}, 'Type': 'Heating'}, {'id': 1000, 'Monday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Tuesday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Wednesday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Thursday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Friday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Saturday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Sunday': {'SetPoints': [{'Time': 830, 'DegreesC': -200}]}, 'Type': 'HotWater'}, {'id': 2000, 'Monday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Tuesday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Wednesday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Thursday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Friday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Saturday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Sunday': {'SetPoints': [{'Time': 1200, 'DegreesC': -200}]}, 'Type': 'HotWater'}]} 2020-02-05 17:18:56 DEBUG (SyncWorker_16) [wiserHeatingAPI.wiserHub] valve2roomMap{2: {'roomId': 1, 'roomName': 'Mum bedroom'}, 8: {'roomId': 2, 'roomName': 'Mums bath room'}, 4: {'roomId': 4, 'roomName': 'Old kitchen'}, 5: {'roomId': 5, 'roomName': 'Hall'}, 3: {'roomId': 6, 'roomName': 'Back room'}, 6: {'roomId': 6, 'roomName': 'Back room'}, 7: {'roomId': 7, 'roomName': 'Front room'}, 9: {'roomId': 8, 'roomName': 'Top floor'}, 10: {'roomId': 9, 'roomName': 'Top bath room'}, 11: {'roomId': 10, 'roomName': 'Middle Toilet'}, 12: {'roomId': 11, 'roomName': 'Back Bedroom'}} 2020-02-05 17:18:59 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Exception on post: Cannot connect to host 172.16.10.200:8088 ssl:None [Connect call failed ('172.16.10.200', 8088)] 2020-02-05 17:18:59 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Unable to retrieve HUB id 2020-02-05 17:18:59 WARNING (MainThread) [homeassistant.components.harmony.remote] living room: Unable to connect to HUB. 2020-02-05 17:18:59 WARNING (MainThread) [homeassistant.components.remote] Platform harmony not ready yet. Retrying in 60 seconds. 2020-02-05 17:19:15 WARNING (MainThread) [homeassistant.config_entries] Config entry for wled not ready yet. Retrying in 40 seconds. 2020-02-05 17:19:23 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 327, in _async_write_ha_state attr.update(self.state_attributes or {}) File "/config/custom_components/wiser/climate.py", line 424, in state_attributes attrs = super().state_attributes File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 254, in state_attributes data[ATTR_PRESET_MODE] = self.preset_mode File "/config/custom_components/wiser/climate.py", line 350, in preset_mode preset = WISER_PRESET_TO_HASS[wiser_preset.lower()] KeyError: 'fromcomfortmode'

asantaga commented 4 years ago

Can u log this as a separate issue. I think this may be a bug somewhere in climate. Do you set the modes using automation?

scooper1 commented 4 years ago

there may another bug in 1.9dev It would appear if you get bad data during the ITRV sensor set up during init phase then this is not recoverable without a restart I will try to save a debug log if this happens again

asantaga commented 4 years ago

Just added smartPlug support to R1.9dev, will do hotwater switch tomorrow.

@msp1974 , Checkout #34 , is it bad to force a refresh of the state?

asantaga commented 4 years ago

Question : Does anyone use Custom Updater anymore? The JSON files arent consistent since 1.7 and to be honest I think most people use HACS so Im thinking of removing it.. less to maintain.. Comments?

scooper1 commented 4 years ago

I only use hacs I think most new people would use hacs

Fulch commented 4 years ago

HACS or manual for testing development branch.

asantaga commented 4 years ago

Yeah, OK , Im going to remove the Custom Updater approach and add documentation showing how to pull the development branch. After we release R1.9Dev I will go to having a master branch and a branch called dev for the bleeding edge... for those who like to manually tinker.

scooper1 commented 4 years ago

there may another bug in 1.9dev It would appear if you get bad data during the ITRV sensor set up during init phase then this is not recoverable without a restart I will try to save a debug log if this happens again

it happened again debug follows integration does not recover I think i will need to restart wisher heathub to recover update not sure what real problem was maybe heat hub could not communicate to servers as status light was intermittent red

2020-02-08 21:01:09 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:01:09 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for sonoff which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:01:09 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for uilogs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:01:09 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for wiser which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:01:15 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for wundergroundpws which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:01:16 INFO (MainThread) [wiserHeatingAPI.wiserHub] WiserHub API Initialised : Version 1.0.3 2020-02-08 21:01:16 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:21 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:21 INFO (SyncWorker_11) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:21 INFO (MainThread) [homeassistant.components.rflink] Initiating Rflink connection 2020-02-08 21:01:21 INFO (MainThread) [homeassistant.components.rflink] Connected to Rflink 2020-02-08 21:01:21 DEBUG (MainThread) [rflink.protocol] connected 2020-02-08 21:01:21 WARNING (MainThread) [homeassistant.components.device_tracker] The 'hide_if_away' option (with value 'True') is deprecated, please remove it from your configuration. This option will become invalid in version 0.107.0 2020-02-08 21:01:21 WARNING (MainThread) [homeassistant.components.device_tracker] The 'hide_if_away' option (with value 'True') is deprecated, please remove it from your configuration. This option will become invalid in version 0.107.0 2020-02-08 21:01:21 WARNING (MainThread) [homeassistant.components.device_tracker] The 'hide_if_away' option (with value 'True') is deprecated, please remove it from your configuration. This option will become invalid in version 0.107.0 2020-02-08 21:01:21 WARNING (MainThread) [homeassistant.components.device_tracker] The 'hide_if_away' option (with value 'True') is deprecated, please remove it from your configuration. This option will become invalid in version 0.107.0 2020-02-08 21:01:22 DEBUG (MainThread) [rflink.protocol] received data: 20;00;Nodo RadioFrequencyLink - RFLink Gateway V1.1 - R48; 2020-02-08 21:01:22 DEBUG (MainThread) [rflink.protocol] got packet: 20;00;Nodo RadioFrequencyLink - RFLink Gateway V1.1 - R48; 2020-02-08 21:01:22 DEBUG (MainThread) [rflink.protocol] decoded packet: {'node': 'gateway', 'protocol': 'unknown', 'hardware': 'Nodo RadioFrequencyLink', 'firmware': 'RFLink Gateway', 'version': '1.1', 'revision': '48'} 2020-02-08 21:01:22 DEBUG (MainThread) [rflink.protocol] got event: {'id': 'rflink', 'hardware': 'Nodo RadioFrequencyLink', 'firmware': 'RFLink Gateway', 'version': '1.1', 'revision': '48'} 2020-02-08 21:01:22 DEBUG (MainThread) [homeassistant.components.rflink] event of type unknown: {'id': 'rflink', 'hardware': 'Nodo RadioFrequencyLink', 'firmware': 'RFLink Gateway', 'version': '1.1', 'revision': '48'} 2020-02-08 21:01:22 DEBUG (MainThread) [homeassistant.components.rflink] unhandled event of type: unknown 2020-02-08 21:01:23 ERROR (SyncWorker_9) [homeassistant.components.google_maps.device_tracker] The cookie file provided does not provide a valid session. Please create another one and try again. 2020-02-08 21:01:23 ERROR (MainThread) [homeassistant.components.device_tracker] Error setting up platform legacy 2020-02-08 21:01:24 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Exception on post: Cannot connect to host 172.16.10.200:8088 ssl:None [Connect call failed ('172.16.10.200', 8088)] 2020-02-08 21:01:24 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Unable to retrieve HUB id 2020-02-08 21:01:24 WARNING (MainThread) [homeassistant.components.harmony.remote] living room: Unable to connect to HUB. 2020-02-08 21:01:24 WARNING (MainThread) [homeassistant.components.remote] Platform harmony not ready yet. Retrying in 30 seconds. 2020-02-08 21:01:25 WARNING (MainThread) [homeassistant.config_entries] Config entry for wled not ready yet. Retrying in 5 seconds. 2020-02-08 21:01:26 DEBUG (SyncWorker_11) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:26 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:31 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:31 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:39 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection error trying to update from Wiser Hub 2020-02-08 21:01:39 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:44 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:44 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:49 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:49 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:54 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:54 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:01:59 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:01:59 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up wiser platform for sensor Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 159, in _async_setup_platform await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT) File "/usr/local/lib/python3.7/asyncio/tasks.py", line 442, in wait_for return fut.result() File "/config/custom_components/wiser/sensor.py", line 32, in async_setup_platform for device in data.wiserhub.getDevices(): File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 189, in getDevices return self.wiserHubData.get("Device") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:01:59 WARNING (MainThread) [homeassistant.components.calendar] Setup of calendar platform google is taking over 10 seconds. 2020-02-08 21:01:59 WARNING (MainThread) [homeassistant.setup] Setup of hacs is taking over 10 seconds. 2020-02-08 21:01:59 WARNING (MainThread) [homeassistant.components.switch] Setup of switch platform wiser is taking over 10 seconds. 2020-02-08 21:01:59 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 424, in _async_add_entity await entity.async_update_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:01:59 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 424, in _async_add_entity await entity.async_update_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:01:59 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 424, in _async_add_entity await entity.async_update_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:01:59 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 424, in _async_add_entity await entity.async_update_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:01:59 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 424, in _async_add_entity await entity.async_update_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:01:59 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:02:04 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:02:04 ERROR (MainThread) [homeassistant.components.climate] Error while setting up wiser platform for climate Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 159, in _async_setup_platform await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT) File "/usr/local/lib/python3.7/asyncio/tasks.py", line 442, in wait_for return fut.result() File "/config/custom_components/wiser/climate.py", line 101, in async_setup_platform WiserRoom(hass, data, room.get("id")) for room in data.wiserhub.getRooms() File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 131, in getRooms return self.wiserHubData.get("Room") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:02:05 WARNING (MainThread) [hacs] Configuration option 'theme' is deprecated and you should remove it from your configuration, HACS will know if you use 'theme' in your Home Assistant configuration, this option will be removed in a future release. 2020-02-08 21:02:05 WARNING (MainThread) [homeassistant.components.frontend] Overwriting integration hacs 2020-02-08 21:02:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 415, in _async_add_entity raise HomeAssistantError(msg) homeassistant.exceptions.HomeAssistantError: Entity id already exists: sensor.hacs. Platform hacs does not generate unique IDs 2020-02-08 21:02:06 ERROR (MainThread) [homeassistant.core] Error doing job: Unclosed client session 2020-02-08 21:02:09 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for shelly which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:02:09 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for logbook_cache which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant. 2020-02-08 21:02:10 ERROR (stream_worker) [libav.tcp] Connection to tcp://172.16.10.236:554?timeout=5000000 failed: Host is unreachable 2020-02-08 21:02:12 WARNING (MainThread) [homeassistant.config_entries] Config entry for wled not ready yet. Retrying in 10 seconds. 2020-02-08 21:02:12 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Exception on post: Cannot connect to host 172.16.10.200:8088 ssl:None [Connect call failed ('172.16.10.200', 8088)] 2020-02-08 21:02:12 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Unable to retrieve HUB id 2020-02-08 21:02:12 WARNING (MainThread) [homeassistant.components.harmony.remote] living room: Unable to connect to HUB. 2020-02-08 21:02:12 WARNING (MainThread) [homeassistant.components.remote] Platform harmony not ready yet. Retrying in 60 seconds. 2020-02-08 21:02:16 ERROR (SyncWorker_2) [homeassistant.core] Error doing job: Unclosed client session 2020-02-08 21:02:26 WARNING (MainThread) [homeassistant.config_entries] Config entry for wled not ready yet. Retrying in 20 seconds. 2020-02-08 21:02:30 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:02:30 INFO (SyncWorker_18) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:02:35 DEBUG (SyncWorker_18) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:02:46 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection error trying to update from Wiser Hub 2020-02-08 21:02:46 ERROR (MainThread) [homeassistant.helpers.entity] Update for switch.wiser_away_mode fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 279, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 459, in async_device_update await self.async_update() File "/config/custom_components/wiser/switch.py", line 45, in async_update self.data.wiserhub.getSystem().get("AwayModeSetPointLimit") / 10, 1 File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:02:46 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:02:51 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:02:51 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:02:56 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:02:56 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:02 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection error trying to update from Wiser Hub 2020-02-08 21:03:02 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.wiser_eco_mode is taking over 10 seconds 2020-02-08 21:03:02 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:07 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:03:07 WARNING (MainThread) [homeassistant.components.switch] Updating wiser switch took longer than the scheduled update interval 0:00:30 2020-02-08 21:03:07 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:03:07 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:03:07 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:03:07 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:03:10 WARNING (MainThread) [homeassistant.config_entries] Config entry for wled not ready yet. Retrying in 40 seconds. 2020-02-08 21:03:16 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Exception on post: Cannot connect to host 172.16.10.200:8088 ssl:None [Connect call failed ('172.16.10.200', 8088)] 2020-02-08 21:03:16 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Unable to retrieve HUB id 2020-02-08 21:03:16 WARNING (MainThread) [homeassistant.components.harmony.remote] living room: Unable to connect to HUB. 2020-02-08 21:03:16 WARNING (MainThread) [homeassistant.components.remote] Platform harmony not ready yet. Retrying in 90 seconds. 2020-02-08 21:03:19 ERROR (SyncWorker_5) [homeassistant.core] Error doing job: Unclosed client session 2020-02-08 21:03:23 ERROR (MainThread) [homeassistant.components.device_tracker] The see service is not supported for this entity device_tracker.mi_phone 2020-02-08 21:03:23 ERROR (MainThread) [homeassistant.components.device_tracker] The see service is not supported for this entity device_tracker.mi_phone 2020-02-08 21:03:23 ERROR (MainThread) [homeassistant.components.device_tracker] The see service is not supported for this entity device_tracker.mi_phone 2020-02-08 21:03:23 ERROR (MainThread) [homeassistant.components.device_tracker] The see service is not supported for this entity device_tracker.mi_phone 2020-02-08 21:03:24 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:24 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:25 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:25 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:25 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:25 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:27 ERROR (MainThread) [homeassistant.components.mobile_app.webhook] Received invalid webhook payload: required key not provided @ data[0]['state']. Got None 2020-02-08 21:03:38 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:38 INFO (SyncWorker_1) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:43 DEBUG (SyncWorker_1) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:03:43 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:03:43 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:48 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:03:48 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:53 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:03:53 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:03:58 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:03:58 ERROR (MainThread) [homeassistant.helpers.entity] Update for switch.wiser_away_mode fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 279, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 459, in async_device_update await self.async_update() File "/config/custom_components/wiser/switch.py", line 45, in async_update self.data.wiserhub.getSystem().get("AwayModeSetPointLimit") / 10, 1 File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_kb_sec_received is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_bytes_sent is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_packets_sent is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_packets_sec_received is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_packets_sec_sent is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_bytes_received is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_kb_sec_sent is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.openwrt_router_packets_received is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.sonoff_10007b70a9_2 is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.00655508b4e62d733bfd is taking over 10 seconds 2020-02-08 21:03:58 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.wiser_valve_protection is taking over 10 seconds 2020-02-08 21:03:58 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:03 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:03 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:03 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:03 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:03 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:07 WARNING (MainThread) [homeassistant.config_entries] Config entry for wled not ready yet. Retrying in 80 seconds. 2020-02-08 21:04:09 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:09 INFO (SyncWorker_1) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:14 DEBUG (SyncWorker_1) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:14 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:14 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:19 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:19 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:24 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection error trying to update from Wiser Hub 2020-02-08 21:04:24 ERROR (MainThread) [homeassistant.helpers.entity] Update for switch.wiser_away_mode fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 279, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 459, in async_device_update await self.async_update() File "/config/custom_components/wiser/switch.py", line 45, in async_update self.data.wiserhub.getSystem().get("AwayModeSetPointLimit") / 10, 1 File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:24 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:29 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:29 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.sonoff_1000943dd8_1 is taking over 10 seconds 2020-02-08 21:04:29 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.00655508b4e62d733bfd is taking over 10 seconds 2020-02-08 21:04:29 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.wiser_away_mode_affects_hot_water is taking over 10 seconds 2020-02-08 21:04:29 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:34 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:34 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:34 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:34 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:34 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:04:34 ERROR (MainThread) [homeassistant.components.device_tracker] The see service is not supported for this entity device_tracker.mi_phone 2020-02-08 21:04:40 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:40 INFO (SyncWorker_0) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:45 DEBUG (SyncWorker_0) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:45 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:45 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:50 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:50 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:04:55 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:04:55 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:00 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection error trying to update from Wiser Hub 2020-02-08 21:05:00 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.sonoff_1000943dd8_2 is taking over 10 seconds 2020-02-08 21:05:00 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.00655508b4e62d733bfd is taking over 10 seconds 2020-02-08 21:05:00 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.wiser_away_mode is taking over 10 seconds 2020-02-08 21:05:00 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:05 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:05 ERROR (MainThread) [homeassistant.helpers.entity] Update for switch.wiser_away_mode fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 279, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 459, in async_device_update await self.async_update() File "/config/custom_components/wiser/switch.py", line 45, in async_update self.data.wiserhub.getSystem().get("AwayModeSetPointLimit") / 10, 1 File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:09 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Exception on post: Cannot connect to host 172.16.10.200:8088 ssl:None [Connect call failed ('172.16.10.200', 8088)] 2020-02-08 21:05:09 ERROR (MainThread) [aioharmony.hubconnector] 172.16.10.200: Unable to retrieve HUB id 2020-02-08 21:05:09 WARNING (MainThread) [homeassistant.components.harmony.remote] living room: Unable to connect to HUB. 2020-02-08 21:05:09 WARNING (MainThread) [homeassistant.components.remote] Platform harmony not ready yet. Retrying in 120 seconds. 2020-02-08 21:05:11 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:11 INFO (SyncWorker_12) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:16 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:16 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:16 DEBUG (SyncWorker_12) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:22 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:22 ERROR (MainThread) [homeassistant.helpers.entity] Update for switch.wiser_away_mode fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 279, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 459, in async_device_update await self.async_update() File "/config/custom_components/wiser/switch.py", line 45, in async_update self.data.wiserhub.getSystem().get("AwayModeSetPointLimit") / 10, 1 File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:22 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:27 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:27 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:32 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:32 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.sonoff_1000943dd8_4 is taking over 10 seconds 2020-02-08 21:05:32 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.00655508b4e62d733bfd is taking over 10 seconds 2020-02-08 21:05:32 WARNING (MainThread) [homeassistant.helpers.entity] Update of switch.wiser_away_mode_affects_hot_water is taking over 10 seconds 2020-02-08 21:05:32 INFO (MainThread) [wiserHeatingAPI.wiserHub] Updating Wiser Hub Data 2020-02-08 21:05:38 DEBUG (MainThread) [wiserHeatingAPI.wiserHub] Connection timed out trying to update from Wiser Hub 2020-02-08 21:05:38 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:38 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:38 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:38 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state self._async_write_ha_state() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state state = self.state File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 588, in state return STATE_ON if self.is_on else STATE_OFF File "/config/custom_components/wiser/switch.py", line 61, in is_on status = self.data.wiserhub.getSystem().get(self.hub_key) File "/usr/local/lib/python3.7/site-packages/wiserHeatingAPI/wiserHub.py", line 158, in getSystem return self.wiserHubData.get("System") AttributeError: 'NoneType' object has no attribute 'get' 2020-02-08 21:05:38 ERROR (MainThread) [homeassistant.components.device_tracker] The see service is not supported for this entity device_tracker.mi_phone

msp1974 commented 4 years ago

@scooper1 there is an issue already open for this #51. And i can see from this that there is some improvements in how this component handles issues.

However, reading through this log, the initial error is that it timed out trying to talk to your hub right at the beginning. I can also see other errors relating to your harmony hub and sonoff sockets all complaining of being unable to talk to them. Do you have some sort of networking issue from your HA server. Did restarting your hub fix the issue with or without a HA restart? Any more info of what physically happens would be useful.

msp1974 commented 4 years ago

Oh and can you add this to issue #51.

asantaga commented 4 years ago

I agree with Mark, is there something strange going on with the networking on you HA server? is it connected via wifi and wifi drops out?

The bug here is in the base wiserapi code, whats happening is on many getXXX operations Im not checking for "NoneType" responses. This would occur if there was no response.

What Ive done is opened issue https://github.com/asantaga/wiserheatingapi/issues/13 on the wiserapi and I'll look to protecting the responses so that if the response is "NoneType" then I'll respond with an empty JSON Array.

Adding this to issue 51

asantaga commented 4 years ago

@scooper1 , @msp1974 has been busy today and we think this is fixed.. pending your testing of course.

Im currently tweaking the core wiserapi to be a little more forgiving of network failures.. So give it an hour or so before trying.