Closed johnschult closed 7 years ago
Hi @johnschult,
Thanks for opening the issue and posting the log right away. It helped me to quickly zoom on what is going on. Bad news is that this is a tricky problem. It happened to me a couple of times too, and doing what you did - i.e deleting persist/
and accessories/
directories in ~/.homebridge/
usually helped me.
Your log shows your [Bedroom]
added twice, which is very strange. One of the Initialized
messages is very weird indeed: [Bedroom] Initialized | undefined
.
HomeKit unpairing that you're experiencing typically happens if one of the characteristics value fields is out of the bounds of the min/max values. Or in case of a fixed answer lists, none of the allowed options. Sometimes iOS even blacklists the bridge for some time and that's why one needs to change the username in config.json
.
To better understand what is going on, can you please, do the following:
DEBUG=* homebridge -D`
Thanks!
v6.9.2
0.4.11
0.4.16
{"status":-70401}
[12/9/2016, 10:02:11 AM] Loaded plugin: homebridge-ecobee3-sensors
Homebridge API version: 2.1
[12/9/2016, 10:02:11 AM] Registering platform 'homebridge-ecobee3-sensors.Ecobee 3 Sensors'
[12/9/2016, 10:02:11 AM] ---
[12/9/2016, 10:02:15 AM] Loaded plugin: homebridge-people
[12/9/2016, 10:02:15 AM] Registering accessory 'homebridge-people.people'
[12/9/2016, 10:02:15 AM] ---
[12/9/2016, 10:02:15 AM] Loaded config.json with 1 accessories and 1 platforms.
[12/9/2016, 10:02:15 AM] ---
[12/9/2016, 10:02:16 AM] Loading 1 platforms...
[12/9/2016, 10:02:16 AM] [Ecobee] Initializing Ecobee 3 Sensors platform...
[12/9/2016, 10:02:16 AM] Loading 1 accessories...
[12/9/2016, 10:02:16 AM] [People] Initializing people accessory...
[12/9/2016, 10:02:16 AM] [People] WebHook: Started server on port '51828'.
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
+------------+
¦ XXX-XX-XXX ¦
+------------+
Fri, 09 Dec 2016 15:02:16 GMT Accessory [Test Homebridge] Creating new AccessoryInfo for our HAP server
Fri, 09 Dec 2016 15:02:16 GMT Accessory [Test Homebridge] Creating new IdentifierCache
[12/9/2016, 10:02:17 AM] [Ecobee] Finished launching...
[12/9/2016, 10:02:17 AM] [Ecobee] Requesting authorization code...
Fri, 09 Dec 2016 15:02:17 GMT EventedHTTPServer Server listening on port 51826
[12/9/2016, 10:02:17 AM] Homebridge is running on port 51826.
[12/9/2016, 10:02:18 AM] [Ecobee] { ecobeePin: 'nmpe',
code: 'nksT1zrB1MorLimlGztkEpUefQvewVei',
scope: 'smartRead',
expires_in: 9,
interval: 30 }
[12/9/2016, 10:02:18 AM] [Ecobee] These are the steps authorize this application to access your Ecobee 3:
[12/9/2016, 10:02:18 AM] [Ecobee] 1. Go to https://www.ecobee.com/home/ecobeeLogin.jsp
[12/9/2016, 10:02:18 AM] [Ecobee] 2. Login to your thermostat console
[12/9/2016, 10:02:18 AM] [Ecobee] 3. Select 'MY APPS' from the menu on the top right.
[12/9/2016, 10:02:18 AM] [Ecobee] 4. Click 'Add Application'
[12/9/2016, 10:02:18 AM] [Ecobee] 5. Enter the following authorization code:
[12/9/2016, 10:02:18 AM] [Ecobee] +------+
[12/9/2016, 10:02:18 AM] [Ecobee] ¦ xxxx ¦
[12/9/2016, 10:02:18 AM] [Ecobee] +------+
[12/9/2016, 10:02:18 AM] [Ecobee] 6. Wait a moment.
[12/9/2016, 10:02:18 AM] [Ecobee] Authorizing plugin to access the thermostat...
[12/9/2016, 10:02:19 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [ 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n65\r\ngrant_type=ecobeePin&client_id=DALCINnO49EYOmMfQQxmx7PYofM1YEGo&code=nksT1zrB1MorLimlGztkEpUefQvewVei\r\n' ],
outputEncodings: [ undefined ],
outputCallbacks: [ undefined ],
outputSize: 249,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: true,
socket: null,
connection: null,
_header: 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headers:
{ 'content-type': 'application/x-www-form-urlencoded',
host: 'api.ecobee.com' },
_headerNames: { 'content-type': 'content-type', host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/token',
_ended: false }
[12/9/2016, 10:02:19 AM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/9/2016, 10:02:19 AM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/9/2016, 10:02:50 AM] [Ecobee] Authorizing plugin to access the thermostat...
[12/9/2016, 10:02:51 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [ 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n65\r\ngrant_type=ecobeePin&client_id=DALCINnO49EYOmMfQQxmx7PYofM1YEGo&code=nksT1zrB1MorLimlGztkEpUefQvewVei\r\n' ],
outputEncodings: [ undefined ],
outputCallbacks: [ undefined ],
outputSize: 249,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: true,
socket: null,
connection: null,
_header: 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headers:
{ 'content-type': 'application/x-www-form-urlencoded',
host: 'api.ecobee.com' },
_headerNames: { 'content-type': 'content-type', host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/token',
_ended: false }
[12/9/2016, 10:02:51 AM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/9/2016, 10:02:51 AM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/9/2016, 10:03:22 AM] [Ecobee] Authorizing plugin to access the thermostat...
[12/9/2016, 10:03:22 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [ 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n65\r\ngrant_type=ecobeePin&client_id=DALCINnO49EYOmMfQQxmx7PYofM1YEGo&code=nksT1zrB1MorLimlGztkEpUefQvewVei\r\n' ],
outputEncodings: [ undefined ],
outputCallbacks: [ undefined ],
outputSize: 249,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: true,
socket: null,
connection: null,
_header: 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headers:
{ 'content-type': 'application/x-www-form-urlencoded',
host: 'api.ecobee.com' },
_headerNames: { 'content-type': 'content-type', host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/token',
_ended: false }
[12/9/2016, 10:03:22 AM] [Ecobee] { access_token: 'roe8qV9DxQ00TPnRsSLi5mFKfaQ2Y6oq',
token_type: 'Bearer',
expires_in: 3599,
refresh_token: 'oUwSCotxdY5LXGygtCJ9jLYalUGU0lgE',
scope: 'smartRead' }
[12/9/2016, 10:03:23 AM] [Ecobee] Authorization successful :-)
[12/9/2016, 10:03:23 AM] [Ecobee] Updating sensors with fresh data...
[12/9/2016, 10:03:23 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: false,
socket: null,
connection: null,
_header: null,
_headers:
{ 'content-type': 'application/json',
authorization: 'Bearer roe8qV9DxQ00TPnRsSLi5mFKfaQ2Y6oq',
host: 'api.ecobee.com' },
_headerNames:
{ 'content-type': 'Content-Type',
authorization: 'authorization',
host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'GET',
path: '/1/thermostat?json=%7B%22selection%22%3A%7B%22selectionType%22%3A%22registered%22%2C%22selectionMatch%22%3A%22%22%2C%22includeSensors%22%3Atrue%7D%7D',
_ended: false }
[12/9/2016, 10:03:23 AM] [Ecobee] { page: { page: 1, totalPages: 1, pageSize: 2, total: 2 },
thermostatList:
[ { identifier: '311031632844',
name: 'Bedroom',
thermostatRev: '161209001921',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-09 00:19:21',
thermostatTime: '2016-12-09 10:03:23',
utcTime: '2016-12-09 15:03:23',
remoteSensors: [Object] },
{ identifier: '319214442349',
name: 'Office',
thermostatRev: '161208231304',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-08 23:13:04',
thermostatTime: '2016-12-09 10:03:23',
utcTime: '2016-12-09 15:03:23',
remoteSensors: [Object] } ],
status: { code: 0, message: '' } }
[12/9/2016, 10:03:23 AM] [Ecobee] Update sensors
[12/9/2016, 10:03:23 AM] [Ecobee] Setting values of sensors...
[12/9/2016, 10:03:23 AM] [Ecobee] Create | Great Room | QRYQ
[12/9/2016, 10:03:24 AM] [Ecobee] [Great Room] Initializing sensor...
[12/9/2016, 10:03:24 AM] [Ecobee] { id: 'rs:100',
name: 'Great Room',
type: 'ecobee3_remote_sensor',
code: 'QRYQ',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '663' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:24 AM] [Ecobee] [Great Room] Initialized | QRYQ
[12/9/2016, 10:03:24 AM] [Ecobee] [Great Room] Updating sensor measurement...
[12/9/2016, 10:03:24 AM] [Ecobee] { id: 'rs:100',
name: 'Great Room',
type: 'ecobee3_remote_sensor',
code: 'QRYQ',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '663' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:24 AM] [Ecobee] [Great Room] Vacant | 19.1°C
[12/9/2016, 10:03:24 AM] [Ecobee] Create | Family Room | K52Q
[12/9/2016, 10:03:24 AM] [Ecobee] [Family Room] Initializing sensor...
[12/9/2016, 10:03:24 AM] [Ecobee] { id: 'rs:101',
name: 'Family Room',
type: 'ecobee3_remote_sensor',
code: 'K52Q',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '682' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:24 AM] [Ecobee] [Family Room] Initialized | K52Q
[12/9/2016, 10:03:24 AM] [Ecobee] [Family Room] Updating sensor measurement...
[12/9/2016, 10:03:24 AM] [Ecobee] { id: 'rs:101',
name: 'Family Room',
type: 'ecobee3_remote_sensor',
code: 'K52Q',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '682' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:24 AM] [Ecobee] [Family Room] Vacant | 20.1°C
[12/9/2016, 10:03:24 AM] [Ecobee] Create | Bedroom | undefined
[12/9/2016, 10:03:24 AM] [Ecobee] [Bedroom] Initializing sensor...
[12/9/2016, 10:03:25 AM] [Ecobee] { id: 'ei:0',
name: 'Bedroom',
type: 'thermostat',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '656' },
{ id: '2', type: 'humidity', value: '32' },
{ id: '3', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:25 AM] [Ecobee] [Bedroom] Initialized | undefined
[12/9/2016, 10:03:25 AM] [Ecobee] [Bedroom] Updating sensor measurement...
[12/9/2016, 10:03:25 AM] [Ecobee] { id: 'ei:0',
name: 'Bedroom',
type: 'thermostat',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '656' },
{ id: '2', type: 'humidity', value: '32' },
{ id: '3', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:25 AM] [Ecobee] [Bedroom] Vacant | 32% | 18.7°C
[12/9/2016, 10:03:25 AM] [Ecobee] Create | Guest Bedroom | MG4Y
[12/9/2016, 10:03:25 AM] [Ecobee] [Guest Bedroom] Initializing sensor...
[12/9/2016, 10:03:25 AM] [Ecobee] { id: 'rs:100',
name: 'Guest Bedroom',
type: 'ecobee3_remote_sensor',
code: 'MG4Y',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '694' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:25 AM] [Ecobee] [Guest Bedroom] Initialized | MG4Y
[12/9/2016, 10:03:25 AM] [Ecobee] [Guest Bedroom] Updating sensor measurement...
[12/9/2016, 10:03:25 AM] [Ecobee] { id: 'rs:100',
name: 'Guest Bedroom',
type: 'ecobee3_remote_sensor',
code: 'MG4Y',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '694' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:25 AM] [Ecobee] [Guest Bedroom] Vacant | 20.8°C
[12/9/2016, 10:03:25 AM] [Ecobee] [Bedroom] Updating sensor measurement...
[12/9/2016, 10:03:25 AM] [Ecobee] { id: 'ei:0',
name: 'Office',
type: 'thermostat',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '678' },
{ id: '2', type: 'humidity', value: '31' },
{ id: '3', type: 'occupancy', value: 'true' } ] }
[12/9/2016, 10:03:25 AM] [Ecobee] [Bedroom] Occupied | 31% | 19.9°C
[12/9/2016, 10:03:25 AM] [Ecobee] Cleaning unused cached Homebridge accessories...
[12/9/2016, 10:03:25 AM] [Ecobee] {}
[12/9/2016, 10:03:25 AM] [Ecobee] Wait | 30 seconds
[12/9/2016, 10:03:25 AM] [Ecobee] Refreshing tokens...
[12/9/2016, 10:03:26 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [ 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n69\r\ngrant_type=refresh_token&code=oUwSCotxdY5LXGygtCJ9jLYalUGU0lgE&client_id=DALCINnO49EYOmMfQQxmx7PYofM1YEGo\r\n' ],
outputEncodings: [ undefined ],
outputCallbacks: [ undefined ],
outputSize: 253,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: true,
socket: null,
connection: null,
_header: 'POST /token HTTP/1.1\r\ncontent-type: application/x-www-form-urlencoded\r\nHost: api.ecobee.com\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headers:
{ 'content-type': 'application/x-www-form-urlencoded',
host: 'api.ecobee.com' },
_headerNames: { 'content-type': 'content-type', host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/token',
_ended: false }
[12/9/2016, 10:03:26 AM] [Ecobee] { access_token: 'yRCuHCZThZj1wnpeWHjoE4pQZB6MPKzr',
token_type: 'Bearer',
expires_in: 3599,
refresh_token: 'pjpKuy3vZebN94ysjoxFV5dwzXWZjghl',
scope: 'smartRead' }
[12/9/2016, 10:03:26 AM] [Ecobee] Tokens
[12/9/2016, 10:03:56 AM] [Ecobee] Updating sensors with fresh data...
[12/9/2016, 10:03:56 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: false,
socket: null,
connection: null,
_header: null,
_headers:
{ 'content-type': 'application/json',
authorization: 'Bearer yRCuHCZThZj1wnpeWHjoE4pQZB6MPKzr',
host: 'api.ecobee.com' },
_headerNames:
{ 'content-type': 'Content-Type',
authorization: 'authorization',
host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'GET',
path: '/1/thermostat?json=%7B%22selection%22%3A%7B%22selectionType%22%3A%22registered%22%2C%22selectionMatch%22%3A%22%22%2C%22includeSensors%22%3Atrue%7D%7D',
_ended: false }
[12/9/2016, 10:03:57 AM] [Ecobee] { page: { page: 1, totalPages: 1, pageSize: 2, total: 2 },
thermostatList:
[ { identifier: '311031632844',
name: 'Bedroom',
thermostatRev: '161209001921',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-09 00:19:21',
thermostatTime: '2016-12-09 10:03:57',
utcTime: '2016-12-09 15:03:57',
remoteSensors: [Object] },
{ identifier: '319214442349',
name: 'Office',
thermostatRev: '161208231304',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-08 23:13:04',
thermostatTime: '2016-12-09 10:03:57',
utcTime: '2016-12-09 15:03:57',
remoteSensors: [Object] } ],
status: { code: 0, message: '' } }
[12/9/2016, 10:03:57 AM] [Ecobee] Update sensors
[12/9/2016, 10:03:57 AM] [Ecobee] Setting values of sensors...
[12/9/2016, 10:03:57 AM] [Ecobee] [Great Room] Updating sensor measurement...
[12/9/2016, 10:03:57 AM] [Ecobee] { id: 'rs:100',
name: 'Great Room',
type: 'ecobee3_remote_sensor',
code: 'QRYQ',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '663' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:57 AM] [Ecobee] [Great Room] Vacant | 19.1°C
[12/9/2016, 10:03:57 AM] [Ecobee] [Family Room] Updating sensor measurement...
[12/9/2016, 10:03:57 AM] [Ecobee] { id: 'rs:101',
name: 'Family Room',
type: 'ecobee3_remote_sensor',
code: 'K52Q',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '682' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:57 AM] [Ecobee] [Family Room] Vacant | 20.1°C
[12/9/2016, 10:03:57 AM] [Ecobee] [Bedroom] Updating sensor measurement...
[12/9/2016, 10:03:57 AM] [Ecobee] { id: 'ei:0',
name: 'Bedroom',
type: 'thermostat',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '656' },
{ id: '2', type: 'humidity', value: '32' },
{ id: '3', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:57 AM] [Ecobee] [Bedroom] Vacant | 32% | 18.7°C
[12/9/2016, 10:03:57 AM] [Ecobee] [Guest Bedroom] Updating sensor measurement...
[12/9/2016, 10:03:57 AM] [Ecobee] { id: 'rs:100',
name: 'Guest Bedroom',
type: 'ecobee3_remote_sensor',
code: 'MG4Y',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '694' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:03:57 AM] [Ecobee] [Guest Bedroom] Vacant | 20.8°C
[12/9/2016, 10:03:57 AM] [Ecobee] [Bedroom] Updating sensor measurement...
[12/9/2016, 10:03:57 AM] [Ecobee] { id: 'ei:0',
name: 'Office',
type: 'thermostat',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '678' },
{ id: '2', type: 'humidity', value: '31' },
{ id: '3', type: 'occupancy', value: 'true' } ] }
[12/9/2016, 10:03:57 AM] [Ecobee] [Bedroom] Occupied | 31% | 19.9°C
[12/9/2016, 10:03:57 AM] [Ecobee] Cleaning unused cached Homebridge accessories...
[12/9/2016, 10:03:57 AM] [Ecobee] {}
[12/9/2016, 10:03:57 AM] [Ecobee] Wait | 30 seconds
Fri, 09 Dec 2016 15:04:17 GMT EventedHTTPServer [::ffff:192.168.1.71] New connection from client
Fri, 09 Dec 2016 15:04:17 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP server listening on port 56809
Fri, 09 Dec 2016 15:04:17 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /pair-setup
Fri, 09 Dec 2016 15:04:17 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: POST /pair-setup
Fri, 09 Dec 2016 15:04:17 GMT HAPServer [CF:33:3D:E2:D2:90] Pair step 1/5
Fri, 09 Dec 2016 15:04:40 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
[12/9/2016, 10:04:40 AM] [Ecobee] Updating sensors with fresh data...
[12/9/2016, 10:04:40 AM] [Ecobee] ClientRequest {
domain: null,
_events:
{ response: { [Function: g] listener: [Function: bound ] },
socket: { [Function: g] listener: [Function: onSocket] },
error: [Function: bound ] },
_eventsCount: 3,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: false,
socket: null,
connection: null,
_header: null,
_headers:
{ 'content-type': 'application/json',
authorization: 'Bearer yRCuHCZThZj1wnpeWHjoE4pQZB6MPKzr',
host: 'api.ecobee.com' },
_headerNames:
{ 'content-type': 'Content-Type',
authorization: 'authorization',
host: 'Host' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: { 'api.ecobee.com:443::::::::': [Object] },
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: [Object], list: [Object] } },
socketPath: undefined,
timeout: undefined,
method: 'GET',
path: '/1/thermostat?json=%7B%22selection%22%3A%7B%22selectionType%22%3A%22registered%22%2C%22selectionMatch%22%3A%22%22%2C%22includeSensors%22%3Atrue%7D%7D',
_ended: false }
Fri, 09 Dec 2016 15:04:41 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /pair-setup
Fri, 09 Dec 2016 15:04:41 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: POST /pair-setup
Fri, 09 Dec 2016 15:04:41 GMT HAPServer [CF:33:3D:E2:D2:90] Pair step 2/5
Fri, 09 Dec 2016 15:05:03 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
Fri, 09 Dec 2016 15:05:04 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /pair-setup
Fri, 09 Dec 2016 15:05:04 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: POST /pair-setup
Fri, 09 Dec 2016 15:05:04 GMT HAPServer [CF:33:3D:E2:D2:90] Pair step 3/5
Fri, 09 Dec 2016 15:05:04 GMT HAPServer [CF:33:3D:E2:D2:90] Pair step 4/5
Fri, 09 Dec 2016 15:05:04 GMT HAPServer [CF:33:3D:E2:D2:90] Pair step 5/5
Fri, 09 Dec 2016 15:05:04 GMT Accessory [Test Homebridge] Paired with client 868C2787-2FEA-4BB5-84CA-3B5B32AA522F
Fri, 09 Dec 2016 15:05:04 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
Fri, 09 Dec 2016 15:05:04 GMT EventedHTTPServer [::ffff:192.168.1.71] Client connection closed
[12/9/2016, 10:05:04 AM] [Ecobee] { page: { page: 1, totalPages: 1, pageSize: 2, total: 2 },
thermostatList:
[ { identifier: '311031632844',
name: 'Bedroom',
thermostatRev: '161209001921',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-09 00:19:21',
thermostatTime: '2016-12-09 10:05:04',
utcTime: '2016-12-09 15:05:04',
remoteSensors: [Object] },
{ identifier: '319214442349',
name: 'Office',
thermostatRev: '161208231304',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-08 23:13:04',
thermostatTime: '2016-12-09 10:05:04',
utcTime: '2016-12-09 15:05:04',
remoteSensors: [Object] } ],
status: { code: 0, message: '' } }
[12/9/2016, 10:05:04 AM] [Ecobee] Update sensors
[12/9/2016, 10:05:04 AM] [Ecobee] Setting values of sensors...
[12/9/2016, 10:05:04 AM] [Ecobee] [Great Room] Updating sensor measurement...
[12/9/2016, 10:05:04 AM] [Ecobee] { id: 'rs:100',
name: 'Great Room',
type: 'ecobee3_remote_sensor',
code: 'QRYQ',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '663' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:05:04 AM] [Ecobee] [Great Room] Vacant | 19.1°C
[12/9/2016, 10:05:04 AM] [Ecobee] [Family Room] Updating sensor measurement...
[12/9/2016, 10:05:04 AM] [Ecobee] { id: 'rs:101',
name: 'Family Room',
type: 'ecobee3_remote_sensor',
code: 'K52Q',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '682' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:05:04 AM] [Ecobee] [Family Room] Vacant | 20.1°C
[12/9/2016, 10:05:04 AM] [Ecobee] [Bedroom] Updating sensor measurement...
[12/9/2016, 10:05:04 AM] [Ecobee] { id: 'ei:0',
name: 'Bedroom',
type: 'thermostat',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '656' },
{ id: '2', type: 'humidity', value: '32' },
{ id: '3', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:05:04 AM] [Ecobee] [Bedroom] Vacant | 32% | 18.7°C
[12/9/2016, 10:05:04 AM] [Ecobee] [Guest Bedroom] Updating sensor measurement...
[12/9/2016, 10:05:04 AM] [Ecobee] { id: 'rs:100',
name: 'Guest Bedroom',
type: 'ecobee3_remote_sensor',
code: 'MG4Y',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '694' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/9/2016, 10:05:04 AM] [Ecobee] [Guest Bedroom] Vacant | 20.8°C
[12/9/2016, 10:05:04 AM] [Ecobee] [Bedroom] Updating sensor measurement...
[12/9/2016, 10:05:04 AM] [Ecobee] { id: 'ei:0',
name: 'Office',
type: 'thermostat',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '678' },
{ id: '2', type: 'humidity', value: '31' },
{ id: '3', type: 'occupancy', value: 'true' } ] }
[12/9/2016, 10:05:04 AM] [Ecobee] [Bedroom] Occupied | 31% | 19.9°C
[12/9/2016, 10:05:04 AM] [Ecobee] Cleaning unused cached Homebridge accessories...
[12/9/2016, 10:05:04 AM] [Ecobee] {}
[12/9/2016, 10:05:04 AM] [Ecobee] Wait | 30 seconds
Fri, 09 Dec 2016 15:05:04 GMT EventedHTTPServer [::ffff:192.168.1.71] New connection from client
Fri, 09 Dec 2016 15:05:04 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP server listening on port 41216
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP connection was closed
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP server was closed
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /pair-verify
Fri, 09 Dec 2016 15:05:05 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: POST /pair-verify
Fri, 09 Dec 2016 15:05:05 GMT HAPServer [CF:33:3D:E2:D2:90] Pair verify step 1/2
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /pair-verify
Fri, 09 Dec 2016 15:05:05 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: POST /pair-verify
Fri, 09 Dec 2016 15:05:05 GMT HAPServer [CF:33:3D:E2:D2:90] Pair verify step 2/2
Fri, 09 Dec 2016 15:05:05 GMT HAPServer [CF:33:3D:E2:D2:90] Client 868C2787-2FEA-4BB5-84CA-3B5B32AA522F verification complete
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /accessories
Fri, 09 Dec 2016 15:05:05 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: GET /accessories
Fri, 09 Dec 2016 15:05:05 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
Fri, 09 Dec 2016 15:05:06 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP request: /pairings
Fri, 09 Dec 2016 15:05:06 GMT HAPServer [CF:33:3D:E2:D2:90] HAP Request: POST /pairings
Fri, 09 Dec 2016 15:05:06 GMT HAPServer [CF:33:3D:E2:D2:90] Removing pairing info for client
Fri, 09 Dec 2016 15:05:06 GMT Accessory [Test Homebridge] Unpairing with client 868C2787-2FEA-4BB5-84CA-3B5B32AA522F
Fri, 09 Dec 2016 15:05:06 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP Response is finished
Fri, 09 Dec 2016 15:05:06 GMT EventedHTTPServer [::ffff:192.168.1.71] Client connection closed
Fri, 09 Dec 2016 15:05:06 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP connection was closed
Fri, 09 Dec 2016 15:05:06 GMT EventedHTTPServer [::ffff:192.168.1.71] HTTP server was closed
Thanks for the log. It helped a ton! The problem you're seeing was introduced in commit da0e860. There are two fixes for you at the moment:
Use the current 0.1.1
version and set "exclude_thermostat":true
in the config.json
file. This should bypass the buggy logic described below. Disadvantage is that the Home app won't show the measurements provided by your two thermostats (i.e. humididty, temperature & occupancy). Only the room sensors will be exposed to HomeKit.
Use an older 0.1.0
version for the time being. This is a version released just before this bug was introduced into the codebase. The "exclude_thermostat"
option isn't available in that version and the thermostat measurements are visible by default.
The reason why the problems are happening is the following. The sensorConfig.code
is used as a hashing key in the this.ecobeeAccessories
dictionary that contains all the accessories created by the plugin. sensorConfig.code
is defined only for sensors and not for the thermostat itself. The two thermostats you have in your setup overwrite each other since they use the same (non-existing) hash key. All the flawed action is happening in EcobeePlatfrom.sensors(...)
function.
Sorry for the trouble! I'll fix this in the next version 0.1.2
.
If you feel like it, you can test the fix in the latest version 5299f7c.
I made the mods locally and can confirm that it all works now 😄 I'll get the update when you publish it. Thanks!
I tried it and can confirm the fixes worked for me too.
Cool. Thanks for trying it out!
I have cleaned out
persist
, changedusername
and removed my Homebridge accessory from Home and restartedhomebridge
. When I try to add the accessory again Home says "Couldn't add Homebridge" and I get the following in the log: