{"id":51294250,"url":"https://github.com/dstrigl/htrest","last_synced_at":"2026-06-30T13:01:02.651Z","repository":{"id":38316929,"uuid":"172515060","full_name":"dstrigl/HtREST","owner":"dstrigl","description":"Heliotherm heat pump REST API server","archived":false,"fork":false,"pushed_at":"2024-12-07T02:49:02.000Z","size":2244,"stargazers_count":13,"open_issues_count":7,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-28T05:24:33.878Z","etag":null,"topics":["api","flask","heatpump","heliotherm","protocol","python","python3","rest","restful","swagger"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dstrigl.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2019-02-25T13:52:23.000Z","updated_at":"2025-09-20T08:07:27.000Z","dependencies_parsed_at":"2023-10-16T22:41:35.012Z","dependency_job_id":"83ca910d-a7bc-49c5-8b08-52081c495728","html_url":"https://github.com/dstrigl/HtREST","commit_stats":{"total_commits":452,"total_committers":6,"mean_commits":75.33333333333333,"dds":0.5796460176991151,"last_synced_commit":"811b71aaf8f3f0eee23a497b6dfb978b9eb5e204"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/dstrigl/HtREST","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dstrigl%2FHtREST","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dstrigl%2FHtREST/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dstrigl%2FHtREST/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dstrigl%2FHtREST/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dstrigl","download_url":"https://codeload.github.com/dstrigl/HtREST/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dstrigl%2FHtREST/sbom","scorecard":{"id":358129,"data":{"date":"2025-08-11","repo":{"name":"github.com/dstrigl/HtREST","commit":"ea3cc92b838df6b30c04d218d86cccca31e21474"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Code-Review","score":8,"reason":"Found 13/15 approved changesets -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/python-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/dstrigl/HtREST/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/dstrigl/HtREST/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/dstrigl/HtREST/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/dstrigl/HtREST/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/dstrigl/HtREST/python-publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:40","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:41","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:42","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:44","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:24","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T10:07:20.888Z","repository_id":38316929,"created_at":"2025-08-18T10:07:20.888Z","updated_at":"2025-08-18T10:07:20.888Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34967624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"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":["api","flask","heatpump","heliotherm","protocol","python","python3","rest","restful","swagger"],"created_at":"2026-06-30T13:00:36.903Z","updated_at":"2026-06-30T13:01:02.637Z","avatar_url":"https://github.com/dstrigl.png","language":"Python","funding_links":["https://www.buymeacoffee.com/N362PLZ"],"categories":[],"sub_categories":[],"readme":"# HtREST\n\n[![PyPI version](https://img.shields.io/pypi/v/HtREST.svg)](https://pypi.org/project/HtREST)\n[![Python versions](https://img.shields.io/pypi/pyversions/HtREST.svg)](https://pypi.org/project/HtREST)\n[![License](https://img.shields.io/pypi/l/HtREST.svg)](https://pypi.org/project/HtREST)\n[![Build status](https://github.com/dstrigl/HtREST/workflows/CI/badge.svg)](https://github.com/dstrigl/HtREST/actions?query=workflow%3ACI)\n[![Updates](https://pyup.io/repos/github/dstrigl/HtREST/shield.svg)](https://pyup.io/repos/github/dstrigl/HtREST)\n\n\n[Heliotherm](http://www.heliotherm.com/) heat pump HTTP/REST API server for Python 3.8, 3.9 and 3.10.\n\n* GitHub repo: https://github.com/dstrigl/HtREST\n* Free software: [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.en.html)\n\n\n\u003e **Warning:**\n\u003e\n\u003e Please note that any incorrect or careless usage of this application as well as\n\u003e errors in the implementation can damage your heat pump!\n\u003e\n\u003e Therefore, the author does not provide any guarantee or warranty concerning\n\u003e to correctness, functionality or performance and does not accept any liability\n\u003e for damage caused by this application, examples or mentioned information.\n\u003e\n\u003e **Thus, use it on your own risk!**\n\n\n### Wanna support me?\n\n[![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/N362PLZ)\n\n\n## Setup\n\nThe following diagram shows a possible setup in order to work with one of the different smart home systems, like [Loxone](https://www.loxone.com), [Home Assistant](https://www.home-assistant.io/), [ioBroker](https://www.iobroker.net/) or [FHEM](https://www.fhem.de/).\n\n![Setup](setup.png)\n\nOf course, for all smart home systems which are runnable on a Raspberry Pi (like [Home Assistant](https://www.home-assistant.io/), [ioBroker](https://www.iobroker.net/) or [FHEM](https://www.fhem.de/)), the HtREST service and the smart home system can be hosted on the same Raspberry Pi.\nThe connection can than be easily established via the [localhost](https://en.wikipedia.org/wiki/Localhost) address `127.0.0.1`.\n\n\n## API\n\nThe following table describes the HTTP/REST API exposed by this server application for the\n[Heliotherm](http://www.heliotherm.com/) heat pump.\n\n| URI                                             | GET   | PUT   | description                                                                                   |\n| :---------------------------------------------- | :---: | :---: | :-------------------------------------------------------------------------------------------- |\n| `/api/v1/device`                                |   X   |       | Delivers information about the connected heat pump.                                           |\n| `/api/v1/datetime`                              |   X   |   X   | Returns or sets the current date and time of the heat pump.                                   |\n| `/api/v1/faultlist`                             |   X   |       | Returns the fault list of the heat pump.                                                      |\n| `/api/v1/faultlist/size`                        |   X   |       | Returns the fault list size of the heat pump.                                                 |\n| `/api/v1/faultlist/\u003cint:id\u003e`                    |   X   |       | Returns the fault list entry with the given index.                                            |\n| `/api/v1/faultlist/last`                        |   X   |       | Returns the last fault list entry of the heat pump.                                           |\n| `/api/v1/timeprog`                              |   X   |       | Returns a list of all available time programs of the heat pump.                               |\n| `/api/v1/timeprog/\u003cint:id\u003e`                     |   X   |   X   | Returns or sets the time program with the given index of the heat pump.                       |\n| `/api/v1/timeprog/\u003cint:id\u003e/\u003cint:day\u003e/\u003cint:num\u003e` |   X   |   X   | Returns or sets a specific time program entry of the heat pump.                               |\n| `/api/v1/param`                                 |   X   |   X   | Returns or sets the current value of several heat pump parameters.                            |\n| `/api/v1/param/\u003cstring:name\u003e`                   |   X   |   X   | Returns or sets the current value of a specific heat pump parameter.                          |\n| `/api/v1/fastquery`                             |   X   |       | Performs a fast query of a subset or all heat pump parameters representing a 'MP' data point. |\n| `/api/v1/fastquery/\u003cstring:name\u003e`               |   X   |       | Performs a fast query of a specific heat pump parameter which represents a 'MP' data point.   |\n\n\n### GET /api/v1/device\n\nDelivers information about the connected heat pump.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/device/\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/device/\n```\n\n**Sample Response:**\n\n```\n{\n  \"property_id\": 123456,\n  \"serial_number\": 123456,\n  \"software_version\": \"3.0.20\"\n}\n```\n\n\n### GET /api/v1/datetime\n\nReturns the current date and time of the heat pump.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/datetime/\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/datetime/\n```\n\n**Sample Response:**\n\n```\n{\n  \"datetime\": \"2020-01-29T13:11:35\"\n}\n```\n\n\n### PUT /api/v1/datetime\n\nSets the current date and time of the heat pump.\n\n**Sample Payload:**\n\n```\n{\n  \"datetime\": \"2020-01-29T13:12:07\"\n}\n```\n\n*Remark: If the value of \"datetime\" is an empty string (\"\") current date and time of the host will be used.*\n\n**Sample Curl:**\n\n```\ncurl -X PUT \"http://localhost:8777/api/v1/datetime/\" -H \"accept: application/json\" -H \"Content-Type: application/json\" -d \"{  \\\"datetime\\\": \\\"2020-01-29T13:12:07\\\"}\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/datetime/\n```\n\n**Sample Response:**\n\n```\n{\n  \"datetime\": \"2020-01-29T13:12:07\"\n}\n```\n\n\n### GET /api/v1/faultlist\n\nReturns the fault list of the heat pump.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/faultlist/\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/faultlist/\n```\n\n**Sample Response:**\n\n```\n[\n  {\n    \"index\": 0,\n    \"error\": 65534,\n    \"datetime\": \"2000-01-01T00:00:00\",\n    \"message\": \"Keine Stoerung\"\n  },\n  {\n    \"index\": 1,\n    \"error\": 65286,\n    \"datetime\": \"2000-01-01T00:00:00\",\n    \"message\": \"Info: Programmupdate 1\"\n  },\n  {\n    \"index\": 2,\n    \"error\": 65285,\n    \"datetime\": \"2000-01-01T00:00:00\",\n    \"message\": \"Info: Initialisiert\"\n  },\n  {\n    \"index\": 3,\n    \"error\": 19,\n    \"datetime\": \"2014-09-14T02:08:56\",\n    \"message\": \"EQ_Spreizung\"\n  }\n]\n```\n\n\n### GET /api/v1/faultlist/size\n\nReturns the fault list size of the heat pump.\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/faultlist/size\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/faultlist/size\n```\n\n**Sample Response:**\n\n```\n{\n  \"size\": 4\n}\n```\n\n\n### GET /api/v1/faultlist/\\\u003cint:id\\\u003e\n\nReturns the fault list entry with the given index.\n\n**Parameter:**\n\n* **\\\u003cint:id\\\u003e**: The fault list index.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/faultlist/3\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/faultlist/3\n```\n\n**Sample Response:**\n\n```\n{\n  \"index\": 3,\n  \"error\": 19,\n  \"datetime\": \"2014-09-14T02:08:56\",\n  \"message\": \"EQ_Spreizung\"\n}\n```\n\n\n### GET /api/v1/faultlist/last\n\nReturns the last fault list entry of the heat pump.\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/faultlist/last\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/faultlist/last\n```\n\n**Sample Response:**\n\n```\n{\n  \"index\": 3,\n  \"error\": 19,\n  \"datetime\": \"2014-09-14T02:08:56\",\n  \"message\": \"EQ_Spreizung\"\n}\n```\n\n\n### GET /api/v1/timeprog\n\nReturns a list of all available time programs of the heat pump.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/timeprog/\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/timeprog/\n```\n\n**Sample Response:**\n\n```\n[\n  {\n    \"index\": 0,\n    \"name\": \"Warmwasser\",\n    \"ead\": 7,\n    \"nos\": 2,\n    \"ste\": 15,\n    \"nod\": 7\n  },\n  {\n    \"index\": 1,\n    \"name\": \"Zirkulationspumpe\",\n    \"ead\": 7,\n    \"nos\": 2,\n    \"ste\": 15,\n    \"nod\": 7\n  },\n  {\n    \"index\": 2,\n    \"name\": \"Heizung\",\n    \"ead\": 7,\n    \"nos\": 3,\n    \"ste\": 15,\n    \"nod\": 7\n  },\n  {...},\n  {...}\n]\n```\n\n\n### GET /api/v1/timeprog/\\\u003cint:id\\\u003e\n\nReturns the time program with the given index of the heat pump.\n\n**Parameter:**\n\n* **\\\u003cint:id\\\u003e**: The time program index.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/timeprog/1\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/timeprog/1\n```\n\n**Sample Response:**\n\n```\n{\n  \"index\": 1,\n  \"name\": \"Zirkulationspumpe\",\n  \"ead\": 7,\n  \"nos\": 2,\n  \"ste\": 15,\n  \"nod\": 7,\n  \"entries\": [\n    [\n      {\n        \"state\": 0,\n        \"start\": \"00:00\",\n        \"end\": \"05:15\"\n      },\n      {\n        \"state\": 1,\n        \"start\": \"05:15\",\n        \"end\": \"08:00\"\n      },\n      {...},\n      {...},\n      {...},\n      {...},\n      {...}\n    ],\n    [...],\n    [...],\n    [...],\n    [...],\n    [...],\n    [...]\n  ]\n}\n```\n\n\n### PUT /api/v1/timeprog/\\\u003cint:id\\\u003e\n\nSets all time program entries of a specific time program of the heat pump.\n\n**Parameter:**\n\n* **\\\u003cint:id\\\u003e**: The time program index.\n\n**Sample Payload:**\n\n```\n{\n  \"index\": 1,\n  \"name\": \"Zirkulationspumpe\",\n  \"ead\": 7,\n  \"nos\": 2,\n  \"ste\": 15,\n  \"nod\": 7,\n  \"entries\": [\n    [\n      {\n        \"state\": 0,\n        \"start\": \"00:00\",\n        \"end\": \"06:00\"\n      },\n      {\n        \"state\": 1,\n        \"start\": \"06:00\",\n        \"end\": \"09:00\"\n      },\n      {...},\n      {...},\n      {...},\n      {...},\n      {...}\n    ],\n    [...],\n    [...],\n    [...],\n    [...],\n    [...],\n    [...]\n  ]\n}\n```\n\n**Sample Curl:**\n\n```\ncurl -X PUT \"http://localhost:8777/api/v1/timeprog/1\" -H \"accept: application/json\" -H \"Content-Type: application/json\" -d \"{  \\\"index\\\": 1,  \\\"name\\\": \\\"Zirkulationspumpe\\\",  ... }\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/timeprog/1\n```\n\n**Sample Response:**\n\n```\n{\n  \"index\": 1,\n  \"name\": \"Zirkulationspumpe\",\n  \"ead\": 7,\n  \"nos\": 2,\n  \"ste\": 15,\n  \"nod\": 7,\n  \"entries\": [\n    [\n      {\n        \"state\": 0,\n        \"start\": \"00:00\",\n        \"end\": \"06:00\"\n      },\n      {\n        \"state\": 1,\n        \"start\": \"06:00\",\n        \"end\": \"09:00\"\n      },\n      {...},\n      {...},\n      {...},\n      {...},\n      {...}\n    ],\n    [...],\n    [...],\n    [...],\n    [...],\n    [...],\n    [...]\n  ]\n}\n```\n\n\n#### GET /api/v1/timeprog/\\\u003cint:id\\\u003e/\\\u003cint:day\\\u003e/\\\u003cint:num\\\u003e\n\nReturns a specific time program entry of the heat pump.\n\n**Parameter:**\n\n* **\\\u003cint:num\\\u003e**: The number of the time program entry (of the specified day).\n* **\\\u003cint:day\\\u003e**: The day of the time program entry (inside the specified time program).\n* **\\\u003cint:id\\\u003e**:  The time program index.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/timeprog/1/1/1\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/timeprog/1/1/1\n```\n\n**Sample Response:**\n\n```\n{\n  \"state\": 1,\n  \"start\": \"06:00\",\n  \"end\": \"08:00\"\n}\n```\n\n\n### PUT /api/v1/timeprog/\\\u003cint:id\\\u003e/\\\u003cint:day\\\u003e/\\\u003cint:num\\\u003e\n\nSets a specific time program entry of the heat pump.\n\n**Parameter:**\n\n* **\\\u003cint:num\\\u003e**: The number of the time program entry (of the specified day).\n* **\\\u003cint:day\\\u003e**: The day of the time program entry (inside the specified time program).\n* **\\\u003cint:id\\\u003e**:  The time program index.\n\n**Sample Payload:**\n\n```\n{\n  \"state\": 1,\n  \"start\": \"06:00\",\n  \"end\": \"08:00\"\n}\n```\n\n**Sample Curl:**\n\n```\ncurl -X PUT \"http://localhost:8777/api/v1/timeprog/1/1/1\" -H \"accept: application/json\" -H \"Content-Type: application/json\" -d \"{  \\\"state\\\": 1,  \\\"start\\\": \\\"06:00\\\",  \\\"end\\\": \\\"08:00\\\"}\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/timeprog/1/1/1\n```\n\n**Sample Response:**\n\n```\n{\n  \"state\": 1,\n  \"start\": \"06:00\",\n  \"end\": \"08:00\"\n}\n```\n\n\n### GET /api/v1/param\n\nReturns the current value of a subset or all known heat pump parameters.\n\n**Sample Curl:**\n\nComplete list of all known heat pump parameters:\n```\ncurl -X GET \"http://localhost:8777/api/v1/param/\" -H \"accept: application/json\"\n```\nSubset of the known heat pump parameters:\n```\ncurl -X GET \"http://localhost:8777/api/v1/param/?HKR%20Soll_Raum\u0026Temp.%20Aussen\u0026Stoerung\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\nComplete list of all known heat pump parameters:\n```\nhttp://localhost:8777/api/v1/param/\n```\nSubset of the known heat pump parameters:\n```\nhttp://localhost:8777/api/v1/param/?HKR%20Soll_Raum\u0026Temp.%20Aussen\u0026Stoerung\n```\n\n**Sample Response:**\n\n```\n{\n  \"HKR Soll_Raum\": 23,\n  \"Stoerung\": false,\n  \"Temp. EQ_Austritt\": 4.7,\n  \"Temp. EQ_Eintritt\": 6.1,\n  \"Temp. Ruecklauf\": 27.7,\n  \"Temp. Vorlauf\": 27.8,\n  \"Temp. Brauchwasser\": 50.1,\n  \"Temp. Aussen verzoegert\": 4.9,\n  \"Temp. Aussen\": 4.9,\n  ...\n}\n```\n\n*Remark: A list of available Heliotherm heat pump parameters can be found\n[here](https://htheatpump.readthedocs.io/en/latest/htparams.html).*\n\n\n### PUT /api/v1/param\n\nSets the current value of several heat pump parameters.\n\n**Sample Payload:**\n\n```\n{\n  \"Betriebsart\": 1,\n  \"HKR Soll_Raum\": 21.5,\n  \"HKR Aufheiztemp. (K)\": 3,\n  \"HKR Absenktemp. (K)\": -3,\n  \"WW Minimaltemp.\": 15,\n  \"WW Normaltemp.\": 50\n}\n```\n\n**Sample Curl:**\n\n```\ncurl -X PUT \"http://localhost:8777/api/v1/param/\" -H \"accept: application/json\" -H \"Content-Type: application/json\" -d \"{  \\\"Betriebsart\\\": 1,  \\\"HKR Soll_Raum\\\": 21.5,  ... }\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/param/\n```\n\n**Sample Response:**\n\n```\n{\n  \"Betriebsart\": 1,\n  \"HKR Soll_Raum\": 21.5,\n  \"HKR Aufheiztemp. (K)\": 3,\n  \"HKR Absenktemp. (K)\": -3,\n  \"WW Minimaltemp.\": 15,\n  \"WW Normaltemp.\": 50\n}\n```\n\n*Remark: A list of available Heliotherm heat pump parameters can be found\n[here](https://htheatpump.readthedocs.io/en/latest/htparams.html).*\n\n\n### GET /api/v1/param/\\\u003cstring:name\\\u003e\n\nReturns the current value of a specific heat pump parameter.\n\n**Parameter:**\n\n* **\\\u003cstring:name\\\u003e**: The parameter name.\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/param/Temp.%20Aussen\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/param/Temp.%20Aussen\n```\n\n**Sample Response:**\n\n```\n{\n  \"value\": 4.9\n}\n```\n\n*Remark: A list of available Heliotherm heat pump parameters can be found\n[here](https://htheatpump.readthedocs.io/en/latest/htparams.html).*\n\n\n### PUT /api/v1/param/\\\u003cstring:name\\\u003e\n\nSets the current value of a specific heat pump parameter.\n\n**Parameter:**\n\n* **\\\u003cstring:name\\\u003e**: The parameter name.\n\n**Sample Payload:**\n\n```\n{\n  \"value\": 22.5\n}\n```\n\n**Sample Curl:**\n\n```\ncurl -X PUT \"http://localhost:8777/api/v1/param/HKR%20Soll_Raum\" -H \"accept: application/json\" -H \"Content-Type: application/json\" -d \"{  \\\"value\\\": 22.5}\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/param/HKR%20Soll_Raum\n```\n\n**Sample Response:**\n\n```\n{\n  \"value\": 22.5\n}\n```\n\n*Remark: A list of available Heliotherm heat pump parameters can be found\n[here](https://htheatpump.readthedocs.io/en/latest/htparams.html).*\n\n\n### GET /api/v1/fastquery\n\nPerforms a fast query of a subset or all heat pump parameters representing a \"MP\" data point.\n\n**Sample Curl:**\n\nComplete list of all known heat pump parameters representing a \"MP\" data point:\n```\ncurl -X GET \"http://localhost:8777/api/v1/fastquery/\" -H \"accept: application/json\"\n```\nSubset of the known heat pump parameters representing a \"MP\" data point:\n```\ncurl -X GET \"http://localhost:8777/api/v1/fastquery/?Stoerung\u0026Temp.%20Vorlauf\u0026Warmwasservorrang\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\nComplete list of all known heat pump parameters representing a \"MP\" data point:\n```\nhttp://localhost:8777/api/v1/fastquery/\n```\nSubset of the known heat pump parameters representing a \"MP\" data point:\n```\nhttp://localhost:8777/api/v1/fastquery/?Stoerung\u0026Temp.%20Vorlauf\u0026Warmwasservorrang\n```\n\n**Sample Response:**\n\n```\n{\n  \"HKR_Sollwert\": 32.2,\n  \"Verdichteranforderung\": 3,\n  \"Frischwasserpumpe\": 0,\n  \"FWS Stroemungsschalter\": false,\n  \"Stoerung\": false,\n  \"Verdichter\": true,\n  \"Zirkulationspumpe WW\": false,\n  ...\n}\n```\n\n*Remark: A list of available Heliotherm heat pump parameters can be found\n[here](https://htheatpump.readthedocs.io/en/latest/htparams.html).*\n\n\n### GET /api/v1/fastquery/\\\u003cstring:name\\\u003e\n\nPerforms a fast query of a specific heat pump parameter which represents a \"MP\" data point.\n\n**Parameter:**\n\n* **\\\u003cstring:name\\\u003e**: The parameter name (representing a \"MP\" data point).\n\n**Sample Curl:**\n\n```\ncurl -X GET \"http://localhost:8777/api/v1/fastquery/Verdichter\" -H \"accept: application/json\"\n```\n\n**Sample Request URL:**\n\n```\nhttp://localhost:8777/api/v1/fastquery/Verdichter\n```\n\n**Sample Response:**\n\n```\n{\n  \"value\": true\n}\n```\n\n*Remark: A list of available Heliotherm heat pump parameters can be found\n[here](https://htheatpump.readthedocs.io/en/latest/htparams.html).*\n\n\n## Installation\n\nYou can install or upgrade `HtREST` with:\n\n```\n$ pip install HtREST --upgrade\n```\n\nOr you can install from source with:\n\n```\n$ git clone https://github.com/dstrigl/HtREST.git\n$ cd HtREST\n$ python setup.py install\n```\n\n\n## Usage\n\n```\nusage: htrest [-h] [-d DEVICE] [-b {9600,19200,38400,57600,115200}]\n              [--host HOST] [--port PORT] [--user USER] [--bool-as-int]\n              [--logging-config LOGGING_CONFIG] [--debug] [--read-only]\n              [--no-param-verification]\n\nHeliotherm heat pump REST API server\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -d DEVICE, --device DEVICE\n                        the serial device on which the heat pump is connected,\n                        default: /dev/ttyUSB0\n  -b {9600,19200,38400,57600,115200}, --baudrate {9600,19200,38400,57600,115200}\n                        baudrate of the serial connection (same as configured\n                        on the heat pump), default: 115200\n  --host HOST           the hostname to listen on, set to \"0.0.0.0\" to have\n                        the server available externally as well, default:\n                        127.0.0.1\n  --port PORT           the port of the web server, default: 8777\n  --user USER           the username and password for the basic access\n                        authentication in the form \"\u003cusername\u003e:\u003cpassword\u003e\",\n                        default:\n  --bool-as-int         boolean values are treated as integers (with false\n                        equivalent to 0 and true equivalent to 1)\n  --logging-config LOGGING_CONFIG\n                        the filename under which the logging configuration can\n                        be found, default:\n                        /home/pi/prog/HtREST/htrest/logging.conf\n  --debug               enable Flask debug mode\n  --read-only           disable write access to the heat pump\n  --no-param-verification\n                        disable all parameter verification actions\n```\n\n\n### Example\n\n```\n$ htrest -d /dev/ttyUSB0 -b 115200 --host 192.168.11.99 --port 8777 --read-only\nHTHEATPUMP: load parameter definitions from: /home/pi/venv/htrest/lib/python3.7/site-packages/htheatpump-1.2.4-py3.7.egg/htheatpump/htparams.csv\nStart Heliotherm heat pump REST API server v0.1.8.\nNamespace(baudrate=115200, bool_as_int=False, debug=False, device='/dev/ttyUSB0', host='192.168.11.99', logging_config='/home/pi/prog/HtREST/htrest/logging.conf', no_param_verification=False, port=8777, read_only=True, user='')\n2020-04-18 12:36:15,834 INFO [htrest.app] open connection to heat pump (\u003chtheatpump.htheatpump.HtHeatpump object at 0xb5dd61f0\u003e)\n2020-04-18 12:36:15,873 INFO [htrest.app] successfully connected to heat pump #123456\n2020-04-18 12:36:15,904 INFO [htrest.app] software version = 3.0.20 (273)\n2020-04-18 12:36:15,950 INFO [htrest.app] *** created Flask app \u003cFlask 'htrest.app'\u003e with config \u003cConfig {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093, 'SWAGGER_UI_DOC_EXPANSION': 'list', 'RESTX_VALIDATE': True, 'RESTX_MASK_SWAGGER': False, 'ERROR_404_HELP': False, 'BUNDLE_ERRORS': True}\u003e\nMap([\u003cRule '/api/v1/faultlist/size' (OPTIONS, HEAD, GET) -\u003e api.faultlist_fault_list_size\u003e,\n \u003cRule '/api/v1/faultlist/last' (OPTIONS, HEAD, GET) -\u003e api.faultlist_last_fault\u003e,\n \u003cRule '/api/v1/swagger.json' (OPTIONS, HEAD, GET) -\u003e api.specs\u003e,\n \u003cRule '/api/v1/faultlist/' (OPTIONS, HEAD, GET) -\u003e api.faultlist_fault_list\u003e,\n \u003cRule '/api/v1/fastquery/' (OPTIONS, HEAD, GET) -\u003e api.fastquery_fast_query_list\u003e,\n \u003cRule '/api/v1/datetime/' (PUT, OPTIONS, HEAD, GET) -\u003e api.datetime_date_time\u003e,\n \u003cRule '/api/v1/timeprog/' (OPTIONS, HEAD, GET) -\u003e api.timeprog_time_progs\u003e,\n \u003cRule '/api/v1/device/' (OPTIONS, HEAD, GET) -\u003e api.device_device\u003e,\n \u003cRule '/api/v1/param/' (PUT, OPTIONS, HEAD, GET) -\u003e api.param_param_list\u003e,\n \u003cRule '/api/v1/' (OPTIONS, HEAD, GET) -\u003e api.doc\u003e,\n \u003cRule '/api/v1/' (OPTIONS, HEAD, GET) -\u003e api.root\u003e,\n \u003cRule '/api/v1/faultlist/\u003cid\u003e' (OPTIONS, HEAD, GET) -\u003e api.faultlist_fault_entry\u003e,\n \u003cRule '/api/v1/fastquery/\u003cname\u003e' (OPTIONS, HEAD, GET) -\u003e api.fastquery_fast_query\u003e,\n \u003cRule '/api/v1/timeprog/\u003cid\u003e/\u003cday\u003e/\u003cnum\u003e' (PUT, OPTIONS, HEAD, GET) -\u003e api.timeprog_time_prog_entry\u003e,\n \u003cRule '/api/v1/timeprog/\u003cid\u003e' (PUT, OPTIONS, HEAD, GET) -\u003e api.timeprog_time_prog\u003e,\n \u003cRule '/api/v1/param/\u003cname\u003e' (PUT, OPTIONS, HEAD, GET) -\u003e api.param_param\u003e,\n \u003cRule '/swaggerui/\u003cfilename\u003e' (OPTIONS, HEAD, GET) -\u003e restx_doc.static\u003e,\n \u003cRule '/static/\u003cfilename\u003e' (OPTIONS, HEAD, GET) -\u003e static\u003e])\n * Serving Flask app \"htrest.app\" (lazy loading)\n * Environment: production\n   WARNING: This is a development server. Do not use it in a production deployment.\n   Use a production WSGI server instead.\n * Debug mode: off\n2020-03-31 12:58:12,047 INFO [htrest.apis.param] *** [GET] http://192.168.11.99:8777/api/v1/param/HKR%20Soll_Raum -- name='HKR Soll_Raum'\n2020-03-31 12:58:12,174 INFO [htrest.apis.param] *** [GET] http://192.168.11.99:8777/api/v1/param/Betriebsart -- name='Betriebsart'\n...\n```\n\n\n## Credits\n\n* Project dependencies scanned by [PyUp.io](https://pyup.io).\n\n\n## License\n\nDistributed under the terms of the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.en.html).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdstrigl%2Fhtrest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdstrigl%2Fhtrest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdstrigl%2Fhtrest/lists"}