Closed macjeff closed 7 years ago
Hello @macjeff,
Thanks for opening the issue here. It seems really strange and I apologize for the problems you're seeing. Number of sensors shouldn't really matter to the plugin. It can crunch any number of them.
Can you run Homebridge in debug mode and post the log here, please? This will output the HTTP request/responses from the Ecobee server. With these it should be easy to figure out why are the problems with empty displayName
happening.
homebridge -D
Also, if the plugin crashes like this, it's quite likely that you have to re-authorize it again as you are describing. At that point the security tokens are not yet permanently stored.
i could give you access to my stuff to take a look but only if we do it under private mail.
When I authenticate if I wait the 30 seconds I get the error. If I dont wait the 30 seconds and relaunch homebridge it works (does not ask to authenticate) but then I get the error. So I think the error is "un authenticating" Here is the output you asked for.
Last login: Tue Dec 20 12:34:58 on ttys000
files:~ sadmin$ homebridge -D
[12/20/2016, 12:36:14 PM] Loaded plugin: homebridge-ecobee3-sensors
Homebridge API version: 2.1
[12/20/2016, 12:36:14 PM] Registering platform 'homebridge-ecobee3-sensors.Ecobee 3 Sensors'
[12/20/2016, 12:36:14 PM] ---
[12/20/2016, 12:36:14 PM] Loaded plugin: homebridge-harmonyhub
[12/20/2016, 12:36:14 PM] Registering platform 'homebridge-harmonyhub.HarmonyHub'
[12/20/2016, 12:36:14 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-isy-js
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-isy-js.isy-js'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-legacy-plugins
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.AD2USB'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.Carwings'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.ELKM1'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.FileSensor'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.GenericRS232Device'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.HomeMatic'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.HomeMaticThermo'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.HomeMaticWindow'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.HttpGarageDoorOpener'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.HttpHygrometer'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.HttpThermometer'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.Tesla'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.X10'
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-legacy-plugins.mpdclient'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.Domoticz'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.HomeAssistant'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.HomeSeer'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.ISY'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.LIFx'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.SmartThings'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.TelldusLive'
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-legacy-plugins.ZWayServer'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-lockitron
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-lockitron.Lockitron'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-netatmo
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-netatmo.netatmo'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-platform-wemo
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-platform-wemo.BelkinWeMo'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-server
[12/20/2016, 12:36:15 PM] Registering platform 'homebridge-server.Server'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded plugin: homebridge-wemo
[12/20/2016, 12:36:15 PM] Registering accessory 'homebridge-wemo.WeMo'
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loaded config.json with 2 accessories and 4 platforms.
[12/20/2016, 12:36:15 PM] ---
[12/20/2016, 12:36:15 PM] Loading 4 platforms...
[12/20/2016, 12:36:15 PM] [Ecobee] Initializing Ecobee 3 Sensors platform...
[12/20/2016, 12:36:15 PM] [WeMo Platform] Initializing BelkinWeMo platform...
[12/20/2016, 12:36:15 PM] [ISY] Initializing isy-js platform...
[12/20/2016, 12:36:15 PM] [netatmo platform] Initializing netatmo platform...
[12/20/2016, 12:36:15 PM] [netatmo platform] Creating NetatmoPlatform...
[12/20/2016, 12:36:16 PM] Loading 2 accessories...
[12/20/2016, 12:36:16 PM] [Front Door] Initializing Lockitron accessory...
[12/20/2016, 12:36:16 PM] [Back Door] Initializing Lockitron accessory...
Load homebridge-harmonyhub.HarmonyHub
[12/20/2016, 12:36:16 PM] [homebridge-harmonyhub.HarmonyHub] Ignoring Harmony Platform setup because it is not configured
[12/20/2016, 12:36:16 PM] [Ecobee] Finished launching...
[12/20/2016, 12:36:16 PM] [Ecobee] Requesting authorization code...
[12/20/2016, 12:36:16 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:36:16 PM] [Ecobee] { ecobeePin: 'p9sm',
code: 'Y0YHoLHKxVQlg7io81us1YKAJQpNPoKu',
scope: 'smartRead',
expires_in: 9,
interval: 30 }
[12/20/2016, 12:36:16 PM] [Ecobee] These are the steps authorize this application to access your Ecobee 3:
[12/20/2016, 12:36:16 PM] [Ecobee] 1. Go to https://www.ecobee.com/home/ecobeeLogin.jsp
[12/20/2016, 12:36:16 PM] [Ecobee] 2. Login to your thermostat console
[12/20/2016, 12:36:16 PM] [Ecobee] 3. Select 'MY APPS' from the menu on the top right.
[12/20/2016, 12:36:16 PM] [Ecobee] 4. Click 'Add Application'
[12/20/2016, 12:36:16 PM] [Ecobee] 5. Enter the following authorization code:
[12/20/2016, 12:36:16 PM] [Ecobee] ┌──────┐
[12/20/2016, 12:36:16 PM] [Ecobee] │ p9sm │
[12/20/2016, 12:36:16 PM] [Ecobee] └──────┘
[12/20/2016, 12:36:16 PM] [Ecobee] 6. Wait a moment.
[12/20/2016, 12:36:16 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 12:36:16 PM] [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=Y0YHoLHKxVQlg7io81us1YKAJQpNPoKu\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],
'api.netatmo.net: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/20/2016, 12:36:16 PM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/20/2016, 12:36:16 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation device 70:ee:50:02:72:48 (MACWeather Kitchen- Main)
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation module 03:00:00:00:df:88 (MACWeather Tucker/Ashton)
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation module 05:00:00:01:37:7a (MACWeather Rain Gauge)
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation module 03:00:00:00:de:fa (MACWeather Basement)
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation module 03:00:00:00:e5:52 (MACWeather Sunroom)
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation module 02:00:00:02:7d:88 (MACWeather Outdoor)
[12/20/2016, 12:36:17 PM] [netatmo platform] refreshing weatherstation module 06:00:00:00:dd:de (MACWeather Wind Gauge)
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Kitchen- Main'...
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Tucker/Ashton'...
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Rain Gauge'...
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Basement'...
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Sunroom'...
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Outdoor'...
[12/20/2016, 12:36:17 PM] [netatmo platform] Initializing platform accessory 'MACWeather Wind Gauge'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Fade Down'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Fade Up'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'First'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Christmas Outdoor'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Deck Post Switch'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Middle'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Third'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Village Fountain'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Security DVR'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Cable Modem'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Deck Lights'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Aquariums All'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Hot Tub Lights'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Pool and Playset All'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Garage Lights'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Village All'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Front Porch Lights'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Attic ALL Switches'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Lantern Lights'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Stereo'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Driveway'...
[12/20/2016, 12:36:18 PM] [ISY] Initializing platform accessory 'Patio Lights'...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
┌────────────┐
│ 031-45-154 │
└────────────┘
[12/20/2016, 12:36:18 PM] Homebridge is running on port 51826.
[12/20/2016, 12:36:46 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:36:47 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 12:36:47 PM] [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=Y0YHoLHKxVQlg7io81us1YKAJQpNPoKu\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/20/2016, 12:36:47 PM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/20/2016, 12:36:47 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 12:37:16 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:37:16 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:37:18 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 12:37:18 PM] [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=Y0YHoLHKxVQlg7io81us1YKAJQpNPoKu\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/20/2016, 12:37:18 PM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/20/2016, 12:37:18 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 12:37:46 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:37:46 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:37:49 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 12:37:49 PM] [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=Y0YHoLHKxVQlg7io81us1YKAJQpNPoKu\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/20/2016, 12:37:49 PM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/20/2016, 12:37:49 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 12:38:16 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:38:16 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 12:38:20 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 12:38:20 PM] [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=Y0YHoLHKxVQlg7io81us1YKAJQpNPoKu\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/20/2016, 12:38:21 PM] [Ecobee] { access_token: 'IIn9KAG7Nv4Ql7rmmk48S9YNChRd1Cnb',
token_type: 'Bearer',
expires_in: 3599,
refresh_token: 'T1mvGBjFLAIBzB7IJkB2ynwGzpB8rtos',
scope: 'smartRead' }
[12/20/2016, 12:38:21 PM] [Ecobee] Authorization successful :-)
[12/20/2016, 12:38:21 PM] [Ecobee] Updating sensors with fresh data...
[12/20/2016, 12:38:21 PM] [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 IIn9KAG7Nv4Ql7rmmk48S9YNChRd1Cnb',
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/20/2016, 12:38:21 PM] [Ecobee] { page: { page: 1, totalPages: 1, pageSize: 2, total: 2 },
thermostatList:
[ { identifier: '170767287984',
name: 'Main Ecobee',
thermostatRev: '161209001813',
isRegistered: true,
modelNumber: 'idtSmart',
brand: 'ecobee',
features: '',
lastModified: '2016-12-09 00:18:13',
thermostatTime: '2016-12-20 12:38:21',
utcTime: '2016-12-20 17:38:21',
remoteSensors: [Object] },
{ identifier: '312901931683',
name: 'Upstairs Ecobee',
thermostatRev: '161220163053',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-20 16:30:53',
thermostatTime: '2016-12-20 12:38:21',
utcTime: '2016-12-20 17:38:21',
remoteSensors: [Object] } ],
status: { code: 0, message: '' } }
[12/20/2016, 12:38:21 PM] [Ecobee] Update sensors
[12/20/2016, 12:38:21 PM] [Ecobee] Setting values of sensors...
[12/20/2016, 12:38:21 PM] [Ecobee] Create | | undefined
/usr/local/lib/node_modules/homebridge/lib/platformAccessory.js:15
if (!displayName) throw new Error("Accessories must be created with a non-empty displayName.");
^
Error: Accessories must be created with a non-empty displayName.
at new PlatformAccessory (/usr/local/lib/node_modules/homebridge/lib/platformAccessory.js:15:27)
at EcobeePlatform.sensors (/usr/local/lib/node_modules/homebridge-ecobee3-sensors/source/platform.js:235:33)
at EcobeePlatform.<anonymous> (/usr/local/lib/node_modules/homebridge-ecobee3-sensors/source/platform.js:187:16)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
files:~ sadmin$
Thanks for the logs. I think I know what's happening.
You have some other thermostat that's not an Ecobee 3 (Smart Si?). The plugin is trying to get it's sensors and there are none...
I just have an Ecobee 3 so this scenario is hard to test for me. Let me do some tests and get back to you.
YES. You are good!!
I ALSO have an Ecobee 2 which does give temp data in the app but not Homekit.
So if we can ignore that it can fix. If you want to get it working, I could work with you to test.
I've created a temporary fix for you here: platform.zip. Can you replace your platform.js
with the fixed one? Based on your logs, you have to overwrite /usr/local/lib/node_modules/homebridge-ecobee3-sensors/source/platform.js
and you'll probably need root
permissions.
Hopefully this should run for you. I've added a check around line 200, that ignores other thermostats than Ecobee 3 and prints the remoteSensor
object of the SmartSi the plugin is having trouble with:
if (thermostatConfig.modelNumber != 'athenaSmart') {
this.log.debug("<<< Start SmartSi Sensors Object >>>");
this.log.debug(thermostatConfig.remoteSensors)
this.log.debug("<<< End SmartSi Sensors Object >>>");
continue
}
If it runs can you, please, post the section of the log between <<< Start SmartSi Sensors Object >>>
and <<< End SmartSi Sensors Object >>>
? This will help me to write a permanent fix and hopefully include the temperature from the SmartSi as one of the sensors.
I ran it and tried to get back in a second time but now everytime it asks me to re-authenticate. I did replace the Platform.js and had to change permissions to match the old one.
Its been a long day but I just cant find the strings you are having me look for....
Last login: Tue Dec 20 15:54:28 on ttys000
files:~ sadmin$ homebridge
[12/20/2016, 4:02:41 PM] Loaded plugin: homebridge-ecobee3-sensors
Homebridge API version: 2.1
[12/20/2016, 4:02:41 PM] Registering platform 'homebridge-ecobee3-sensors.Ecobee 3 Sensors'
[12/20/2016, 4:02:41 PM] ---
[12/20/2016, 4:02:41 PM] Loaded plugin: homebridge-harmonyhub
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-harmonyhub.HarmonyHub'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:42 PM] Loaded plugin: homebridge-isy-js
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-isy-js.isy-js'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:42 PM] Loaded plugin: homebridge-legacy-plugins
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.AD2USB'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.Carwings'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.ELKM1'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.FileSensor'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.GenericRS232Device'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.HomeMatic'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.HomeMaticThermo'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.HomeMaticWindow'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.HttpGarageDoorOpener'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.HttpHygrometer'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.HttpThermometer'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.Tesla'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.X10'
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-legacy-plugins.mpdclient'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.Domoticz'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.HomeAssistant'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.HomeSeer'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.ISY'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.LIFx'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.SmartThings'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.TelldusLive'
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-legacy-plugins.ZWayServer'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:42 PM] Loaded plugin: homebridge-lockitron
[12/20/2016, 4:02:42 PM] Registering accessory 'homebridge-lockitron.Lockitron'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:42 PM] Loaded plugin: homebridge-netatmo
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-netatmo.netatmo'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:42 PM] Loaded plugin: homebridge-platform-wemo
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-platform-wemo.BelkinWeMo'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:42 PM] Loaded plugin: homebridge-server
[12/20/2016, 4:02:42 PM] Registering platform 'homebridge-server.Server'
[12/20/2016, 4:02:42 PM] ---
[12/20/2016, 4:02:43 PM] Loaded plugin: homebridge-wemo
[12/20/2016, 4:02:43 PM] Registering accessory 'homebridge-wemo.WeMo'
[12/20/2016, 4:02:43 PM] ---
[12/20/2016, 4:02:43 PM] Loaded config.json with 2 accessories and 4 platforms.
[12/20/2016, 4:02:43 PM] ---
[12/20/2016, 4:02:43 PM] Loading 4 platforms...
[12/20/2016, 4:02:43 PM] [Ecobee] Initializing Ecobee 3 Sensors platform...
[12/20/2016, 4:02:43 PM] [WeMo Platform] Initializing BelkinWeMo platform...
[12/20/2016, 4:02:43 PM] [ISY] Initializing isy-js platform...
[12/20/2016, 4:02:43 PM] [netatmo platform] Initializing netatmo platform...
[12/20/2016, 4:02:43 PM] [netatmo platform] Creating NetatmoPlatform...
[12/20/2016, 4:02:43 PM] Loading 2 accessories...
[12/20/2016, 4:02:43 PM] [Front Door] Initializing Lockitron accessory...
[12/20/2016, 4:02:43 PM] [Back Door] Initializing Lockitron accessory...
Load homebridge-harmonyhub.HarmonyHub
[12/20/2016, 4:02:43 PM] [homebridge-harmonyhub.HarmonyHub] Ignoring Harmony Platform setup because it is not configured
[12/20/2016, 4:02:43 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:02:43 PM] [Ecobee] These are the steps authorize this application to access your Ecobee 3:
[12/20/2016, 4:02:43 PM] [Ecobee] 1. Go to https://www.ecobee.com/home/ecobeeLogin.jsp
[12/20/2016, 4:02:43 PM] [Ecobee] 2. Login to your thermostat console
[12/20/2016, 4:02:43 PM] [Ecobee] 3. Select 'MY APPS' from the menu on the top right.
[12/20/2016, 4:02:43 PM] [Ecobee] 4. Click 'Add Application'
[12/20/2016, 4:02:43 PM] [Ecobee] 5. Enter the following authorization code:
[12/20/2016, 4:02:43 PM] [Ecobee] ┌──────┐
[12/20/2016, 4:02:43 PM] [Ecobee] │ evav │
[12/20/2016, 4:02:43 PM] [Ecobee] └──────┘
[12/20/2016, 4:02:43 PM] [Ecobee] 6. Wait a moment.
[12/20/2016, 4:02:44 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation device 70:ee:50:02:72:48 (MACWeather Kitchen- Main)
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation module 03:00:00:00:df:88 (MACWeather Tucker/Ashton)
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation module 05:00:00:01:37:7a (MACWeather Rain Gauge)
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation module 03:00:00:00:de:fa (MACWeather Basement)
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation module 03:00:00:00:e5:52 (MACWeather Sunroom)
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation module 02:00:00:02:7d:88 (MACWeather Outdoor)
[12/20/2016, 4:02:44 PM] [netatmo platform] refreshing weatherstation module 06:00:00:00:dd:de (MACWeather Wind Gauge)
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Kitchen- Main'...
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Tucker/Ashton'...
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Rain Gauge'...
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Basement'...
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Sunroom'...
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Outdoor'...
[12/20/2016, 4:02:44 PM] [netatmo platform] Initializing platform accessory 'MACWeather Wind Gauge'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Fade Down'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Fade Up'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'First'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Christmas Outdoor'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Deck Post Switch'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Middle'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Third'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Village Fountain'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Security DVR'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Cable Modem'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Deck Lights'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Aquariums All'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Hot Tub Lights'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Pool and Playset All'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Garage Lights'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Village All'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Front Porch Lights'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Attic ALL Switches'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Lantern Lights'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Stereo'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Driveway'...
[12/20/2016, 4:02:46 PM] [ISY] Initializing platform accessory 'Patio Lights'...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
┌────────────┐
│ 031-45-154 │
└────────────┘
[12/20/2016, 4:02:46 PM] Homebridge is running on port 51826.
[12/20/2016, 4:03:13 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:03:13 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:03:15 PM] [Ecobee] Authorization successful :-)
[12/20/2016, 4:03:15 PM] [Ecobee] Update sensors
[12/20/2016, 4:03:15 PM] [Ecobee] Create | | undefined
/usr/local/lib/node_modules/homebridge/lib/platformAccessory.js:15
if (!displayName) throw new Error("Accessories must be created with a non-empty displayName.");
^
Error: Accessories must be created with a non-empty displayName.
at new PlatformAccessory (/usr/local/lib/node_modules/homebridge/lib/platformAccessory.js:15:27)
at EcobeePlatform.sensors (/usr/local/lib/node_modules/homebridge-ecobee3-sensors/source/platform.js:241:33)
at EcobeePlatform.<anonymous> (/usr/local/lib/node_modules/homebridge-ecobee3-sensors/source/platform.js:187:16)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
files:~ sadmin$
Oh.. Damn it... Sorry. I did send you a wrong version. That one had equal (==
) in place of not equal (!=
). Here's the correct one: platform.zip.
I'm sorry once more.
PS: Did you run in debug mode like before? homebridge -D
it seems to have worked......I am sending more then you asked for here but this is everything after the 30 second delay.
[12/20/2016, 4:49:55 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 4:50:22 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:50:22 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:50:26 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 4:50:26 PM] [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=zoB9nOc1FI9GdEHXOf7apZBUxOkVxgTE\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/20/2016, 4:50:26 PM] [Ecobee] { error: 'authorization_pending',
error_description: 'Waiting for user to authorize application.',
error_uri: 'https://tools.ietf.org/html/rfc6749#section-5.2' }
[12/20/2016, 4:50:26 PM] [Ecobee] Waiting for user to authorize application. Retrying in 30 seconds.
[12/20/2016, 4:50:52 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:50:52 PM] [WeMo Platform] Not Supported: AirPurifier [urn:Belkin:device:AirPurifier:1]
[12/20/2016, 4:50:57 PM] [Ecobee] Authorizing plugin to access the thermostat...
[12/20/2016, 4:50:57 PM] [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=zoB9nOc1FI9GdEHXOf7apZBUxOkVxgTE\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/20/2016, 4:50:57 PM] [Ecobee] { access_token: '6j91U6XEsyQJnc2pTMwvV6CImc1QOL4n',
token_type: 'Bearer',
expires_in: 3599,
refresh_token: 'QzNQwdXoNYokR336lIiMHoaTHNVXj02n',
scope: 'smartRead' }
[12/20/2016, 4:50:57 PM] [Ecobee] Authorization successful :-)
[12/20/2016, 4:50:57 PM] [Ecobee] Updating sensors with fresh data...
[12/20/2016, 4:50:57 PM] [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 6j91U6XEsyQJnc2pTMwvV6CImc1QOL4n',
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/20/2016, 4:50:57 PM] [Ecobee] { page: { page: 1, totalPages: 1, pageSize: 2, total: 2 },
thermostatList:
[ { identifier: '170767287984',
name: 'Main Ecobee',
thermostatRev: '161209001813',
isRegistered: true,
modelNumber: 'idtSmart',
brand: 'ecobee',
features: '',
lastModified: '2016-12-09 00:18:13',
thermostatTime: '2016-12-20 16:50:57',
utcTime: '2016-12-20 21:50:57',
remoteSensors: [Object] },
{ identifier: '312901931683',
name: 'Upstairs Ecobee',
thermostatRev: '161220210001',
isRegistered: true,
modelNumber: 'athenaSmart',
brand: 'ecobee',
features: 'HomeKit',
lastModified: '2016-12-20 21:00:01',
thermostatTime: '2016-12-20 16:50:57',
utcTime: '2016-12-20 21:50:57',
remoteSensors: [Object] } ],
status: { code: 0, message: '' } }
[12/20/2016, 4:50:57 PM] [Ecobee] Update sensors
[12/20/2016, 4:50:57 PM] [Ecobee] Setting values of sensors...
[12/20/2016, 4:50:57 PM] [Ecobee] <<< Start SmartSi Sensors Object >>>
[12/20/2016, 4:50:57 PM] [Ecobee] [ { id: 'ei:0:1',
name: '',
type: 'monitor_sensor',
inUse: false,
capability: [ [Object] ] },
{ id: 'ei:0:2',
name: '',
type: 'monitor_sensor',
inUse: false,
capability: [ [Object] ] } ]
[12/20/2016, 4:50:57 PM] [Ecobee] <<< End SmartSi Sensors Object >>>
[12/20/2016, 4:50:57 PM] [Ecobee] Create | Tuckers Room | RJC6
[12/20/2016, 4:50:57 PM] [Ecobee] [Tuckers Room] Initializing sensor...
[12/20/2016, 4:50:57 PM] [Ecobee] { id: 'rs:100',
name: 'Tuckers Room',
type: 'ecobee3_remote_sensor',
code: 'RJC6',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '720' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:57 PM] [Ecobee] [Tuckers Room] Initialized | RJC6
[12/20/2016, 4:50:57 PM] [Ecobee] [Tuckers Room] Updating sensor measurement...
[12/20/2016, 4:50:57 PM] [Ecobee] { id: 'rs:100',
name: 'Tuckers Room',
type: 'ecobee3_remote_sensor',
code: 'RJC6',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '720' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:57 PM] [Ecobee] [Tuckers Room] Vacant | 22.2°C
[12/20/2016, 4:50:57 PM] [Ecobee] Create | Guest Room | V7NR
[12/20/2016, 4:50:57 PM] [Ecobee] [Guest Room] Initializing sensor...
[12/20/2016, 4:50:57 PM] [Ecobee] { id: 'rs:101',
name: 'Guest Room',
type: 'ecobee3_remote_sensor',
code: 'V7NR',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '678' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:57 PM] [Ecobee] [Guest Room] Initialized | V7NR
[12/20/2016, 4:50:57 PM] [Ecobee] [Guest Room] Updating sensor measurement...
[12/20/2016, 4:50:57 PM] [Ecobee] { id: 'rs:101',
name: 'Guest Room',
type: 'ecobee3_remote_sensor',
code: 'V7NR',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '678' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:57 PM] [Ecobee] [Guest Room] Vacant | 19.9°C
[12/20/2016, 4:50:57 PM] [Ecobee] Create | Sitting Room | V45K
[12/20/2016, 4:50:57 PM] [Ecobee] [Sitting Room] Initializing sensor...
[12/20/2016, 4:50:57 PM] [Ecobee] { id: 'rs:102',
name: 'Sitting Room',
type: 'ecobee3_remote_sensor',
code: 'V45K',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '714' },
{ id: '2', type: 'occupancy', value: 'true' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Sitting Room] Initialized | V45K
[12/20/2016, 4:50:58 PM] [Ecobee] [Sitting Room] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:102',
name: 'Sitting Room',
type: 'ecobee3_remote_sensor',
code: 'V45K',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '714' },
{ id: '2', type: 'occupancy', value: 'true' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Sitting Room] Occupied | 21.9°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Theater | TY9Z
[12/20/2016, 4:50:58 PM] [Ecobee] [Theater] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:103',
name: 'Theater',
type: 'ecobee3_remote_sensor',
code: 'TY9Z',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '714' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Theater] Initialized | TY9Z
[12/20/2016, 4:50:58 PM] [Ecobee] [Theater] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:103',
name: 'Theater',
type: 'ecobee3_remote_sensor',
code: 'TY9Z',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '714' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Theater] Vacant | 21.9°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Basement | VC2V
[12/20/2016, 4:50:58 PM] [Ecobee] [Basement] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:104',
name: 'Basement',
type: 'ecobee3_remote_sensor',
code: 'VC2V',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '680' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Basement] Initialized | VC2V
[12/20/2016, 4:50:58 PM] [Ecobee] [Basement] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:104',
name: 'Basement',
type: 'ecobee3_remote_sensor',
code: 'VC2V',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '680' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Basement] Vacant | 20.0°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Upstairs Ecobee | 312901931683
[12/20/2016, 4:50:58 PM] [Ecobee] [Upstairs Ecobee] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'ei:0',
name: 'Upstairs Ecobee',
type: 'thermostat',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '723' },
{ id: '2', type: 'humidity', value: '35' },
{ id: '3', type: 'occupancy', value: 'true' } ],
code: '312901931683' }
[12/20/2016, 4:50:58 PM] [Ecobee] [Upstairs Ecobee] Initialized | 312901931683
[12/20/2016, 4:50:58 PM] [Ecobee] [Upstairs Ecobee] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'ei:0',
name: 'Upstairs Ecobee',
type: 'thermostat',
inUse: true,
capability:
[ { id: '1', type: 'temperature', value: '723' },
{ id: '2', type: 'humidity', value: '35' },
{ id: '3', type: 'occupancy', value: 'true' } ],
code: '312901931683' }
[12/20/2016, 4:50:58 PM] [Ecobee] [Upstairs Ecobee] Occupied | 35% | 22.4°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Office | QCBF
[12/20/2016, 4:50:58 PM] [Ecobee] [Office] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:105',
name: 'Office',
type: 'ecobee3_remote_sensor',
code: 'QCBF',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '732' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Office] Initialized | QCBF
[12/20/2016, 4:50:58 PM] [Ecobee] [Office] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:105',
name: 'Office',
type: 'ecobee3_remote_sensor',
code: 'QCBF',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '732' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Office] Vacant | 22.9°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Kitchen | QF6H
[12/20/2016, 4:50:58 PM] [Ecobee] [Kitchen] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:106',
name: 'Kitchen',
type: 'ecobee3_remote_sensor',
code: 'QF6H',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '707' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Kitchen] Initialized | QF6H
[12/20/2016, 4:50:58 PM] [Ecobee] [Kitchen] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:106',
name: 'Kitchen',
type: 'ecobee3_remote_sensor',
code: 'QF6H',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '707' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Kitchen] Vacant | 21.5°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Living Room | VQR5
[12/20/2016, 4:50:58 PM] [Ecobee] [Living Room] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:107',
name: 'Living Room',
type: 'ecobee3_remote_sensor',
code: 'VQR5',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '707' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Living Room] Initialized | VQR5
[12/20/2016, 4:50:58 PM] [Ecobee] [Living Room] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:107',
name: 'Living Room',
type: 'ecobee3_remote_sensor',
code: 'VQR5',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '707' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Living Room] Vacant | 21.5°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Great Room | VQS4
[12/20/2016, 4:50:58 PM] [Ecobee] [Great Room] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:108',
name: 'Great Room',
type: 'ecobee3_remote_sensor',
code: 'VQS4',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '716' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Great Room] Initialized | VQS4
[12/20/2016, 4:50:58 PM] [Ecobee] [Great Room] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:108',
name: 'Great Room',
type: 'ecobee3_remote_sensor',
code: 'VQS4',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '716' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Great Room] Vacant | 22.0°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Ashtons Room | V32S
[12/20/2016, 4:50:58 PM] [Ecobee] [Ashtons Room] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:109',
name: 'Ashtons Room',
type: 'ecobee3_remote_sensor',
code: 'V32S',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '718' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Ashtons Room] Initialized | V32S
[12/20/2016, 4:50:58 PM] [Ecobee] [Ashtons Room] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:109',
name: 'Ashtons Room',
type: 'ecobee3_remote_sensor',
code: 'V32S',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '718' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Ashtons Room] Vacant | 22.1°C
[12/20/2016, 4:50:58 PM] [Ecobee] Create | Sunroom | V32W
[12/20/2016, 4:50:58 PM] [Ecobee] [Sunroom] Initializing sensor...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:110',
name: 'Sunroom',
type: 'ecobee3_remote_sensor',
code: 'V32W',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '689' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Sunroom] Initialized | V32W
[12/20/2016, 4:50:58 PM] [Ecobee] [Sunroom] Updating sensor measurement...
[12/20/2016, 4:50:58 PM] [Ecobee] { id: 'rs:110',
name: 'Sunroom',
type: 'ecobee3_remote_sensor',
code: 'V32W',
inUse: false,
capability:
[ { id: '1', type: 'temperature', value: '689' },
{ id: '2', type: 'occupancy', value: 'false' } ] }
[12/20/2016, 4:50:58 PM] [Ecobee] [Sunroom] Vacant | 20.5°C
[12/20/2016, 4:50:58 PM] [Ecobee] Cleaning unused cached Homebridge accessories...
[12/20/2016, 4:50:58 PM] [Ecobee] {}
[12/20/2016, 4:50:58 PM] [Ecobee] Wait | 30 seconds
[12/20/2016, 4:50:58 PM] [Ecobee] Refreshing tokens...
[12/20/2016, 4:50:58 PM] [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=QzNQwdXoNYokR336lIiMHoaTHNVXj02n&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/20/2016, 4:50:58 PM] [Ecobee] { access_token: 'XjWETe0Iq9fSJ31s1qp7JcETRgVVy9oo',
token_type: 'Bearer',
expires_in: 3599,
refresh_token: 'OQFH3IPYoezoRowhJmukwM7Gqoqoe8h0',
scope: 'smartRead' }
[12/20/2016, 4:50:58 PM] [Ecobee] Tokens
When I run it again without the -D (either way)
It shows a list of all my ecobee devices but then goes back into the waiting to authorize. Is that normal?
so what do I ask Alexa now to get the temp or the status (occupancy) of each room? when I ask temperature in any room it tells me the temperature and weather for my town.....also I noticed all the logs are showing Celcius. Any way to get Fahrenheit.
I think the de-authorization problems are caused by the earlier crashes. Some old authorization tokens are stored somewhere they shouldn't be. Try to delete your ~/.homebridge/accesories/
and ~/.homebridge/persist/
folders. The authorization should happen only once at the very beginning. Deauthorization is also a frequent side effect when running under a different users. There's more details about it in the discussion in #10.
I'll commit the fix to the SmartSi empty displayName
issue once I get back from the Christmas vacation. SmartSi doesn't seem to report it's temperature as a sensor, so I'll simply ignore it as was posted above and print a warning.
As far as Alexa goes I've got no clue since I don't use it.
You can also use Siri. It's quite simple and there are no special tricks "What's the temperature in the kitchen?" works perfectly for me. Occupation also works i.e. "Is someone in the kitchen?"
Sorry I meant siri. I was working on two projects. one with smartthings and alexa and other with homebridge and siri.
Temperature works. But occupancy says it cant do that or it does not understand.
by the way. all of my other plugins work fine with siri. Seems to be only yours unless I am saying it wrong to siri (but I said your examples) Also you sent a temp fix. will you do a long term one?
Siri can be weird sometimes, but occupancy seems to be working for me.
I am getting this error. I have an Ecobee3 with homekit support but want to get sensor data so using your plugin.
I used your exact sample code. I have about 10 sensors which could be an issue but none have a blank name. Only difference I can see in your examples are that I have a lot more sensors. Unless I have to I would rather not have to deactivate all of them and try 1 x 1
Also after the error when I run it again it thinks its the first run again and I have to deactivate the ecobee app and add it again with the new code.