Honeywell Lyric Thermostat

Yes, for NA it just takes the Away period as default. But you could still override that with Away and Sleep for instance.

Not sure I understand what you mean by “still override that with Away and Sleep for instance”.

If you want it to show away in both the Away and Sleep period.

Ok. I will let you know how the automations work when my wife leaves to pick the kids :slight_smile:

Can we get consolidated install instructions? I get errors unique to me when I piece things together as best as I can interpret and assemble based upon what above. Anything past 0.0.3 fails for me.

Providing the errors might help :wink:

It is very simple:

Place these files
lyric.py
climate/lyric.py
climate/services.yaml
in your custom_components folder.

And put this in your config:

lyric:
  client_id: xxxx
  client_secret: xxxxx

That should be it.

I think you should add these to your readme as well :slight_smile:

Hey ! Just got back to work . @Bram_Kragten Are you saying that the issue what was going on has been resolved ? Or do you still want me to share the Json string for you to look at ?

Let’s find out. Try it, if it works great, if it doesn’t share the error and the data

That did work!! Now I can set the values as well change the different modes

17-08-11 09:41:48 DEBUG (MainThread) [homeassistant.components.websocket_api] WS 4466477376: Sending {‘id’: 2, ‘type’: ‘event’, ‘event’: {‘event_type’: ‘state_changed’, ‘data’: {‘entity_id’: ‘climate.lyric’, ‘old_state’: <state climate.lyric=cool; current_temperature=73, min_temp=40, max_temp=99, temperature=73, operation_mode=cool, operation_list=[‘off’, ‘heat’, ‘cool’, ‘auto’], schedule=None, schedule_sub=None, vacation=None, current_schedule_day=None, current_schedule_period=None, unit_of_measurement=°F, friendly_name=Lyric @ 2017-08-11T09:41:36.442976-07:00>, ‘new_state’: <state climate.lyric=cool; current_temperature=73, min_temp=40, max_temp=99, temperature=66, operation_mode=cool, operation_list=[‘off’, ‘heat’, ‘cool’, ‘auto’], schedule=None, schedule_sub=None, vacation=None, current_schedule_day=None, current_schedule_period=None, unit_of_measurement=°F, friendly_name=Lyric @ 2017-08-11T09:41:36.442976-07:00>}, ‘origin’: ‘LOCAL’, ‘time_fired’: datetime.datetime(2017, 8, 11, 16, 41, 48, 793497, tzinfo=)}}
17-08-11 09:41:48 DEBUG (MainThread) [homeassistant.components.websocket_api] WS 4466598408: Sending {‘id’: 2, ‘type’: ‘event’, ‘event’: {‘event_type’: ‘state_changed’, ‘data’: {‘entity_id’: ‘climate.lyric’, ‘old_state’: <state climate.lyric=cool; current_temperature=73, min_temp=40, max_temp=99, temperature=73, operation_mode=cool, operation_list=[‘off’, ‘heat’, ‘cool’, ‘auto’], schedule=None, schedule_sub=None, vacation=None, current_schedule_day=None, current_schedule_period=None, unit_of_measurement=°F, friendly_name=Lyric @ 2017-08-11T09:41:36.442976-07:00>, ‘new_state’: <state climate.lyric=cool; current_temperature=73, min_temp=40, max_temp=99, temperature=66, operation_mode=cool, operation_list=[‘off’, ‘heat’, ‘cool’, ‘auto’], schedule=None, schedule_sub=None, vacation=None, current_schedule_day=None, current_schedule_period=None, unit_of_measurement=°F, friendly_name=Lyric @ 2017-08-11T09:41:36.442976-07:00>}, ‘origin’: ‘LOCAL’, ‘time_fired’: datetime.datetime(2017, 8, 11, 16, 41, 48, 793497, tzinfo=)}}
17-08-11 09:41:48 DEBUG (MainThread) [homeassistant.components.websocket_api] WS 4471244728: Sending {‘id’: 2, ‘type’: ‘event’, ‘event’: {‘event_type’: ‘state_changed’, ‘data’: {‘entity_id’: ‘climate.lyric’, ‘old_state’: <state climate.lyric=cool; current_temperature=73, min_temp=40, max_temp=99, temperature=73, operation_mode=cool, operation_list=[‘off’, ‘heat’, ‘cool’, ‘auto’], schedule=None, schedule_sub=None, vacation=None, current_schedule_day=None, current_schedule_period=None, unit_of_measurement=°F, friendly_name=Lyric @ 2017-08-11T09:41:36.442976-07:00>, ‘new_state’: <state climate.lyric=cool; current_temperature=73, min_temp=40, max_temp=99, temperature=66, operation_mode=cool, operation_list=[‘off’, ‘heat’, ‘cool’, ‘auto’], schedule=None, schedule_sub=None, vacation=None, current_schedule_day=None, current_schedule_period=None, unit_of_measurement=°F, friendly_name=Lyric @ 2017-08-11T09:41:36.442976-07:00>}, ‘origin’: ‘LOCAL’, ‘time_fired’: datetime.datetime(2017, 8, 11, 16, 41, 48, 793497, tzinfo=)}}
17-08-11 09:41:48 INFO (MainThread) [homeassistant.core] Bus:Handling <Event service_executed[L]: service_call_id=4385765696-3>
17-08-11 09:41:48 DEBUG (MainThread) [homeassistant.components.websocket_api] WS 4466477376: Sending {‘id’: 12, ‘type’: ‘result’, ‘success’: True, ‘result’: None}

