Honeywell Lyric Thermostat

Ok…that worked :slight_smile:

Couple of things:

The temperature 16-28 F is probably in celcius. The Target temperature slider also seems to be in celcius.

Mmm yeah, that’s the away setting, haven’t completely thought out how to deal with that and the lyric. It’s hard coded for now… Will change that.

Are you away right now? Or is your geofence off?

No geofence. It is on scheduled away (the thermostat is in the bedroom, so I put it to Away mode during the day; may be should change that).

Couple of comments on the code:
Are you sure T5 provides the humidity information? I guess, it may still be fine to keep it just in case future models provide humidity information.

Why do you specify self._eco_temperature = [16, 28]?

The T5 does not, the Round does. Should make it conditional.

The eco_temperature should be changed, haven’t found a way to activate the away mode without turning geofence off. So will have to set it to a temperature or something, but the API does not return the temperature setting for away mode unfortunately.

Haven’t looked at all at scheduling and what the API does then, since I do use geofence, will look in to that tomorrow.

The fan has to be implemented as well still (again not supported here) but again no clear signal from the API I don’t have a fan.

Dual setpoints is another one I have to look in to…

This is a great start and look forward to further improvements :slight_smile:

Great work!

Thank you! I got everything running last night. I didn’t have much time to play around with it, but the component was reporting all the proper temperatures and status. Ill tinker with it some more tonight to try to get you some better feedback.

I pushed a quick update that should fix most of the problems you had @arsaboo

Yeah…the temperature issue is gone :thumbsup:

I tried to set away mode true using developer tool using {"away_mode": "true","entity_id": "climate.lyric"} and using the switch on the card, but none of them worked. Also, wondering which services are working?

What would you like the away mode to do? Set a temperature until you turn the away mode off?

There’s not an away mode in the lyric that can be changed, so we should think what we want it to do.

Right now it is read only and only works in geofence mode.

Given that Honeywell schedule uses 4 modes Wake, Away, Home, and Sleep, wondering if it is possible to use the Away settings for the away mode.

Yours might be different from mine, but if I make a schedule I can only make time blocks (as many as I want) so I don’t have an away setting…, would you mind sharing the JSON from the API? You can find it here:

https://developer.honeywell.com/lyric/apis/get/locations

Just enter your Client Id and press the authenticate button.

HTTP/1.1 200 OK
Cache-Control:
no-cache
Connection:
keep-alive
Content-Length:
3851
Content-Type:
application/json
Date:
Wed, 01 Feb 2017 19:01:56 GMT
Expires:
-1
Pragma:
no-cache
Server:
Microsoft-IIS/8.5
X-AspNet-Version:
4.0.30319
X-Powered-By:
ASP.NET
[
  {
    "locationID": REDACTED,
    "name": "Home",
    "streetAddress": "REDACTED",
    "city": "REDACTED",
    "state": "GA",
    "country": "Usa",
    "zipcode": "REDACTED",
    "devices": [
      {
        "displayedOutdoorHumidity": 51,
        "vacationHold": {
          "enabled": false
        },
        "currentSchedulePeriod": {
          "day": "Monday",
          "period": "Away"
        },
        "scheduleCapabilities": {
          "availableScheduleTypes": [
            "None",
            "Geofenced",
            "TimedNorthAmerica"
          ],
          "schedulableFan": false
        },
        "scheduleType": {
          "scheduleType": "Timed",
          "scheduleSubType": "NA"
        },
        "isAlive": true,
        "isUpgrading": false,
        "macID": "REDACTED",
        "scheduleStatus": "Resume",
        "allowedTimeIncrements": 15,
        "deviceClass": "Thermostat",
        "deviceType": "Thermostat",
        "deviceID": "LCC-00D02DB4DE26",
        "userDefinedDeviceName": "Lyric",
        "name": "Lyric",
        "isProvisioned": true,
        "settings": {
          "hardwareSettings": {
            "brightness": 1,
            "maxBrightness": 5
          },
          "fan": {
            "allowedModes": [
              "On",
              "Auto",
              "Circulate"
            ],
            "changeableValues": {
              "mode": "Auto"
            }
          },
          "temperatureMode": {
            "air": true
          },
          "specialMode": {
            "autoChangeoverActive": true
          }
        },
        "deviceSettings": {},
        "units": "Fahrenheit",
        "indoorTemperature": 71,
        "outdoorTemperature": 64,
        "allowedModes": [
          "Heat",
          "Off",
          "Cool",
          "Auto"
        ],
        "deadband": 0,
        "hasDualSetpointStatus": false,
        "minHeatSetpoint": 50,
        "maxHeatSetpoint": 80,
        "minCoolSetpoint": 65,
        "maxCoolSetpoint": 90,
        "changeableValues": {
          "mode": "Heat",
          "autoChangeoverActive": true,
          "heatSetpoint": 66,
          "coolSetpoint": 83,
          "thermostatSetpointStatus": "NoHold",
          "nextPeriodTime": "20:00:00",
          "endHeatSetpoint": 66,
          "endCoolSetpoint": 83,
          "heatCoolMode": "Heat"
        },
        "operationStatus": {
          "mode": "EquipmentOff",
          "fanRequest": false,
          "circulationFanRequest": false
        }
      }
    ],
    "users": [
      {
        "userID": 90486,
        "username": "REDACTED",
        "firstname": "Alok",
        "lastname": "Saboo",
        "created": 1471442321,
        "deleted": -62135596800,
        "activated": true,
        "connectedHomeAccountExists": true,
        "locationRoleMapping": [
          {
            "locationID": REDACTED,
            "role": "Adult",
            "locationName": "Home",
            "status": 1
          }
        ]
      },
      {
        "userID": 91840,
        "username": "REDACTED",
        "firstname": "REDACTED",
        "lastname": "REDACTED",
        "created": 1472003358,
        "deleted": -62135596800,
        "activated": true,
        "connectedHomeAccountExists": true,
        "locationRoleMapping": [
          {
            "locationID": REDACTED,
            "role": "Adult",
            "locationName": "Home",
            "status": 1
          }
        ]
      }
    ],
    "timeZone": "Eastern",
    "daylightSavingTimeEnabled": true,
    "geoFences": [
      {
        "geoFenceID": 70913,
        "latitude": REDACTED,
        "longitude": REDACTED,
        "radius": 3220,
        "geoOccupancy": {
          "withinFence": 0,
          "outsideFence": 0
        }
      }
    ],
    "geoFenceEnabled": true
  }
]

