Closed raccettura closed 4 years ago
I tried debugging again with:
logger:
default: warning
logs:
homeassistant.components.homekit: debug
pyhap: debug
I also tried powering down one thermostat, in case that part of my setup was causing this not to work. Even with 1 thermostat, the configure button never caused the ecobee to display a pairing code.
I'm having this issue as well on Home Assistant 0.74 on Raspberry Pi 3, but I also do not see the prompts to enter a code.
I noticed 0.74 updated HomeKit in https://github.com/home-assistant/home-assistant/pull/15502 so I gave it another try, but no change.
to better debug use: homeassistant.components.homekit_controller: debug homeassistant.components.climate: debug
the one you're using is for the homekit component, not homekit_controller ;)
You are correct. Tried updating... nothing shows up in the logs that's relevant to homekit. As far as I can tell it never sends anything to the device to trigger it to show the pairing code.
With those debug flags you should be seeing something like: Discovered device xx:xx:xx:xx:xx:xx
Is it paired with a iPhone/ tablet? Try resetting homekit on the ecobee, it can only pair with 1 device.
Neither thermostat is paired with anything (ever).
I see it showing it discovered two thermostats on startup. When I click configure it shows no additional debug.
Have you tried entering a random/ wrong code? It can happen that After entering wrong code . it Will show the right code on the ecobee... This is the way on a lyric thermostat
I have. Neither thermostat ever shows a code.
If I try and pair with my phone or tablet, it prompts with a code. Then I cancel and try pairing with Home Assistant, and nothing.
I thought it might just be getting confused with two ecobee thermostats, so I tried disconnecting one... but no change, so I don't think that's the culprit.
After looking a bit, I believe Home Assistant uses HomeKit Python here: https://github.com/jlusiardi/homekit_python
I tested using it directly from the CLI with python3 -m homekit.discover
, but it could not even detect my Ecobee device at all. It discovers other HomeKit devices just fine though; just not Ecobee.
With that, I'm believing that the issue probably lies with the HomeKit Python implementation rather than necessarily Home Assistant itself.
So something is up... it does detect my thermostats:
So that parts working. It's when I try to configure them, I never get the prompt on the thermostats with the code.
There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates.
Please make sure to update to the latest Home Assistant version and check if that solves the issue. Let us know if that works for you by adding a comment :+1:
I appear to have the same problem. Only twice, out of many attempts did my ecobee3 display a PIN during discovery. Neither attempt to configure with the pin succeeded. In the log I see this:
'018-11-14 15:40:33 INFO (MainThread) [homeassistant.components.discovery] Found new service: homekit {'properties': {'sh': 'rp34aA==', 'MFG': 'ecobee Inc.', 'sf': '1', 'md': 'ecobee3', 'pv': '1.1', 'id': '44:61:32:ED:31:C1', 's#': '1', 'serial_number': '316537030666', 'ci': '9', 'c#': '6', 'ff': '1'}, 'port': 1200, 'name': 'Home1', 'hostname': 'Home1.local.', 'host': '192.168.10.117'}'
Which makes sense to me. When I attempt to configure with (I think) or without (mostly) the ecobee displaying a PIN the log shows:
Error executing service <ServiceCall configurator.configure (c:505b471f7433486ca9b1acfdd05d1bd4): fields=, configure_id=1716039024-1>
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/core.py", line 1177, in _event_to_service_call
await service_handler.func(service_call)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/configurator.py", line 221, in async_handle_service_call
call.data.get(ATTR_FIELDS, {}))
File "/usr/lib/python3.5/asyncio/futures.py", line 380, in __iter__
yield self # This tells Task to wait for completion.
File "/usr/lib/python3.5/asyncio/tasks.py", line 304, in _wakeup
future.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 187, in device_config_callback
code = callback_data.get('code').strip()
AttributeError: 'NoneType' object has no attribute 'strip'
Help appreciated.
Wes
Re post above: Pi2B, Hassbian, HA 0.82.0
Still unable to configure my ecobee3 via Homekit-controller. HA 0.85.1, on RP2B Hassbian, latest update.
Learned today that if wife clicks Submit on the Configure pop-up, after a 10 second or so delay, I get a PIN display on the ecobee3 for a brief flash, a second or so duration. I did a video with my phone and was able to read the 8 digit PIN. It still does not work, and nothing is logged.
I am experiencing the same issue when attempting to use the HomeKit Controller component. I am using HassOS with HA 0.85.1.
I see the following lines logged:
2019-01-23 16:45:47 DEBUG (SyncWorker_1) [homeassistant.components.homekit_controller] Discovered unique device F9:D9:21:5C:XX:XX 2019-01-23 16:45:47 INFO (SyncWorker_1) [homeassistant.components.homekit_controller] Setting up Homekit device ecobee4
The discovered MAC address isn't even a device on my network, so I'm not sure where that is coming from. I am able to get the Ecobee to show a code, however those codes never work.
Hey guys - i've been done some work on homekit_controller recently and could try and look at this if there is someone on a UKish timezone willing to help (I don't have one of these devices to test so you'll have to be my eyes and ears).
Hi,I'm 5 hours from you in Ontario Canada and keen to help. I have an Ecobee3 thermostat and have HA on a Pie2B running Hassbian with latest current version sw. I'm not a programmer but am moderately technical (retired EE). My last comment on thread #15336 talks about the Ecobee3 displaying a brief flash of an 8 digit PIN. To me this suggests perhaps a timer value set incorrectly somewhere. When told to display a PIN, the Ecobee3 must set an internal timeout running so it will return to a normal display. This feature is not likely to be broken. I have tried making sense of the Apple spec with little success.I have no Homekit experience and no Apple devices (but I can borrow from time to time). The reason I want to connect using Homekit in this case is that the connection will be local and hopefully fast compared to using the Ecobee Servers over the net where delays are too long (occupancy sensors).WesOn Feb 3, 2019 4:18 PM, Jc2k notifications@github.com wrote:Hey guys - i've been done some work on homekit_controller recently and could try and look at this if there is someone on a UKish timezone willing to help (I don't have one of these devices to test so you'll have to be my eyes and ears).
—You are receiving this because you commented.Reply to this email directly, view it on GitHub, or mute the thread.
Hi @wes-warner
So I've never had to look too much at the pairing code before, I think the underlying library has never had to deal with an accessory that displays its own codes. I think both I and the author only have devices that have static codes (like this). It sounds in the spec like on devices with displays these codes might change every time as well - can you confirm the code changes every time you see it?
I've noticed when testing changes with my iPhone that it sends its M1 request (section 4.7.1, page 39) at the point just before an iPhone is asking you to enter a code. Whereas the homekit
library and thus HA send it right before using your setup code that you already entered. On an iPhone, no other requests are sent until you've entered a code. So I think the M1 request might trigger the display. Yep, the docs seem to confirm that in 4.7.2 SRP Start Response on page 40. Doesn't let you control how long that request is valid for or how long to show anything on the screen, though.
So I suspect what happens:
Even if you do see the code, the code is now invalid and you are back to square one.
And we need to change that flow to:
I want to see if this is right so step 1 will be to make a branch of homekit that asks for a password at the last possible moment. I'll be back when I have something...
Yes the displayed PIN changes at each attempt. Sounds like you have a good plan.I will wait until you have something for me to try.Good hunting.WesOn Feb 4, 2019 3:03 AM, Jc2k notifications@github.com wrote:Hi @wes-warner So I've never had to look too much at the pairing code before, I think the underlying library has never had to deal with an accessory that displays its own codes. I think both I and the author only have devices that have static codes (like this). It sounds in the spec like on devices with displays these codes might change every time as well - can you confirm the code changes every time you see it? I've noticed when testing changes with my iPhone that it sends its M1 request (section 4.7.1, page 39) at the point just before an iPhone is asking you to enter a code. Whereas the homekit library and thus HA send it right before using your setup code that you already entered. On an iPhone, no other requests are sent until you've entered a code. So I think the M1 request might trigger the display. Yep, the docs seem to confirm that in 4.7.2 SRP Start Response on page 40. Doesn't let you control how long that request is valid for or how long to show anything on the screen, though. So I suspect what happens: You enter a random (or old) setup codeHA sends a M1 Pair Setup requestEcobee triggers the display as part of its M2 responseHA sends a M3 SRP Verify Request and that never matches the code that was briefly shownThe pairing attempt is over, so the screen returns to normal Even if you do see the code, the code is now invalid and you are back to square one. And we need to change that flow to: HA sends a M1 Pair Setup requestEcobee triggers the display as part of its M2 responseYou enter the code on the screenHA sends a M3 SRP Verify Request and now it matchesThe pairing attempt is over, so the screen returns to normal I want to see if this is right so step 1 will be to make a branch of homekit that asks for a password at the last possible moment. I'll be back when I have something...
—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.
OK - i've put together a proof of concept where it sends a pair setup command to the device and then prompts you to enter the pin code, rather than requiring it up front. This is a bit of a hack, just to see if its enough to get the ecobee working.
Here's a shell session showing it working from a Mac against a mock homekit device. Should work on Debian/Ubuntu/Raspbian without much problem. Can you follow allong and see how it works for you?
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install https://github.com/Jc2k/homekit_python/archive/ecobee.zip
Collecting https://github.com/Jc2k/homekit_python/archive/ecobee.zip
Downloading https://github.com/Jc2k/homekit_python/archive/ecobee.zip
\ 1.4MB 800kB/s
Collecting zeroconf (from homekit==0.12.2)
Using cached https://files.pythonhosted.org/packages/d2/4e/3e751bc1f33d0368bdba509a140cb9f2e54cd1cfb8ebcf4ebd8a5eef794b/zeroconf-0.21.3-py2.py3-none-any.whl
Collecting hkdf (from homekit==0.12.2)
Collecting ed25519 (from homekit==0.12.2)
Collecting cryptography (from homekit==0.12.2)
Downloading https://files.pythonhosted.org/packages/d7/9e/12bb10fd009b0146935c169cc0e1e86221eacf8dc207990d54b783c47a7d/cryptography-2.5-cp34-abi3-macosx_10_6_intel.whl (1.7MB)
100% |████████████████████████████████| 1.7MB 1.3MB/s
Collecting ifaddr (from zeroconf->homekit==0.12.2)
Collecting asn1crypto>=0.21.0 (from cryptography->homekit==0.12.2)
Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl
Collecting six>=1.4.1 (from cryptography->homekit==0.12.2)
Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting cffi!=1.11.3,>=1.8 (from cryptography->homekit==0.12.2)
Using cached https://files.pythonhosted.org/packages/0b/ba/32835c9965d8a0090723e1d0b47373365525c4bd08c807b5efdc9fecbc99/cffi-1.11.5-cp37-cp37m-macosx_10_9_x86_64.whl
Collecting pycparser (from cffi!=1.11.3,>=1.8->cryptography->homekit==0.12.2)
Installing collected packages: ifaddr, zeroconf, hkdf, ed25519, asn1crypto, six, pycparser, cffi, cryptography, homekit
Running setup.py install for homekit ... done
Successfully installed asn1crypto-0.24.0 cffi-1.11.5 cryptography-2.5 ed25519-1.4 hkdf-0.0.3 homekit-0.12.2 ifaddr-0.1.6 pycparser-2.19 six-1.12.0 zeroconf-0.21.3
You are using pip version 10.0.1, however version 19.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
$ python -m homekit.discover
Name: DemoAccessory._hap._tcp.local.
Url: http_impl://10.0.1.11:8082
Configuration number (c#): 39
Feature Flags (ff): Paired (Flag: 0)
Device ID (id): 10:30:10:00:00:00
Model Name (md): DemoAccessory
Protocol Version (pv): 1.0
State Number (s#): 1
Status Flags (sf): 1
Category Identifier (ci): Lightbulb (Id: 5)
$ echo '{}' > pairing.json
$ python -m homekit.pair -d 10:30:10:00:00:00 -f pairing.json -a ecobee
Enter your setup code: 031-45-154
Pairing for ecobee was established.
$ python -m homekit.get_accessories -f pairing.json -a "ecobee"
1.2: >accessory-information<
1.3: (Identify) >identify< [pw]
1.4: lusiardi.de (Manufacturer) >manufacturer< [pr]
1.5: Demoserver (Model) >model< [pr]
1.6: Testlicht (Name) >name< [pr]
1.7: 0001 (Serial Number) >serial-number< [pr]
1.8: 0.1 (Firmware Revision) >firmware.revision< [pr]
1.9: >lightbulb<
1.10: False (Switch state (on/off)) >on< [pw,pr,ev]
$ python -m homekit.unpair -f pairing.json -a ecobee
Pairing for ecobee was removed.
$ pip install https://github.com/Jc2k/homekit_python/archive/ecobee.zipCollecting https://github.com/Jc2k/homekit_python/archive/ecobee.zip Downloading https://github.com/Jc2k/homekit_python/archive/ecobee.zip | 1.5MB 8.9MB/sCollecting cryptography (from homekit==0.12.2) Downloading https://www.piwheels.org/simple/cryptography/cryptography-2.5-cp35-cp35m-linux_armv7l.whl (865kB) 100% |????????????????????????????????| 870kB 189kB/sCollecting ed25519 (from homekit==0.12.2) Downloading https://www.piwheels.org/simple/ed25519/ed25519-1.4-cp35-cp35m-linux_armv7l.whl (142kB) 100% |????????????????????????????????| 143kB 442kB/sCollecting hkdf (from homekit==0.12.2) Downloading https://www.piwheels.org/simple/hkdf/hkdf-0.0.3-py3-none-any.whlCollecting zeroconf (from homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/d2/4e/3e751bc1f33d0368bdba509a140cb9f2e54cd1cfb8ebcf4ebd8a5eef794b/zeroconf-0.21.3-py2.py3-none-any.whlCollecting six>=1.4.1 (from cryptography->homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whlCollecting cffi!=1.11.3,>=1.8 (from cryptography->homekit==0.12.2) Downloading https://www.piwheels.org/simple/cffi/cffi-1.11.5-cp35-cp35m-linux_armv7l.whl (304kB) 100% |????????????????????????????????| 307kB 381kB/sCollecting asn1crypto>=0.21.0 (from cryptography->homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl (101kB) 100% |????????????????????????????????| 102kB 963kB/sCollecting ifaddr (from zeroconf->homekit==0.12.2) Downloading https://www.piwheels.org/simple/ifaddr/ifaddr-0.1.6-py3-none-any.whlCollecting pycparser (from cffi!=1.11.3,>=1.8->cryptography->homekit==0.12.2) Downloading https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl (111kB) 100% |????????????????????????????????| 112kB 340kB/sInstalling collected packages: six, pycparser, cffi, asn1crypto, cryptography, ed25519, hkdf, ifaddr, zeroconf, homekit Running setup.py install for homekit ... doneSuccessfully installed asn1crypto-0.24.0 cffi-1.11.5 cryptography-2.5 ed25519-1.4 hkdf-0.0.3 homekit-0.12.2 ifaddr-0.1.6 pycparser-2.19 six-1.12.0 zeroconf-0.21.3(venv) pi@hassbian:~ $ (venv) pi@hassbian:~ $ python -m homekit.discoverName: HomeW._hap._tcp.local.Url: http_impl://192.168.10.118:1200Configuration number (c#): 9Feature Flags (ff): Supports Pairing (Flag: 1)Device ID (id): C3:0F:19:BF:2C:39Model Name (md): ecobee3Protocol Version (pv): 1.1State Number (s#): 1Status Flags (sf): 1Category Identifier (ci): Thermostat (Id: 9) (venv) pi@hassbian:~ $ echo '{}' > pairing.json(venv) pi@hassbian:~ $ python -m homekit.pair -d C3:0F:19:BF:2C:39 -f pairing.json -a ecobee3Enter your setup code: 242-43-120/home/pi/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/x25519.py:35: CryptographyDeprecationWarning: public_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7 utils.DeprecatedIn25,Pairing for ecobee3 was established.(venv) pi@hassbian:~ $ (venv) pi@hassbian:~ $ python -m homekit.get_accessories -f pairing.json -a "ecobee3"/home/pi/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/x25519.py:35: CryptographyDeprecationWarning: public_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7 utils.DeprecatedIn25,1.1: >accessory-information< 1.2: HomeW () >name< [pr] 1.3: ecobee Inc. () >manufacturer< [pr] 1.4: 316537030666 () >serial-number< [pr] 1.5: ecobee3 () >model< [pr] 1.6: () >identify< [pw] 1.8: 4.2.394 () >firmware.revision< [pr] 1.9: 0 () >accessory-properties< [pr,ev]1.30: >Unknown Service: A2< 1.31: 1.1.0 () >version< [pr]1.16: >thermostat< 1.17: 0 () >heating-cooling.current< [pr,ev] 1.18: 1 () >heating-cooling.target< [pr,pw,ev] 1.19: 22.2 () >temperature.current< [pr,ev] 1.20: 22.2 () >temperature.target< [pr,pw,ev] 1.21: 1 () >temperature.units< [pr,pw,ev] 1.22: 24.4 () >temperature.cooling-threshold< [pr,pw,ev] 1.23: 22.2 () >temperature.heating-threshold< [pr,pw,ev] 1.24: 31.0 () >relative-humidity.current< [pr,ev] 1.25: 36.0 () >relative-humidity.target< [pr,pw,ev] 1.27: HomeW () >name< [pr] 1.33: 0 () >Unknown Characteristic B7DDB9A3-54BB-4572-91D2-F1F5B0510F8C< [pr,ev] 1.34: 22.2 () >Unknown Characteristic E4489BBC-5227-4569-93E5-B345E3E5508F< [pr,pw,ev] 1.35: 24.4 () >Unknown Characteristic 7D381BAA-20F9-40E5-9BE9-AEB92D4BECEF< [pr,pw,ev] 1.36: 17.8 () >Unknown Characteristic 73AAB542-892A-4439-879A-D2A883724B69< [pr,pw,ev] 1.37: 27.8 () >Unknown Characteristic 5DA985F0-898A-4850-B987-B76C6C78D670< [pr,pw,ev] 1.38: 18.9 () >Unknown Characteristic 05B97374-6DC0-439B-A0FA-CA33F612D425< [pr,pw,ev] 1.39: 26.7 () >Unknown Characteristic A251F6E7-AC46-4190-9C5D-3D06277BDF9F< [pr,pw,ev] 1.40: () >Unknown Characteristic 1B300BC2-CFFC-47FF-89F9-BD6CCF5F2853< [pw] 1.41: 2014-01-03T00:00:00-05:00 () >Unknown Characteristic 1621F556-1367-443C-AF19-82AF018E99DE< [pr,pw,ev] 1.48: () >Unknown Characteristic FA128DE6-9D7D-49A4-B6D8-4E4E234DEE38< [pw] 1.49: 1 () >Unknown Characteristic 4A6AE4F6-036C-495D-87CC-B3702B437741< [pr,ev] 1.50: 0 () >Unknown Characteristic DB7BF261-7042-4194-8BD1-3AA22830AEDD< [pr,ev] 1.51: False () >Unknown Characteristic 41935E3E-B54D-42E9-B8B9-D33C6319F0AF< [pr,ev] 1.52: 0 () >Unknown Characteristic C35DA3C0-E004-40E3-B153-46655CDD9214< [pr,pw,ev] 1.53: 0 () >Unknown Characteristic 48F62AEC-4171-4B4A-8F0E-1EEB6708B3FB< [pr,ev] 1.54: Your ecobee3 thermostat is now paired with HomeKit. () >Unknown Characteristic 1B1515F2-CC45-409F-991F-C480987F92C3< [pr,ev]1.56: >motion< 1.28: HomeW () >name< [pr] 1.66: True () >motion-detected< [pr,ev] 1.67: 190 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev]1.57: >occupancy< 1.29: HomeW () >name< [pr] 1.65: 1 () >occupancy-detected< [pr,ev] 1.68: 190 () >Unknown Characteristic A8f798E0-4A40-11E6-BDF4-0800200C9A66< [pr,ev]2.1: >accessory-information< 2.2049: Kitchen () >name< [pr] 2.2050: ecobee Inc. () >manufacturer< [pr] 2.2051: GY6X () >serial-number< [pr] 2.2052: REMOTE SENSOR () >model< [pr] 2.8: 1.0.0 () >firmware.revision< [pr] 2.2053: () >identify< [pw]2.55: >temperature< 2.2064: 21.4 () >temperature.current< [pr,ev] 2.2067: Kitchen () >name< [pr] 2.2066: True () >status-active< [pr,ev] 2.2065: 0 () >status-lo-batt< [pr,ev]2.56: >motion< 2.2060: True () >motion-detected< [pr,ev] 2.2063: Kitchen () >name< [pr] 2.2062: True () >status-active< [pr,ev] 2.2061: 0 () >status-lo-batt< [pr,ev] 2.2059: 955 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev]3.1: >accessory-information< 3.3073: Pourch () >name< [pr] 3.3074: ecobee Inc. () >manufacturer< [pr] 3.3075: D36S () >serial-number< [pr] 3.3076: REMOTE SENSOR () >model< [pr] 3.8: 1.0.0 () >firmware.revision< [pr] 3.3077: () >identify< [pw]3.55: >temperature< 3.3088: 6.1 () >temperature.current< [pr,ev] 3.3091: Pourch () >name< [pr] 3.3090: True () >status-active< [pr,ev] 3.3089: 0 () >status-lo-batt< [pr,ev]3.56: >motion< 3.3084: True () >motion-detected< [pr,ev] 3.3087: Pourch () >name< [pr] 3.3086: True () >status-active< [pr,ev] 3.3085: 0 () >status-lo-batt< [pr,ev] 3.3083: 878 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev]4.1: >accessory-information< 4.4097: Basement () >name< [pr] 4.4098: ecobee Inc. () >manufacturer< [pr] 4.4099: D3TP () >serial-number< [pr] 4.4100: REMOTE SENSOR () >model< [pr] 4.8: 1.0.0 () >firmware.revision< [pr] 4.4101: () >identify< [pw]4.55: >temperature< 4.4112: 20.9 () >temperature.current< [pr,ev] 4.4115: Basement () >name< [pr] 4.4114: True () >status-active< [pr,ev] 4.4113: 0 () >status-lo-batt< [pr,ev]4.56: >motion< 4.4108: False () >motion-detected< [pr,ev] 4.4111: Basement () >name< [pr] 4.4110: True () >status-active< [pr,ev] 4.4109: 0 () >status-lo-batt< [pr,ev] 4.4107: 15808 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< pr,ev pi@hassbian:~ $ (venv) pi@hassbian:~ $ python -m homekit.unpair -f pairing.json -a "ecobee3"/home/pi/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/x25519.py:35: CryptographyDeprecationWarning: public_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7 utils.DeprecatedIn25,Pairing for ecobee3 was removed.(venv) pi@hassbian:~ $---------------------------------------------------------------------------------
On Monday, February 4, 2019, 10:26:44 a.m. EST, Jc2k <notifications@github.com> wrote:
OK - i've put together a proof of concept where it sends a pair setup command to the device and then prompts you to enter the pin code, rather than requiring it up front. This is a bit of a hack, just to see if its enough to get the ecobee working.
Here's a shell session showing it working from a Mac against a mock homekit device. Should work on Debian/Ubuntu/Raspbian without much problem. Can you follow allong and see how it works for you? $ python3 -m venv venv $ source venv/bin/activate
$ pip install https://github.com/Jc2k/homekit_python/archive/ecobee.zip Collecting https://github.com/Jc2k/homekit_python/archive/ecobee.zip Downloading https://github.com/Jc2k/homekit_python/archive/ecobee.zip \ 1.4MB 800kB/s Collecting zeroconf (from homekit==0.12.2) Using cached https://files.pythonhosted.org/packages/d2/4e/3e751bc1f33d0368bdba509a140cb9f2e54cd1cfb8ebcf4ebd8a5eef794b/zeroconf-0.21.3-py2.py3-none-any.whl Collecting hkdf (from homekit==0.12.2) Collecting ed25519 (from homekit==0.12.2) Collecting cryptography (from homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/d7/9e/12bb10fd009b0146935c169cc0e1e86221eacf8dc207990d54b783c47a7d/cryptography-2.5-cp34-abi3-macosx_10_6_intel.whl (1.7MB) 100% |████████████████████████████████| 1.7MB 1.3MB/s Collecting ifaddr (from zeroconf->homekit==0.12.2) Collecting asn1crypto>=0.21.0 (from cryptography->homekit==0.12.2) Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl Collecting six>=1.4.1 (from cryptography->homekit==0.12.2) Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl Collecting cffi!=1.11.3,>=1.8 (from cryptography->homekit==0.12.2) Using cached https://files.pythonhosted.org/packages/0b/ba/32835c9965d8a0090723e1d0b47373365525c4bd08c807b5efdc9fecbc99/cffi-1.11.5-cp37-cp37m-macosx_10_9_x86_64.whl Collecting pycparser (from cffi!=1.11.3,>=1.8->cryptography->homekit==0.12.2) Installing collected packages: ifaddr, zeroconf, hkdf, ed25519, asn1crypto, six, pycparser, cffi, cryptography, homekit Running setup.py install for homekit ... done Successfully installed asn1crypto-0.24.0 cffi-1.11.5 cryptography-2.5 ed25519-1.4 hkdf-0.0.3 homekit-0.12.2 ifaddr-0.1.6 pycparser-2.19 six-1.12.0 zeroconf-0.21.3 You are using pip version 10.0.1, however version 19.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
$ python -m homekit.discover Name: DemoAccessory._hap._tcp.local. Url: http_impl://10.0.1.11:8082 Configuration number (c#): 39 Feature Flags (ff): Paired (Flag: 0) Device ID (id): 10:30:10:00:00:00 Model Name (md): DemoAccessory Protocol Version (pv): 1.0 State Number (s#): 1 Status Flags (sf): 1 Category Identifier (ci): Lightbulb (Id: 5)
$ echo '{}' > pairing.json
$ python -m homekit.pair -d 10:30:10:00:00:00 -f pairing.json -a ecobee Enter your setup code: 031-45-154 Pairing for ecobee was established.
$ python -m homekit.get_accessories -f pairing.json -a "ecobee" 1.2: >accessory-information< 1.3: (Identify) >identify< [pw] 1.4: lusiardi.de (Manufacturer) >manufacturer< [pr] 1.5: Demoserver (Model) >model< [pr] 1.6: Testlicht (Name) >name< [pr] 1.7: 0001 (Serial Number) >serial-number< [pr] 1.8: 0.1 (Firmware Revision) >firmware.revision< [pr] 1.9: >lightbulb< 1.10: False (Switch state (on/off)) >on< [pw,pr,ev]
$ python -m homekit.unpair -f pairing.json -a ecobee Pairing for ecobee was removed.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
$ pip install https://github.com/Jc2k/homekit_python/archive/ecobee.zip Collecting https://github.com/Jc2k/homekit_python/archive/ecobee.zip Downloading https://github.com/Jc2k/homekit_python/archive/ecobee.zip | 1.5MB 8.9MB/s Collecting cryptography (from homekit==0.12.2) Downloading https://www.piwheels.org/simple/cryptography/cryptography-2.5-cp35-cp35m-linux_armv7l.whl (865kB) 100% |????????????????????????????????| 870kB 189kB/s Collecting ed25519 (from homekit==0.12.2) Downloading https://www.piwheels.org/simple/ed25519/ed25519-1.4-cp35-cp35m-linux_armv7l.whl (142kB) 100% |????????????????????????????????| 143kB 442kB/s Collecting hkdf (from homekit==0.12.2) Downloading https://www.piwheels.org/simple/hkdf/hkdf-0.0.3-py3-none-any.whl Collecting zeroconf (from homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/d2/4e/3e751bc1f33d0368bdba509a140cb9f2e54cd1cfb8ebcf4ebd8a5eef794b/zeroconf-0.21.3-py2.py3-none-any.whl Collecting six>=1.4.1 (from cryptography->homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl Collecting cffi!=1.11.3,>=1.8 (from cryptography->homekit==0.12.2) Downloading https://www.piwheels.org/simple/cffi/cffi-1.11.5-cp35-cp35m-linux_armv7l.whl (304kB) 100% |????????????????????????????????| 307kB 381kB/s Collecting asn1crypto>=0.21.0 (from cryptography->homekit==0.12.2) Downloading https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl (101kB) 100% |????????????????????????????????| 102kB 963kB/s Collecting ifaddr (from zeroconf->homekit==0.12.2) Downloading https://www.piwheels.org/simple/ifaddr/ifaddr-0.1.6-py3-none-any.whl Collecting pycparser (from cffi!=1.11.3,>=1.8->cryptography->homekit==0.12.2) Downloading https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl (111kB) 100% |????????????????????????????????| 112kB 340kB/s Installing collected packages: six, pycparser, cffi, asn1crypto, cryptography, ed25519, hkdf, ifaddr, zeroconf, homekit Running setup.py install for homekit ... done Successfully installed asn1crypto-0.24.0 cffi-1.11.5 cryptography-2.5 ed25519-1.4 hkdf-0.0.3 homekit-0.12.2 ifaddr-0.1.6 pycparser-2.19 six-1.12.0 zeroconf-0.21.3 (venv) pi@hassbian:~ $
(venv) pi@hassbian:~ $ python -m homekit.discover Name: HomeW._hap._tcp.local. Url: http_impl://192.168.10.118:1200 Configuration number (c#): 9 Feature Flags (ff): Supports Pairing (Flag: 1) Device ID (id): C3:0F:19:BF:2C:39 Model Name (md): ecobee3 Protocol Version (pv): 1.1 State Number (s#): 1 Status Flags (sf): 1 Category Identifier (ci): Thermostat (Id: 9)
(venv) pi@hassbian:~ $ echo '{}' > pairing.json (venv) pi@hassbian:~ $ python -m homekit.pair -d C3:0F:19:BF:2C:39 -f pairing.json -a ecobee3 Enter your setup code: 242-43-120 /home/pi/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/x25519.py:35: CryptographyDeprecationWarning: public_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7 utils.DeprecatedIn25, Pairing for ecobee3 was established. (venv) pi@hassbian:~ $
(venv) pi@hassbian:~ $ python -m homekit.get_accessories -f pairing.json -a "ecobee3" /home/pi/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/x25519.py:35: CryptographyDeprecationWarning: public_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7 utils.DeprecatedIn25, 1.1: >accessory-information< 1.2: HomeW () >name< [pr] 1.3: ecobee Inc. () >manufacturer< [pr] 1.4: 316537030666 () >serial-number< [pr] 1.5: ecobee3 () >model< [pr] 1.6: () >identify< [pw] 1.8: 4.2.394 () >firmware.revision< [pr] 1.9: 0 () >accessory-properties< [pr,ev] 1.30: >Unknown Service: A2< 1.31: 1.1.0 () >version< [pr] 1.16: >thermostat< 1.17: 0 () >heating-cooling.current< [pr,ev] 1.18: 1 () >heating-cooling.target< [pr,pw,ev] 1.19: 22.2 () >temperature.current< [pr,ev] 1.20: 22.2 () >temperature.target< [pr,pw,ev] 1.21: 1 () >temperature.units< [pr,pw,ev] 1.22: 24.4 () >temperature.cooling-threshold< [pr,pw,ev] 1.23: 22.2 () >temperature.heating-threshold< [pr,pw,ev] 1.24: 31.0 () >relative-humidity.current< [pr,ev] 1.25: 36.0 () >relative-humidity.target< [pr,pw,ev] 1.27: HomeW () >name< [pr] 1.33: 0 () >Unknown Characteristic B7DDB9A3-54BB-4572-91D2-F1F5B0510F8C< [pr,ev] 1.34: 22.2 () >Unknown Characteristic E4489BBC-5227-4569-93E5-B345E3E5508F< [pr,pw,ev] 1.35: 24.4 () >Unknown Characteristic 7D381BAA-20F9-40E5-9BE9-AEB92D4BECEF< [pr,pw,ev] 1.36: 17.8 () >Unknown Characteristic 73AAB542-892A-4439-879A-D2A883724B69< [pr,pw,ev] 1.37: 27.8 () >Unknown Characteristic 5DA985F0-898A-4850-B987-B76C6C78D670< [pr,pw,ev] 1.38: 18.9 () >Unknown Characteristic 05B97374-6DC0-439B-A0FA-CA33F612D425< [pr,pw,ev] 1.39: 26.7 () >Unknown Characteristic A251F6E7-AC46-4190-9C5D-3D06277BDF9F< [pr,pw,ev] 1.40: () >Unknown Characteristic 1B300BC2-CFFC-47FF-89F9-BD6CCF5F2853< [pw] 1.41: 2014-01-03T00:00:00-05:00 () >Unknown Characteristic 1621F556-1367-443C-AF19-82AF018E99DE< [pr,pw,ev] 1.48: () >Unknown Characteristic FA128DE6-9D7D-49A4-B6D8-4E4E234DEE38< [pw] 1.49: 1 () >Unknown Characteristic 4A6AE4F6-036C-495D-87CC-B3702B437741< [pr,ev] 1.50: 0 () >Unknown Characteristic DB7BF261-7042-4194-8BD1-3AA22830AEDD< [pr,ev] 1.51: False () >Unknown Characteristic 41935E3E-B54D-42E9-B8B9-D33C6319F0AF< [pr,ev] 1.52: 0 () >Unknown Characteristic C35DA3C0-E004-40E3-B153-46655CDD9214< [pr,pw,ev] 1.53: 0 () >Unknown Characteristic 48F62AEC-4171-4B4A-8F0E-1EEB6708B3FB< [pr,ev] 1.54: Your ecobee3 thermostat is now paired with HomeKit. () >Unknown Characteristic 1B1515F2-CC45-409F-991F-C480987F92C3< [pr,ev] 1.56: >motion< 1.28: HomeW () >name< [pr] 1.66: True () >motion-detected< [pr,ev] 1.67: 190 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev] 1.57: >occupancy< 1.29: HomeW () >name< [pr] 1.65: 1 () >occupancy-detected< [pr,ev] 1.68: 190 () >Unknown Characteristic A8f798E0-4A40-11E6-BDF4-0800200C9A66< [pr,ev] 2.1: >accessory-information< 2.2049: Kitchen () >name< [pr] 2.2050: ecobee Inc. () >manufacturer< [pr] 2.2051: GY6X () >serial-number< [pr] 2.2052: REMOTE SENSOR () >model< [pr] 2.8: 1.0.0 () >firmware.revision< [pr] 2.2053: () >identify< [pw] 2.55: >temperature< 2.2064: 21.4 () >temperature.current< [pr,ev] 2.2067: Kitchen () >name< [pr] 2.2066: True () >status-active< [pr,ev] 2.2065: 0 () >status-lo-batt< [pr,ev] 2.56: >motion< 2.2060: True () >motion-detected< [pr,ev] 2.2063: Kitchen () >name< [pr] 2.2062: True () >status-active< [pr,ev] 2.2061: 0 () >status-lo-batt< [pr,ev] 2.2059: 955 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev] 3.1: >accessory-information< 3.3073: Pourch () >name< [pr] 3.3074: ecobee Inc. () >manufacturer< [pr] 3.3075: D36S () >serial-number< [pr] 3.3076: REMOTE SENSOR () >model< [pr] 3.8: 1.0.0 () >firmware.revision< [pr] 3.3077: () >identify< [pw] 3.55: >temperature< 3.3088: 6.1 () >temperature.current< [pr,ev] 3.3091: Pourch () >name< [pr] 3.3090: True () >status-active< [pr,ev] 3.3089: 0 () >status-lo-batt< [pr,ev] 3.56: >motion< 3.3084: True () >motion-detected< [pr,ev] 3.3087: Pourch () >name< [pr] 3.3086: True () >status-active< [pr,ev] 3.3085: 0 () >status-lo-batt< [pr,ev] 3.3083: 878 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev] 4.1: >accessory-information< 4.4097: Basement () >name< [pr] 4.4098: ecobee Inc. () >manufacturer< [pr] 4.4099: D3TP () >serial-number< [pr] 4.4100: REMOTE SENSOR () >model< [pr] 4.8: 1.0.0 () >firmware.revision< [pr] 4.4101: () >identify< [pw] 4.55: >temperature< 4.4112: 20.9 () >temperature.current< [pr,ev] 4.4115: Basement () >name< [pr] 4.4114: True () >status-active< [pr,ev] 4.4113: 0 () >status-lo-batt< [pr,ev] 4.56: >motion< 4.4108: False () >motion-detected< [pr,ev] 4.4111: Basement () >name< [pr] 4.4110: True () >status-active< [pr,ev] 4.4109: 0 () >status-lo-batt< [pr,ev] 4.4107: 15808 () >Unknown Characteristic BFE61C70-4A40-11E6-BDF4-0800200C9A66< [pr,ev] (venv) pi@hassbian:~ $
(venv) pi@hassbian:~ $ python -m homekit.unpair -f pairing.json -a "ecobee3" /home/pi/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/x25519.py:35: CryptographyDeprecationWarning: public_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7 utils.DeprecatedIn25, Pairing for ecobee3 was removed. (venv) pi@hassbian:~ $
Looking good!
On GitHub If you do ```
on the line before and the line after your console output it will use a monospace font and be easier to read :-)
The unknown characteristics can be probably be ignored. They look to be temperature related, but they are not Apple standard ones as far as I can tell. The important thing is we can see a thermostat
service and multiple accessories with a motion
and temperature
service.
So if you do this again, but don't do the last bit to unpair you will be left with a pairing.json
with all the crypto keys needed to make it work with HA. You should just be able to drop it into your HA config directory, off the top of my head $CONFIG_DIR/.homekit/pairing.json
, then restart HA. If you do that now we should be able to get an idea of whether the HA side of the code works. What i'm expecting is:
With HA 0.86 this should work, more or less, but you might get timeouts that require a HA restart. This can happen pretty quickly depending on the device. There is also a potential gotcha - you might see a KeyError
about a field called valid-values
. If that happens we are stuck again. If it does work, only the thermostat component will be understood.
With HA 0.87 (in beta), the timeouts are fixed, the KeyError should be worked around and the motion
sensors will be detected and work, but at the moment only in polling mode (once a minute). I'm working on event supported but its a little way off.
I'm hoping that if you drop the pairing.json in the right place and restart your HA you will be able to control the target temperature etc from HA. If that's the case I'll get to work on getting this change properly upstream.
Will do as you suggest above, but first a note as to where I was headed in starting this.
As of now I don't plan to change Ecobee settings via HA. All I need with the Homekit link is (preferably quick) access to sensor data.
I use the Ecobee android app when away from home, such as to set the temp so it is comfy when we get there. Our home is very well insulated and the boiler/air handler/air conditioner are sized small for max efficiency. As a consequence the home responds slowly to a request for a temp change. The ecobee does a good job of anticipating this for scheduled changes. I suppose geofencing could track us driving home from Florida and turn heat up 3 hours or so before we get there, but life is short....
As you may see from the info above I have 3 Ecobee remote sensors that track temperature and occupancy/motion in three rooms: Kitchen, Basement (family room) and Porch (3 season room with
overhead radiant electric heat for occasional cold weather use). I want to use the Porch sensor via HA/Homekit to control the Porch temperature using the radiant heaters when I ask for it (via Alexa) or first occupy the porch and so long as the porch remains occupied. If the Homekit connection is quick enough ( a second or so) I could control porch lights as well.
Wes
I copied the pairing.json file to ..../.homekit and rebooted. No error is logged but HA still wants to configure ecobee ie it displays the Configurator card for ecobee3.
Wes
Good background info, thanks for that. The occupancy sensors should work in 0.87, but until I add events in they are going to be slow (1 minute poll). I don't have an ETA for that, there is a prototype but its currently queued up behind my bluetooth patches.
I forgot an important step with pairing.json
. HA will choose a different alias to what we did. I don't have the code in front of me right now, but I think if you open pairing.json in a text editor you'll have something like:
{
"ecobee3": {
"iOSAccessoryId": "...........",
"snip": ".....",
}
}
You need to replace "ecobee3" with the serial number of your device (the one that you passed on the pair
command line, so in my example it would be
{
"10:30:10:00:00:00": {
... snip ...
}
}
Now if you restart HA it should be able to see the ecobee3 pairing details....
.......
2019-02-05 09:52:12 INFO (MainThread) [homeassistant.setup] Setting up homekit_controller
2019-02-05 09:52:13 INFO (MainThread) [homeassistant.setup] Setup of domain homekit_controller took 1.3 seconds.
2019-02-05 09:52:13 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Discovered unique device C3:0F:19:BF:2C:39
2019-02-05 09:52:13 INFO (Thread-19) [homeassistant.components.homekit_controller] Setting up Homekit device ecobee3
2019-02-05 09:52:13 INFO (Thread-19) [homeassistant.loader] Loaded configurator from homeassistant.components.configurator
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found Unknown Service: A2
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found thermostat
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found motion
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found occupancy
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found temperature
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found motion
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found temperature
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found motion
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found temperature
2019-02-05 09:52:15 DEBUG (Thread-19) [homeassistant.components.homekit_controller] Found motion
2019-02-05 09:52:16 INFO (MainThread) [homeassistant.loader] Loaded climate from homeassistant.components.climate
2019-02-05 09:52:16 INFO (MainThread) [homeassistant.setup] Setting up climate
2019-02-05 09:52:16 INFO (MainThread) [homeassistant.setup] Setup of domain climate took 0.0 seconds.
2019-02-05 09:52:16 INFO (MainThread) [homeassistant.loader] Loaded climate.homekit_controller from homeassistant.components.climate.homekit_controller
2019-02-05 09:52:16 INFO (MainThread) [homeassistant.components.climate] Setting up climate.homekit_controller
2019-02-05 09:52:19 ERROR (MainThread) [homeassistant.components.climate] homekit_controller: Error on device update!
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 248, in _async_add_entity
await entity.async_device_update(warning=False)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity.py", line 349, in async_device_update
await self.hass.async_add_executor_job(self.update)
File "/usr/lib/python3.5/asyncio/futures.py", line 380, in __iter__
yield self # This tells Task to wait for completion.
File "/usr/lib/python3.5/asyncio/tasks.py", line 304, in _wakeup
future.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 213, in update
self.update_characteristics(service['characteristics'])
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/climate/homekit_controller.py", line 53, in update_characteristics
from homekit.models.characteristics import CharacteristicsTypes
ImportError: No module named 'homekit.models'
2019-02-05 09:52:23 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error/all to 192.168.10.123 (auth: True)
2019-02-05 09:52:46 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error_log to 192.168.10.123 (auth: True)
Ah, I forgot about that. Good news is I found + fixed that in 0.87. If you feel brave you could update /srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/climate/homekit_controller.py
.on line 53 the line that reads:
from homekit.models.characteristics import CharacteristicsTypes
should be
from homekit.model.characteristics import CharacteristicsTypes
Worth testing if you can.
Not sure when 0.87 is out but i've refactored things quite a bad and added tests for all the currently supported entities to pick up stuff like that.
Made little edit as above, closer still.
.........
2019-02-05 11:07:44 INFO (MainThread) [homeassistant.components.climate] Setting up climate.homekit_controller 2019-02-05 11:07:47 ERROR (MainThread) [homeassistant.components.climate] homekit_controller: Error on device update! Traceback (most recent call last): File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 248, in _async_add_entity await entity.async_device_update(warning=False) File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity.py", line 349, in async_device_update await self.hass.async_add_executor_job(self.update) File "/usr/lib/python3.5/asyncio/futures.py", line 380, in iter yield self # This tells Task to wait for completion. File "/usr/lib/python3.5/asyncio/tasks.py", line 304, in _wakeup future.result() File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result raise self._exception File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run result = self.fn(*self.args, **self.kwargs) File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/init.py", line 213, in update self.update_characteristics(service['characteristics']) File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/climate/homekit_controller.py", line 66, in update_characteristics mode) for mode in characteristic['valid-values']] KeyError: 'valid-values' 2019-02-05 11:08:21 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error/all to 192.168.10.123 (auth: True) 2019-02-05 11:08:37 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error_log to 192.168.10.123 (auth: True)
Aha! Yes, that's also fixed in 0.87. Some HomeKit devices announce whether they support Hot / Cool / Auto / Off operation modes. It looks like this one doesn't. I just have to assume it supports all the modes in 0.87.
So same file, line 66, we can either go for:
self._valid_modes = [MODE_HOMEKIT_TO_HASS.get(
mode) for mode in characteristic.get('valid-values', [])]
Or
default_modes = list(MODE_HOMEKIT_TO_HASS)
valid_values = characteristic.get('valid-values', default_modes)
self._valid_modes = [
MODE_HOMEKIT_TO_HASS.get(mode) for mode in valid_values
]
The 2nd is closer to whats in 0.87, but i've had to tweak it a bit for 0.86.
Looks to be working. Changed line 66 per the first option above. Temp display now shows up in History. I need to poke around to find the Porch sensor, etc. but am still at bottom of the learning curve. Thanks a lot for working on this. Wes
Ah I think you will have to wait for motion sensors to show up. That was added in 0.87 too.
Error while setting up platform homekit_controller
5:19 PM components/homekit_controller/**init**.py (ERROR)
Here is the part of the kog related to homekit_controller;
...
2019-02-07 17:19:31 INFO (MainThread) [homeassistant.loader] Loaded homekit_controller from homeassistant.components.homekit_controller
2019-02-07 17:19:31 INFO (MainThread) [homeassistant.setup] Setting up homekit_controller
2019-02-07 17:19:32 INFO (MainThread) [homeassistant.setup] Setup of domain homekit_controller took 1.1 seconds.
2019-02-07 17:19:32 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Discovered unique device C3:0F:19:BF:2C:39
2019-02-07 17:19:32 INFO (Thread-21) [homeassistant.components.homekit_controller] Setting up Homekit device ecobee3
2019-02-07 17:19:32 INFO (Thread-21) [homeassistant.loader] Loaded configurator from homeassistant.components.configurator
2019-02-07 17:19:35 INFO (MainThread) [homeassistant.loader] Loaded hassio from homeassistant.components.hassio
2019-02-07 17:19:35 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error/all to 192.168.10.123 (auth: True)
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found Unknown Service: A2
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found thermostat
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found motion
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found occupancy
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.loader] Loaded climate from homeassistant.components.climate
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.setup] Setting up climate
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found temperature
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found motion
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.setup] Setup of domain climate took 0.0 seconds.
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found temperature
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found motion
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found accessory-information
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found temperature
2019-02-07 17:19:37 DEBUG (Thread-21) [homeassistant.components.homekit_controller] Found motion
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.loader] Loaded homekit_controller.climate from homeassistant.components.homekit_controller.climate
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.loader] Loaded homekit_controller.binary_sensor from homeassistant.components.homekit_controller.binary_sensor
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.components.climate] Setting up climate.homekit_controller
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up binary_sensor.homekit_controller
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up binary_sensor.homekit_controller
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up binary_sensor.homekit_controller
2019-02-07 17:19:37 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up binary_sensor.homekit_controller
2019-02-07 17:19:37 ERROR (MainThread) [homeassistant.components.climate] Error while setting up platform homekit_controller
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 128, in _async_setup_platform
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File "/usr/lib/python3.5/asyncio/tasks.py", line 400, in wait_for
return fut.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/climate.py", line 37, in setup_platform
add_entities([HomeKitClimateDevice(accessory, discovery_info)], True)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/climate.py", line 45, in __init__
super().__init__(*args)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 202, in __init__
self.setup()
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 227, in setup
uuid = CharacteristicsTypes.get_uuid(char['type'])
File "/srv/homeassistant/lib/python3.5/site-packages/homekit/model/characteristics/characteristic_types.py", line 324, in get_uuid
raise KeyError('No UUID found for Item {item}'.format(item=orig_item))
KeyError: 'No UUID found for Item B7DDB9A3-54BB-4572-91D2-F1F5B0510F8C'
2019-02-07 17:19:37 ERROR (MainThread) [homeassistant.components.binary_sensor] Error while setting up platform homekit_controller
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 128, in _async_setup_platform
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File "/usr/lib/python3.5/asyncio/tasks.py", line 400, in wait_for
return fut.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 22, in setup_platform
add_entities([HomeKitMotionSensor(accessory, discovery_info)], True)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 30, in __init__
super().__init__(*args)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 202, in __init__
self.setup()
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 227, in setup
uuid = CharacteristicsTypes.get_uuid(char['type'])
File "/srv/homeassistant/lib/python3.5/site-packages/homekit/model/characteristics/characteristic_types.py", line 324, in get_uuid
raise KeyError('No UUID found for Item {item}'.format(item=orig_item))
KeyError: 'No UUID found for Item BFE61C70-4A40-11E6-BDF4-0800200C9A66'
2019-02-07 17:19:37 ERROR (MainThread) [homeassistant.components.binary_sensor] Error while setting up platform homekit_controller
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 128, in _async_setup_platform
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File "/usr/lib/python3.5/asyncio/tasks.py", line 400, in wait_for
return fut.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 22, in setup_platform
add_entities([HomeKitMotionSensor(accessory, discovery_info)], True)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 30, in __init__
super().__init__(*args)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 202, in __init__
self.setup()
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 227, in setup
uuid = CharacteristicsTypes.get_uuid(char['type'])
File "/srv/homeassistant/lib/python3.5/site-packages/homekit/model/characteristics/characteristic_types.py", line 324, in get_uuid
raise KeyError('No UUID found for Item {item}'.format(item=orig_item))
KeyError: 'No UUID found for Item BFE61C70-4A40-11E6-BDF4-0800200C9A66'
2019-02-07 17:19:37 ERROR (MainThread) [homeassistant.components.binary_sensor] Error while setting up platform homekit_controller
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 128, in _async_setup_platform
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File "/usr/lib/python3.5/asyncio/tasks.py", line 400, in wait_for
return fut.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 22, in setup_platform
add_entities([HomeKitMotionSensor(accessory, discovery_info)], True)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 30, in __init__
super().__init__(*args)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 202, in __init__
self.setup()
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 227, in setup
uuid = CharacteristicsTypes.get_uuid(char['type'])
File "/srv/homeassistant/lib/python3.5/site-packages/homekit/model/characteristics/characteristic_types.py", line 324, in get_uuid
raise KeyError('No UUID found for Item {item}'.format(item=orig_item))
KeyError: 'No UUID found for Item BFE61C70-4A40-11E6-BDF4-0800200C9A66'
2019-02-07 17:19:37 ERROR (MainThread) [homeassistant.components.binary_sensor] Error while setting up platform homekit_controller
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/helpers/entity_platform.py", line 128, in _async_setup_platform
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File "/usr/lib/python3.5/asyncio/tasks.py", line 400, in wait_for
return fut.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 22, in setup_platform
add_entities([HomeKitMotionSensor(accessory, discovery_info)], True)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/binary_sensor.py", line 30, in __init__
super().__init__(*args)
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 202, in __init__
self.setup()
File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/homekit_controller/__init__.py", line 227, in setup
uuid = CharacteristicsTypes.get_uuid(char['type'])
File "/srv/homeassistant/lib/python3.5/site-packages/homekit/model/characteristics/characteristic_types.py", line 324, in get_uuid
raise KeyError('No UUID found for Item {item}'.format(item=orig_item))
KeyError: 'No UUID found for Item BFE61C70-4A40-11E6-BDF4-0800200C9A66'
2019-02-07 17:19:47 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error_log to 192.168.10.123 (auth: True)
2019-02-07 17:20:55 INFO (MainThread) [homeassistant.components.http.view] Serving /api/config/config_entries/entry to 192.168.10.123 (auth: True)
2019-02-07 17:20:55 INFO (MainThread) [homeassistant.components.http.view] Serving /api/config/config_entries/flow to 192.168.10.123 (auth: True)
2019-02-07 17:20:55 INFO (MainThread) [homeassistant.components.http.view] Serving /api/config/config_entries/flow_handlers to 192.168.10.123 (auth: True)
2019-02-07 17:22:09 INFO (MainThread) [homeassistant.components.http.view] Serving /api/config/customize/config/binary_sensor.door_sensor_34_31_6f to 192.168.10.123 (auth: True)
2019-02-07 17:23:17 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error/all to 192.168.10.123 (auth: True)
2019-02-07 17:24:10 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error_log to 192.168.10.123 (auth: True)
2019-02-07 17:24:15 INFO (MainThread) [homeassistant.components.http.view] Serving /api/error_log to 192.168.10.123 (auth: True)
Thanks for the update - there is a fix waiting to be merged for this - I’ll send you a link when I’m at my desk if you want to try it.
Just tried 0.87.1 which seems to have this pull request included. Unfortunately my ecobees still don't seem to pair.
I'm having the same issue, just tried 0.87.1 with the same result. Possibly interesting, possibly not, but I tried a suggestion from earlier in this thread and submitted a fake pairing code in the HA UI to see what would happen, and got this in the logs:
homeassistant_1 | 2019-02-11 00:26:04 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection.1801008400] Error handling message: {'type': 'call_service', 'domain': 'configurator', 'service': 'configure', 'service_data': {'configure_id': '1801008944-1', 'fields': {'code': '123123123'}}, 'id': 44}
homeassistant_1 | Traceback (most recent call last):
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homeassistant/components/websocket_api/decorators.py", line 17, in _handle_async_response
homeassistant_1 | await func(hass, connection, msg)
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homeassistant/components/websocket_api/commands.py", line 148, in handle_call_service
homeassistant_1 | connection.context(msg))
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homeassistant/core.py", line 1130, in async_call
homeassistant_1 | self._execute_service(handler, service_call))
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homeassistant/core.py", line 1152, in _execute_service
homeassistant_1 | await handler.func(service_call)
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homeassistant/components/configurator.py", line 221, in async_handle_service_call
homeassistant_1 | call.data.get(ATTR_FIELDS, {}))
homeassistant_1 | File "/usr/local/lib/python3.6/concurrent/futures/thread.py", line 56, in run
homeassistant_1 | result = self.fn(*self.args, **self.kwargs)
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homeassistant/components/homekit_controller/__init__.py", line 141, in device_config_callback
homeassistant_1 | self.controller.perform_pairing(self.hkid, self.hkid, code)
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homekit/controller.py", line 192, in perform_pairing
homeassistant_1 | pairing = perform_pair_setup(conn, pin, str(uuid.uuid4()))
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homekit/protocol/__init__.py", line 98, in perform_pair_setup
homeassistant_1 | error_handler(response_tlv[1][1], 'step 3')
homeassistant_1 | File "/usr/local/lib/python3.6/site-packages/homekit/protocol/__init__.py", line 48, in error_handler
Hey guys sorry to get your hopes up with the chatter on this ticket but we are still a way off having ecobee working.
Wes ran a fork of the homekit library with a hack in place to manually generate the pairing file, and copied an edited version into HA. The PR that was merged is for a problem after that.
To fix the pairing problem with pairing I need to get a change into the homekit library then quite a large change into HA. I’m working on that but it’s quite a bit of refactoring as I’m switching to “config entries” to give me the flexibility we need to support proper pairing.
Hi: (Delayed to organize wife's 70th birthday party,)
I updated .... /homekit_controller/init.py per the git link you emailed me. Now loads 0.87.0 with no errors logged. The temperature at each of my 3 remote sensors is not shown. The occupancy/motion at the main thermostat and the 3 remote sensors is shown and correct. The climate card is not displayed on the Overview page (although it was one step previous). Let me know what else I can do. Wes
Ecobee3 temperature card now displayed on overview page. The motion/occupancy sensors also show up. Perhaps they are not displayed until a status change. Display appeared after heat came on. I think ecobee sensors and temp card should display on startup. Wes
Updated to HA 0.87.1. No change from above. Wes
Hey @wes-warner - thanks a lot for the update.
This is all very good news to hear. I think most of the gaps are expected. Still working on the UI changes for pairing. The basics works but there are a lot of edge cases I need to sort out before I can submit them.
I'm not expecting temperature at each of 3 remotes to work yet. 2 problems remain there:
I'm not sure why the card wasn't displayed. It should have been, theres no logic thats tied to the thermostat switching between states. How long did it take to appear? With some of the devices I have it used to take up to 5 minutes for everything to appear. I'm working on reducing that so I might say lets wait until my next set of changes land to investigate it further?
Previously you sent me the output:
python -m homekit.get_accessories -f pairing.json -a "ecobee"
It would be very helpful if you could send it in json format, then i can add it into my automated tests:
python -m homekit.get_accessories -f pairing.json -a "ecobee" -o json
Here is a link to the json output https://www.dropbox.com/sh/6a04vk15t3slmt3/AAAz_-Huffxc3XJnt4sQAexWa?dl=0
note the name ecobee is changed to ecobee3 in the python command above. Wes
After 21 days my Ecobee3 and its 3 extra sensors still working in HA at release 0.88.2. I have not reset the Ecobee3 and attempted to pair again. The temperature at the 3 sensors is not being read yet (as expected) but occupancy is reported. I am keen to do more testing if it would help. Wes
Hi @wes-warner - thanks for the ping.
I've started trying to upstream the work to move to config entires - a precursor for the pairing fix. The first PR is currently waiting in the review queue, its been a few days already so hopefully it will get looked at soon..
I'm planning to do some more integration testing of the full change. If you are comfortable with the idea of running a branch of HA rather than a fresh install then your testing there would be very valuable. But it's fine if you want to avoid messing up your install!
In the mean time another dev has added temperature sensors so that might start working in 0.89 (not sure if it was merged in time or whether it will be 0.90).
Neither my HA setup, or I, will be 'production ready'
Hi @wes-warner - thanks for the ping.
I've started trying to upstream the work to move to config entires - a precursor for the pairing fix. The first PR is currently waiting in the review queue, its been a few days already so hopefully it will get looked at soon..
I'm planning to do some more integration testing of the full change. If you are comfortable with the idea of running a branch of HA rather than a fresh install then your testing there would be very valuable. But it's fine if you want to avoid messing up your install!
In the mean time another dev has added temperature sensors so that might start working in 0.89 (not sure if it was merged in time or whether it will be 0.90).
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
That’s great news for me - I’ll make sure the basics work and then be in touch.
Home Assistant release with the issue:
0.73.0 **Last working Home Assistant release (if known):** New component **Operating environment (Hass.io/Docker/Windows/etc.):**Ubuntu 16.04 Component/platform:
HomeKit Climate
Description of problem: Two thermostats show up to configure, opening them prompts for code, however thermostat isn't being triggered to show code.
Problem-relevant
configuration.yaml
entries and (fill out even if it seems unimportant):Traceback (if applicable):
Additional information: No errors or anything interesting in logs.