{"id":18073230,"url":"https://github.com/aspeakman/inspireha","last_synced_at":"2026-04-17T08:06:15.813Z","repository":{"id":259218860,"uuid":"877327938","full_name":"aspeakman/InspireHA","owner":"aspeakman","description":"Control an Inspire Home Automation smart thermostat using the API - includes a Home Assistant pyscript app","archived":false,"fork":false,"pushed_at":"2024-10-25T14:50:58.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T18:16:32.950Z","etag":null,"topics":["hass","home-assistant","inspire","pyscript"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aspeakman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-23T13:20:06.000Z","updated_at":"2024-10-25T15:01:02.000Z","dependencies_parsed_at":"2024-10-23T16:17:31.177Z","dependency_job_id":"0bcef056-c582-467f-b393-c155098701f2","html_url":"https://github.com/aspeakman/InspireHA","commit_stats":null,"previous_names":["aspeakman/inspireha"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aspeakman/InspireHA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aspeakman%2FInspireHA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aspeakman%2FInspireHA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aspeakman%2FInspireHA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aspeakman%2FInspireHA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aspeakman","download_url":"https://codeload.github.com/aspeakman/InspireHA/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aspeakman%2FInspireHA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271732346,"owners_count":24811309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hass","home-assistant","inspire","pyscript"],"created_at":"2024-10-31T10:05:40.018Z","updated_at":"2026-04-17T08:06:15.743Z","avatar_url":"https://github.com/aspeakman.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# InspireHA\n\nIncludes a Python package **inspire_ha** which has modules for controlling an\n[Inspire Home Automation](https://www.inspirehomeautomation.co.uk/) thermostat\nusing their [API](https://www.inspirehomeautomation.co.uk/client/api_help.php). \n\nThe project also includes **inspire_ha_thermostat** a [Pyscript](https://hacs-pyscript.readthedocs.io/en/latest/) Home Assistant app \nwhich synchronises your Inspire device with a [Generic Thermostat](https://www.home-assistant.io/integrations/generic_thermostat/) \nclimate integration (for details see below).\n\n\n## Pre-requisites\n\nYou will need to create a `secrets.yaml` - replace xxxx in the following example - for `api_key`\n see [www.inspirehomeautomation.co.uk/client/api.php](https://www.inspirehomeautomation.co.uk/client/api.php):\n```\nuser_name: \"xxxx\"\npassword: \"xxxx\"\napi_key: \"xxxx\"\n```\n\n----------\n\n# _inspire_ha_ python package \n\n## Configuration\n\nPut your `secrets.yaml` in the _inspire_ha_ folder then edit `main.yaml` to suit - an example as follows:\n\n```\ncache_secs: 120 # secs to store data (default 60) before refreshing information from inspire API\n#api_url: 'https://www.inspirehomeautomation.co.uk/client/api1_4/api.php' # default\n#device_name: 'My Thermostat' # if set this must match the Unit Name as specified in Setup on the inspire web site, otherwise it uses the first device available\n```\n\n## Actions\nUse the `inspire_req_mod.py` module. You should save your `secrets.yaml` in the same folder.\n\nTo get help:\n\n\u003e python inspire_req_mod.py -h\n\nTo get thermostat status information:\n\n\u003e python inspire_req_mod.py\n\nTo set thermostat set point to 15.5C:\n\n\u003e python inspire_req_mod.py -s 15.5\n\nTo set thermostat function to 'Boost':\n\n\u003e python inspire_req_mod.py -f boost\n\n----------\n\n# _inspire_ha_thermostat_ Home Assistant pyscript app \n\n## Description\n\nThe app synchronises the temperature and set point of your Inspire thermostat with a generic thermostat entity on \nHome Assistant (HA). If you change the target temperature on the HA generic thermostat then the current set point \nof your Inspire thermostat will change (as long as it is not in Boost or Off (frost protection) mode).\n\nSimilarly changes on your Inspire thermostat (scheduled or manual) will be mirrored on the HA generic thermostat.\nIf the Inspire is in Manual/On mode, then the generic thermostat will effectively control the Inspire thermostat. However \nif it is in Program mode the generic thermostat will also change according to the Inspire timetabled program.\n\nIf your generic thermostat has any preset mode temperatures configured (eg Away, Eco, Sleep), then setting the \ngeneric thermostat to that mode will impose this target on the Inspire thermostat. When the preset mode is removed (preset None) \nthe original set point will be restored (Inspire Manual/On mode) or the restored set point will be from the appropriate program \nsegment (Inspire Program mode). You can use this in an HA automation to override the Inspire thermostat program eg when you leave home\n(see example below).\n\n## Installation\nFirst set up a [Generic Thermostat](https://www.home-assistant.io/integrations/generic_thermostat/) on Home Assistant\n(see below) \n\nNote down the ids of the generic thermostat and its underlying _heater_ and _target_sensor_ entities for \nsubstitution in the `config.yaml` below.\n\nNext install [Pyscript](https://hacs-pyscript.readthedocs.io/en/latest/).\nThen copy `inspire_ha_thermostat.py` to the pyscript _apps_ folder\nand copy `inspire_ha_common.py` and `inspire_ha_req_mod.py` to the pyscript _modules_ folder. \n\n## Configuration\nConfiguration of the generic thermostat is via the HA `configuration.yaml` - an example as follows:\n```\nclimate:\n  - platform: generic_thermostat\n    unique_id: hall_thermostat\n    name: Hall Thermostat\n    heater: switch.inspire_switch # use an arbitrary name in the 'switch' domain\n    target_sensor: sensor.inspire_temperature # use an arbitrary name in the 'sensor' domain\n    min_temp: 5\n    max_temp: 25\n    ac_mode: false\n    initial_hvac_mode: \"heat\"\n    cold_tolerance: 0.5\n    hot_tolerance: 0.5\n    precision: 0.5\n    target_temp: 12 # note this set point is imposed when HA is restarted\n    away_temp: 10 # optional set point used when in Away mode\n```\nConfiguration is via the pyscript `config.yaml` - an example as follows:\n```\nallow_all_imports: true\nhass_is_global: false\napps:\n  inspire_ha_thermostat:\n    # the following 3 settings are required\n    generic_thermostat: 'hall_thermostat' # unique_id of controlling generic thermostat climate platform on home assistant\n    heater: 'inspire_switch' # entity id of 'heater' state object in switch domain (use switch.entity_id in configuration of generic thermostat)\n    target_sensor: 'inspire_temperature' # entity id of 'target_sensor' state object in sensor domain (use sensor.entity_id in configuration of generic thermostat)\n    # the following 3 settings are all optional\n    setpoint_sensor: 'inspire_setpoint' # entity id of a state object in sensor domain to reflect set point of inspire remote device (it will be created for you)\n    manual_only: false # default true = only transfer settings from generic thermostat if remote thermostat is in Manual/On mode (not following a program)\n    poll_cron_mins: '3,8,13,18,23,28,33,38,43,48,53,58' # cron minutes past the hour for polling the remote thermostat - default '*/5' \n    inspire_ha:\n      api_key: !secret inspire_ha_api_key\n      user_name: !secret inspire_ha_user_name\n      password: !secret inspire_ha_password\n      #device_name: # if set this must match the Unit Name as specified in Setup on the inspire web site, otherwise it uses the first device available\n      #cache_secs: 60 # default secs to store data before refreshing information from inspire API\n      #api_url: 'https://www.inspirehomeautomation.co.uk/client/api1_4/api.php' # default\n```\nYou will need to add the following lines to the pyscript `secrets.yaml` replacing xxxx (see Pre-requisites above):\n```\ninspire_ha_user_name: \"xxxx\"\ninspire_ha_password: \"xxxx\"\ninspire_ha_api_key: \"xxxx\"\n```\n\n## Actions\n\nLook in the logs for entries tagged _inspire_ha_. \n\nHere is an example of an automation to set Away mode when the house is unoccupied \n(note depends on an _away_temp_ being set in the generic thermostat configuration):\n```\nautomation:\n  alias: Heating Events Hall Thermostat\n  description: Sets away mode on/off on hall thermostat when house unoccupied/occupied\n  mode: single\n  triggers:\n    - entity_id:\n        - input_select.house_occupied\n      trigger: state\n  actions:\n    - if:\n        - condition: state\n          entity_id: input_select.house_occupied\n          state: Occupied\n      then:\n        - data:\n            preset_mode: none\n          target:\n            entity_id: climate.hall_thermostat\n          action: climate.set_preset_mode\n    - if:\n        - condition: state\n          entity_id: input_select.house_occupied\n          state: Unoccupied\n      then:\n        - data:\n            preset_mode: away\n          target:\n            entity_id: climate.hall_thermostat\n          action: climate.set_preset_mode\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faspeakman%2Finspireha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faspeakman%2Finspireha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faspeakman%2Finspireha/lists"}