Followed the instructions above, deleted lyric.conf, reauthorized…

2017-08-11 13:20:28 DEBUG (Thread-5) [custom_components.lyric] proceeding with discovery of platforms
2017-08-11 13:20:28 DEBUG (Thread-5) [custom_components.lyric] setup done of component
2017-08-11 13:20:28 DEBUG (Thread-7) [custom_components.climate.lyric] climate discovery_info: OrderedDict([('client_id', 'redacted'), ('client_secret', 'redacted'), ('fan', False)])
2017-08-11 13:20:28 DEBUG (Thread-7) [custom_components.climate.lyric] climate config: {}
2017-08-11 13:20:28 DEBUG (Thread-7) [custom_components.climate.lyric] Set up Lyric climate platform
2017-08-11 13:20:28 DEBUG (Thread-7) [custom_components.climate.lyric] away periods: []
2017-08-11 13:20:28 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/lib/python3.4/asyncio/tasks.py", line 233, in _step
    result = coro.throw(exc)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/helpers/entity_component.py", line 381, in async_process_entity
    new_entity, self, update_before_add=update_before_add
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/helpers/entity_component.py", line 212, in async_add_entity
yield from self.hass.async_add_job(entity.update)
  File "/usr/lib/python3.4/asyncio/futures.py", line 388, in __iter__
    yield self  # This tells Task to wait for completion.
  File "/usr/lib/python3.4/asyncio/tasks.py", line 286, in _wakeup
    value = future.result()
  File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
    raise self._exception
  File "/usr/lib/python3.4/concurrent/futures/thread.py", line 54, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/homeassistant/.homeassistant/custom_components/climate/lyric.py", line 308, in update
    self._vacationHold = self.device.vacationHold
  File "/srv/homeassistant/lib/python3.4/site-packages/lyric/__init__.py", line 459, in vacationHold
    return self._lyric_api._device(self._locationId, self._deviceId)['vacationHold']['enabled']
KeyError: 'vacationHold'

Yes I had the same issue…since those files are not in the son string , thats why its throwing an issue. Please commend out the lines
# self._vacationHold = self.device.vacationHold
# self._currentSchedulePeriod = self.device.currentSchedulePeriod[‘period’]
# self._currentSchedulePeriodDay = self.device.currentSchedulePeriod[‘day’]

and that should solve the issue

So you probably have a Lyric Round?

Please, can someone share the JSON string of a round?

{
‘settings’: {
‘homeSetPoints’: {
‘homeHeatSP’: 70,
‘homeCoolSP’: 78,
‘units’: ‘Fahrenheit’
},
‘awaySetPoints’: {
‘awayHeatSP’: 62,
‘awayCoolSP’: 85,
‘smartCoolSP’: 80,
‘smartHeatSP’: 55,
‘useAutoSmart’: True,
‘units’: ‘Fahrenheit’
},
‘hardwareSettings’: {
‘brightness’: 10,
‘volume’: 5,
‘maxBrightness’: 10,
‘maxVolume’: 10
},
‘fan’: {
‘allowedModes’: [‘Auto’, ‘On’, ‘Circulate’],
‘changeableValues’: {
‘mode’: ‘Circulate’
},
‘fanRunning’: True
},
‘temperatureMode’: {
‘feelsLike’: True,
‘air’: True
},
‘specialMode’: {
‘autoChangeoverActive’: False
}
},
‘isAlive’: True,
‘isUpgrading’: False,
‘macID’: ‘00D02D976572’,
‘thermostatVersion’: ‘02.02.20.00’,
‘scheduleStatus’: ‘Resume’,
‘allowedTimeIncrements’: 15,
‘deviceClass’: ‘Thermostat’,
‘deviceType’: ‘Thermostat’,
‘deviceID’: ‘TCC-2494541’,
‘userDefinedDeviceName’: ‘Lyric’,
‘name’: ‘Lyric’,
‘schedule’: {
‘scheduleType’: ‘Geofence’
},
‘isProvisioned’: False,
‘deviceSettings’: {},
‘units’: ‘Fahrenheit’,
‘indoorTemperature’: 75,
‘outdoorTemperature’: 81,
‘allowedModes’: [‘Cool’, ‘Heat’, ‘Off’],
‘deadband’: 0,
‘hasDualSetpointStatus’: False,
‘minHeatSetpoint’: 40,
‘maxHeatSetpoint’: 99,
‘minCoolSetpoint’: 40,
‘maxCoolSetpoint’: 99,
‘changeableValues’: {
‘mode’: ‘Cool’,
‘autoChangeoverActive’: False,
‘heatSetpoint’: 55,
‘coolSetpoint’: 71,
‘heatCoolMode’: ‘Cool’
},
‘operationStatus’: {
‘mode’: ‘Cool’
},
‘smartAway’: {
‘active’: False,
‘timeOfDay’: ‘00:00:00’,
‘durationInHours’: 2,
‘durationInDays’: 0,
‘lastUsedFormat’: ‘TimeOfDay’,
‘endsIn’: ‘2000-01-01T00:00:00-08:00’
},
‘indoorHumidity’: 54,
‘indoorHumidityStatus’: ‘Measured’
}

