mirror of
				https://github.com/karl0ss/MiGenieHASS.git
				synced 2025-10-31 14:44:19 +00:00 
			
		
		
		
	Merge pull request #1 from karl0ss/cached_requests
implement 30 second cache object from migenie
This commit is contained in:
		
						commit
						6cb70894ba
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,5 @@ | |||||||
| .env | .env | ||||||
| *.pyc | *.pyc | ||||||
|  | poll_cache.sqlite | ||||||
|  | test.py | ||||||
|  | .vscode/launch.json | ||||||
							
								
								
									
										8
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -4,6 +4,14 @@ | |||||||
|     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||||
|     "version": "0.2.0", |     "version": "0.2.0", | ||||||
|     "configurations": [ |     "configurations": [ | ||||||
|  |         { | ||||||
|  |             "name": "Python: Current File", | ||||||
|  |             "type": "python", | ||||||
|  |             "request": "launch", | ||||||
|  |             "program": "${file}", | ||||||
|  |             "console": "integratedTerminal", | ||||||
|  |             "justMyCode": true | ||||||
|  |         }, | ||||||
|         { |         { | ||||||
|             "name": "Python: Flask", |             "name": "Python: Flask", | ||||||
|             "type": "python", |             "type": "python", | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								app/Routes/poll.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/Routes/poll.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | from lib import migenie | ||||||
|  | 
 | ||||||
|  | def poll_genie()->dict: | ||||||
|  |     """_summary_ | ||||||
|  | 
 | ||||||
|  |     Returns: | ||||||
|  |         dict: _description_ | ||||||
|  |     """     | ||||||
|  |     data = migenie.poll_genie() | ||||||
|  |     return data, 200 | ||||||
| @ -1,9 +1,10 @@ | |||||||
| import requests | import requests | ||||||
|  | from requests_cache import CachedSession | ||||||
| from dotenv import load_dotenv | from dotenv import load_dotenv | ||||||
| import os | import os | ||||||
| load_dotenv() |  | ||||||
| from lib.utils import convert_to_real_temp, is_valid_time | from lib.utils import convert_to_real_temp, is_valid_time | ||||||
| 
 | 
 | ||||||
|  | load_dotenv() | ||||||
| username = os.getenv("username") | username = os.getenv("username") | ||||||
| password = os.getenv("password") | password = os.getenv("password") | ||||||
| 
 | 
 | ||||||
| @ -19,12 +20,19 @@ def poll_genie(): | |||||||
|     response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password)) |     response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password)) | ||||||
|     return response.json() |     return response.json() | ||||||
| 
 | 
 | ||||||
|  | def poll_genie_proxy():   | ||||||
|  |     session = CachedSession('poll_cache', backend='sqlite',expire_after=30) | ||||||
|  |     url = 'http://127.0.0.1:5000/poll_genie' | ||||||
|  |     response = session.get(url) | ||||||
|  |     print("MiGenie Session Token = " + str(response.json()['sessionToken'])) | ||||||
|  |     return response.json() | ||||||
|  | 
 | ||||||
| def get_heating_data(): | def get_heating_data(): | ||||||
|     data = poll_genie() |     data = poll_genie_proxy() | ||||||
|     return data['updateData']['zones'][0] |     return data['updateData']['zones'][0] | ||||||
| 
 | 
 | ||||||
| def get_water_data(): | def get_water_data(): | ||||||
|     data = poll_genie() |     data = poll_genie_proxy() | ||||||
|     return data['updateData']['zones'][1] |     return data['updateData']['zones'][1] | ||||||
| 
 | 
 | ||||||
| def boost_water(time:int): | def boost_water(time:int): | ||||||
|  | |||||||
| @ -1,9 +1,12 @@ | |||||||
| from flask import Flask | from flask import Flask | ||||||
| from flask_restful import Api | from flask_restful import Api | ||||||
| from Routes import water, heating | from Routes import water, heating, poll | ||||||
| app = Flask(__name__) | app = Flask(__name__) | ||||||
| api = Api(app) | api = Api(app) | ||||||
| 
 | 
 | ||||||
|  | @app.route('/poll_genie') | ||||||
|  | def poll_genie(): | ||||||
|  |     return poll.poll_genie() | ||||||
| 
 | 
 | ||||||