Ok… that’s different from mine… what does this one give you?

https://developer.honeywell.com/lyric/apis/get/devices/schedule/{deviceId}

Bram, thank you for taking the time to do this.

I am a total HASS n00b, so you’ll have to forgive my ignorance if I am completely stupid.

Has anyone tried this on a round thermostat yet?

I got the files loaded, and got past the request authorization part. That all went well. However, now I am getting an invalid config error.

‘The following components and platforms could not be set up:
climate.lyric’

This could easily be user error, or maybe the round is different?

I am running HASS on a Pi3 with the All in One installer if that helps.

Thanks.

Edit:

Looking at the log file, here is what I see…

File “/home/homeassistant/.homeassistant/custom_components/climate/lyric.py”, line 11, in
from homeassistant.components.lyric import DATA_LYRIC
ImportError: No module named ‘homeassistant.components.lyric’
17-02-01 15:28:07 homeassistant.loader: Unable to find component climate.lyric
17-02-01 15:28:07 homeassistant.bootstrap: Unable to find platform climate.lyric

Hi @smdandb2,

Try placing the components in the components (/srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages/homeassistant/components/) folder instead of the custom_components.

And that was it!

Thank you very much for all your work here! I’m excited to keep an eye on this and see where it goes!

:slight_smile:

Hmm…weird (double checked everything).

HTTP/1.1 400 Bad Request
Cache-Control:
no-cache
Connection:
keep-alive
Content-Length:
72
Content-Type:
application/json
Date:
Thu, 02 Feb 2017 21:45:44 GMT
Expires:
-1
Pragma:
no-cache
Server:
Microsoft-IIS/8.5
X-AspNet-Version:
4.0.30319
X-Powered-By:
ASP.NET
{
  "code": 400,
  "message": "Device Not Found"
}

You have to enter your device id in the url that is above the input fields. Its not very clear.

HTTP/1.1 200 OK
Cache-Control:
no-cache
Connection:
keep-alive
Content-Length:
6409
Content-Type:
application/json; charset=utf-8
Date:
Sat, 04 Feb 2017 14:35:32 GMT
Expires:
-1
Pragma:
no-cache
Server:
Microsoft-IIS/8.5
X-AspNet-Version:
4.0.30319
X-Powered-By:
ASP.NET
{
  "deviceID": "REDACTED",
  "scheduleType": "Timed",
  "scheduleSubType": "NA",
  "timedSchedule": {
    "days": [
      {
        "day": "Monday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "20:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "22:00:00",
            "heatSetPoint": 69,
            "coolSetPoint": 78
          }
        ]
      },
      {
        "day": "Tuesday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "20:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "22:00:00",
            "heatSetPoint": 69,
            "coolSetPoint": 78
          }
        ]
      },
      {
        "day": "Wednesday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "20:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "22:00:00",
            "heatSetPoint": 69,
            "coolSetPoint": 78
          }
        ]
      },
      {
        "day": "Thursday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "20:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "22:00:00",
            "heatSetPoint": 69,
            "coolSetPoint": 78
          }
        ]
      },
      {
        "day": "Friday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "20:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "22:00:00",
            "heatSetPoint": 69,
            "coolSetPoint": 78
          }
        ]
      },
      {
        "day": "Saturday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "22:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "23:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 78
          }
        ]
      },
      {
        "day": "Sunday",
        "periods": [
          {
            "isCancelled": false,
            "periodType": "Wake",
            "startTime": "08:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Away",
            "startTime": "10:00:00",
            "heatSetPoint": 66,
            "coolSetPoint": 83
          },
          {
            "isCancelled": false,
            "periodType": "Home",
            "startTime": "20:00:00",
            "heatSetPoint": 68,
            "coolSetPoint": 79
          },
          {
            "isCancelled": false,
            "periodType": "Sleep",
            "startTime": "22:00:00",
            "heatSetPoint": 69,
            "coolSetPoint": 78
          }
        ]
      }
    ]
  }
}

So I have been working on other HASS things the past few days, but now I am trying to get the thermostat to do a bit more.

Right now, it is basically an information pane. If I try to change anything, nothing happens. HASS says it calls the function, but nothing changes in the thermostat itself.

Is there anything I can provide that would help sort this out?

It’s a round Lyric, and I am in North America.

Thanks.