An update is ready for you to try, please let me know if it works.

Just to to confirm…the home and away automations work perfectly. I can now change the setpoint when everyone is away and resume schedule when we are home.

1 Like

First I fixed this by hand:

2017-08-11 16:37:30 ERROR (MainThread) [homeassistant.setup] Error during setup of component lyric
Traceback (most recent call last):
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/setup.py", line 194, in _async_setup_component
    component.setup, hass, processed_config)
  File "/usr/lib/python3.4/asyncio/futures.py", line 388, in __iter__
    yield self  # This tells Task to wait for completion.
  File "/usr/lib/python3.4/asyncio/tasks.py", line 286, in _wakeup
    value = future.result()
  File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
    raise self._exception
  File "/usr/lib/python3.4/concurrent/futures/thread.py", line 54, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/homeassistant/.homeassistant/custom_components/lyric.py", line 118, in setup
    import lyric
  File "/srv/homeassistant/lib/python3.4/site-packages/lyric/__init__.py", line 703
    elif 'schedule' in self._lyric_api._device(self._locationId, self._deviceId) and 'scheduleType' in self._lyric_api._device(self._locationId, self._deviceId)['schedule']:
                                                                                                                                                                            ^
TabError: inconsistent use of tabs and spaces in indentation

Moving on I then got this:

2017-08-11 16:40:59 DEBUG (Thread-8) [custom_components.lyric] proceeding with discovery of platforms
2017-08-11 16:40:59 DEBUG (Thread-8) [custom_components.lyric] setup done of component
2017-08-11 16:40:59 DEBUG (Thread-2) [custom_components.climate.lyric] climate discovery_info: OrderedDict([('client_id', 'REDACTED'), ('client_secret', 'REDACTED'), ('fan', False)])
2017-08-11 16:40:59 DEBUG (Thread-2) [custom_components.climate.lyric] climate config: {}
2017-08-11 16:40:59 DEBUG (Thread-2) [custom_components.climate.lyric] Set up Lyric climate platform
2017-08-11 16:40:59 DEBUG (Thread-2) [custom_components.climate.lyric] away periods: []
2017-08-11 16:40:59 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/lib/python3.4/asyncio/tasks.py", line 237, in _step
    result = next(coro)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/helpers/entity_component.py", line 381, in async_process_entity
    new_entity, self, update_before_add=update_before_add
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/helpers/entity_component.py", line 238, in async_add_entity
    yield from entity.async_update_ha_state()
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/helpers/entity.py", line 247, in async_update_ha_state
    device_attr = self.device_state_attributes
  File "/home/homeassistant/.homeassistant/custom_components/climate/lyric.py", line 284, in device_state_attributes
    "current_schedule_day": self._currentSchedulePeriodDay,
AttributeError: 'LyricThermostat' object has no attribute '_currentSchedulePeriodDay'

Fixed both

1 Like

It works! In quick testing the temperature change finally functions, but away mode does not.

2017-08-11 17:34:10 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/lib/python3.4/asyncio/tasks.py", line 233, in _step
    result = coro.throw(exc)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/core.py", line 1025, in _event_to_service_call
    yield from service_handler.func(service_call)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/components/climate/__init__.py", line 256, in async_away_mode_set_service
    yield from climate.async_turn_away_mode_on()
  File "/usr/lib/python3.4/asyncio/futures.py", line 388, in __iter__
    yield self  # This tells Task to wait for completion.
  File "/usr/lib/python3.4/asyncio/tasks.py", line 286, in _wakeup
    value = future.result()
  File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
    raise self._exception
  File "/usr/lib/python3.4/concurrent/futures/thread.py", line 54, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/components/climate/__init__.py", line 628, in turn_away_mode_on
    raise NotImplementedError()
NotImplementedError

I keep seeing Away mode being off. Not my understanding of Away mode. Away mode is the setback temperature if no one is home. If I am not home, allow the temperature to go up to a certain point before turning on the AC or let the temperature drop to a certain point before turning on the heat.