| @app.route('/water') | @app.route('/water') | ||||||
| def water_root(): | def water_root(): | ||||||
|  | |||||||
							
								
								
									
										109
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										109
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							| @ -9,6 +9,40 @@ python-versions = "*" | |||||||
| [package.extras] | [package.extras] | ||||||
| dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] | dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "appdirs" | ||||||
|  | version = "1.4.4" | ||||||
|  | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." | ||||||
|  | category = "main" | ||||||
|  | optional = false | ||||||
|  | python-versions = "*" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "attrs" | ||||||
|  | version = "22.1.0" | ||||||
|  | description = "Classes Without Boilerplate" | ||||||
|  | category = "main" | ||||||
|  | optional = false | ||||||
|  | python-versions = ">=3.5" | ||||||
|  | 
 | ||||||
|  | [package.extras] | ||||||
|  | dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] | ||||||
|  | docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] | ||||||
|  | tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] | ||||||
|  | tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "cattrs" | ||||||
|  | version = "22.2.0" | ||||||
|  | description = "Composable complex class support for attrs and dataclasses." | ||||||
|  | category = "main" | ||||||
|  | optional = false | ||||||
|  | python-versions = ">=3.7" | ||||||
|  | 
 | ||||||
|  | [package.dependencies] | ||||||
|  | attrs = ">=20" | ||||||
|  | exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "certifi" | name = "certifi" | ||||||
| version = "2022.12.7" | version = "2022.12.7" | ||||||
| @ -47,6 +81,17 @@ category = "main" | |||||||
| optional = false | optional = false | ||||||
| python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "exceptiongroup" | ||||||
|  | version = "1.0.4" | ||||||
|  | description = "Backport of PEP 654 (exception groups)" | ||||||
|  | category = "main" | ||||||
|  | optional = false | ||||||
|  | python-versions = ">=3.7" | ||||||
|  | 
 | ||||||
|  | [package.extras] | ||||||
|  | test = ["pytest (>=6)"] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "Flask" | name = "Flask" | ||||||
| version = "2.2.2" | version = "2.2.2" | ||||||
| @ -174,6 +219,33 @@ urllib3 = ">=1.21.1,<1.27" | |||||||
| socks = ["PySocks (>=1.5.6,!=1.5.7)"] | socks = ["PySocks (>=1.5.6,!=1.5.7)"] | ||||||
| use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] | use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "requests-cache" | ||||||
|  | version = "0.9.7" | ||||||
|  | description = "A transparent persistent cache for the requests library" | ||||||
|  | category = "main" | ||||||
|  | optional = false | ||||||
|  | python-versions = ">=3.7,<4.0" | ||||||
|  | 
 | ||||||
|  | [package.dependencies] | ||||||
|  | appdirs = ">=1.4.4" | ||||||
|  | attrs = ">=21.2" | ||||||
|  | cattrs = ">=22.2" | ||||||
|  | requests = ">=2.22" | ||||||
|  | url-normalize = ">=1.4" | ||||||
|  | urllib3 = ">=1.25.5" | ||||||
|  | 
 | ||||||
|  | [package.extras] | ||||||
|  | all = ["boto3 (>=1.15)", "botocore (>=1.18)", "itsdangerous (>=2.0)", "pymongo (>=3)", "pyyaml (>=5.4)", "redis (>=3)", "ujson (>=4.0)"] | ||||||
|  | bson = ["bson (>=0.5)"] | ||||||
|  | docs = ["furo (>=2021.9.8)", "linkify-it-py (>=1.0.1,<2.0.0)", "myst-parser (>=0.15.1,<0.16.0)", "sphinx (==4.3.0)", "sphinx-autodoc-typehints (>=1.11,<2.0)", "sphinx-automodapi (>=0.13,<0.15)", "sphinx-copybutton (>=0.3,<0.5)", "sphinx-inline-tabs (>=2022.1.2b11)", "sphinx-notfound-page (>=0.8)", "sphinx-panels (>=0.6,<0.7)", "sphinxcontrib-apidoc (>=0.3,<0.4)"] | ||||||
|  | dynamodb = ["boto3 (>=1.15)", "botocore (>=1.18)"] | ||||||
|  | json = ["ujson (>=4.0)"] | ||||||
|  | mongodb = ["pymongo (>=3)"] | ||||||
|  | redis = ["redis (>=3)"] | ||||||
|  | security = ["itsdangerous (>=2.0)"] | ||||||
|  | yaml = ["pyyaml (>=5.4)"] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "six" | name = "six" | ||||||
| version = "1.16.0" | version = "1.16.0" | ||||||
| @ -182,6 +254,17 @@ category = "main" | |||||||
| optional = false | optional = false | ||||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "url-normalize" | ||||||
|  | version = "1.4.3" | ||||||
|  | description = "URL normalization for Python" | ||||||
|  | category = "main" | ||||||
|  | optional = false | ||||||
|  | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" | ||||||
|  | 
 | ||||||
|  | [package.dependencies] | ||||||
|  | six = "*" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "urllib3" | name = "urllib3" | ||||||
| version = "1.26.13" | version = "1.26.13" | ||||||
| @ -224,13 +307,25 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" | |||||||
| [metadata] | [metadata] | ||||||
| lock-version = "1.1" | lock-version = "1.1" | ||||||
| python-versions = "^3.8" | python-versions = "^3.8" | ||||||
| content-hash = "810250c963183539f8d27111b29094cb16e4d84692a4162296507e76c9bea432" | content-hash = "27b1981f7ae3c5ae2fa8ae1642b6eaa4f78ef1147ff04e21ec374a865a8fea0e" | ||||||
| 
 | 
 | ||||||
| [metadata.files] | [metadata.files] | ||||||
| aniso8601 = [ | aniso8601 = [ | ||||||
|     {file = "aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f"}, |     {file = "aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f"}, | ||||||
|     {file = "aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"}, |     {file = "aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"}, | ||||||
| ] | ] | ||||||
|  | appdirs = [ | ||||||
|  |     {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, | ||||||
|  |     {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, | ||||||
|  | ] | ||||||
|  | attrs = [ | ||||||
|  |     {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, | ||||||
|  |     {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, | ||||||
|  | ] | ||||||
|  | cattrs = [ | ||||||
|  |     {file = "cattrs-22.2.0-py3-none-any.whl", hash = "sha256:bc12b1f0d000b9f9bee83335887d532a1d3e99a833d1bf0882151c97d3e68c21"}, | ||||||
|  |     {file = "cattrs-22.2.0.tar.gz", hash = "sha256:f0eed5642399423cf656e7b66ce92cdc5b963ecafd041d1b24d136fdde7acf6d"}, | ||||||
|  | ] | ||||||
| certifi = [ | certifi = [ | ||||||
|     {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, |     {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, | ||||||
|     {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, |     {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, | ||||||
| @ -247,6 +342,10 @@ colorama = [ | |||||||
|     {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, |     {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, | ||||||
|     {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, |     {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, | ||||||
| ] | ] | ||||||
|  | exceptiongroup = [ | ||||||
|  |     {file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"}, | ||||||
|  |     {file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"}, | ||||||
|  | ] | ||||||
| Flask = [ | Flask = [ | ||||||
|     {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, |     {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, | ||||||
|     {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, |     {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, | ||||||
| @ -325,10 +424,18 @@ requests = [ | |||||||
|     {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, |     {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, | ||||||
|     {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, |     {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, | ||||||
| ] | ] | ||||||
|  | requests-cache = [ | ||||||
|  |     {file = "requests_cache-0.9.7-py3-none-any.whl", hash = "sha256:3f57badcd8406ecda7f8eaa8145afd0b180c5ae4ff05165a2c4d40f3dc88a6e5"}, | ||||||
|  |     {file = "requests_cache-0.9.7.tar.gz", hash = "sha256:b7c26ea98143bac7058fad6e773d56c3442eabc0da9ea7480af5edfc134ff515"}, | ||||||
|  | ] | ||||||
| six = [ | six = [ | ||||||
|     {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, |     {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, | ||||||
|     {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, |     {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, | ||||||
| ] | ] | ||||||
|  | url-normalize = [ | ||||||
|  |     {file = "url-normalize-1.4.3.tar.gz", hash = "sha256:d23d3a070ac52a67b83a1c59a0e68f8608d1cd538783b401bc9de2c0fac999b2"}, | ||||||
|  |     {file = "url_normalize-1.4.3-py2.py3-none-any.whl", hash = "sha256:ec3c301f04e5bb676d333a7fa162fa977ad2ca04b7e652bfc9fac4e405728eed"}, | ||||||
|  | ] | ||||||
| urllib3 = [ | urllib3 = [ | ||||||
|     {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, |     {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, | ||||||
|     {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, |     {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ Flask = "^2.2.2" | |||||||
| Flask-RESTful = "^0.3.9" | Flask-RESTful = "^0.3.9" | ||||||
| requests = "^2.28.1" | requests = "^2.28.1" | ||||||
| python-dotenv = "^0.21.0" | python-dotenv = "^0.21.0" | ||||||
|  | requests-cache = "^0.9.7" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| [build-system] | [build-system] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 GitHub
							GitHub