From 720152b54229850d5fb3e85397a487b4e8b6a46f Mon Sep 17 00:00:00 2001 From: Robbin Janssen Date: Sun, 29 Jan 2023 00:03:09 +0100 Subject: [PATCH] Add options for setting the thermostat defaults --- .../ojmicroline_thermostat/climate.py | 40 ++++++++-- .../ojmicroline_thermostat/config_flow.py | 76 ++++++++++++++++++- .../ojmicroline_thermostat/const.py | 3 + .../ojmicroline_thermostat/manifest.json | 2 +- .../ojmicroline_thermostat/strings.json | 11 +++ .../translations/en.json | 11 +++ .../translations/nl.json | 11 +++ poetry.lock | 74 +++++++++--------- pyproject.toml | 12 ++- 9 files changed, 190 insertions(+), 50 deletions(-) diff --git a/custom_components/ojmicroline_thermostat/climate.py b/custom_components/ojmicroline_thermostat/climate.py index 3b4ffec..b91505b 100644 --- a/custom_components/ojmicroline_thermostat/climate.py +++ b/custom_components/ojmicroline_thermostat/climate.py @@ -1,5 +1,7 @@ """Climate sensors for OJMicroline.""" import logging +from collections.abc import Mapping +from typing import Any from homeassistant.components.climate import ( ClimateEntity, @@ -30,7 +32,14 @@ REGULATION_VACATION, ) -from .const import DOMAIN, MANUFACTURER, PRESET_FROST_PROTECTION, PRESET_VACATION +from .const import ( + CONF_COMFORT_MODE_DURATION, + CONF_USE_COMFORT_MODE, + DOMAIN, + MANUFACTURER, + PRESET_FROST_PROTECTION, + PRESET_VACATION, +) from .coordinator import OJMicrolineDataUpdateCoordinator MODE_LIST = [HVACMode.HEAT, HVACMode.AUTO] @@ -72,7 +81,11 @@ async def async_setup_entry( coordinator = hass.data[DOMAIN][entry.entry_id] entities = [] for idx, _ in coordinator.data.items(): - entities.append(OJMicrolineThermostat(coordinator, idx)) + entities.append( + OJMicrolineThermostat( + coordinator=coordinator, idx=idx, options=entry.options + ) + ) async_add_entities(entities) @@ -90,17 +103,25 @@ class OJMicrolineThermostat( _attr_has_entity_name = True idx = str - - def __init__(self, coordinator: OJMicrolineDataUpdateCoordinator, idx: str) -> None: + options = (Mapping[str, Any],) + + def __init__( + self, + coordinator: OJMicrolineDataUpdateCoordinator, + idx: str, + options: Mapping[str, Any], + ) -> None: """ Initialise the entity. Args: coordinator: The data coordinator updating the models. idx: The identifier for this entity. + options: The options provided by the user. """ super().__init__(coordinator) self.idx = idx + self.options = options self._attr_unique_id = self.idx @property @@ -215,10 +236,15 @@ async def async_set_temperature(self, **kwargs) -> None: if (temperature := kwargs.get(ATTR_TEMPERATURE)) is None: return + regulation_mode = REGULATION_MANUAL + if self.options.get(CONF_USE_COMFORT_MODE) is True: + regulation_mode = REGULATION_COMFORT + await self.coordinator.api.set_regulation_mode( - self.coordinator.data[self.unique_id], - REGULATION_COMFORT, - int(temperature * 100), + resource=self.coordinator.data[self.unique_id], + regulation_mode=regulation_mode, + temperature=int(temperature * 100), + duration=self.options.get(CONF_COMFORT_MODE_DURATION), ) await self.coordinator.async_request_refresh() diff --git a/custom_components/ojmicroline_thermostat/config_flow.py b/custom_components/ojmicroline_thermostat/config_flow.py index 07e6569..fff28d7 100644 --- a/custom_components/ojmicroline_thermostat/config_flow.py +++ b/custom_components/ojmicroline_thermostat/config_flow.py @@ -2,8 +2,10 @@ from typing import Any, Optional import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow from homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import callback +from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_create_clientsession from ojmicroline_thermostat import ( OJMicroline, @@ -12,11 +14,15 @@ OJMicrolineException, OJMicrolineTimeoutException, ) +from ojmicroline_thermostat.const import COMFORT_DURATION from .const import ( + CONF_COMFORT_MODE_DURATION, CONF_CUSTOMER_ID, CONF_DEFAULT_CUSTOMER_ID, CONF_DEFAULT_HOST, + CONF_USE_COMFORT_MODE, + CONFIG_FLOW_VERSION, DOMAIN, INTEGRATION_NAME, ) @@ -32,10 +38,26 @@ ) -class OJMicrolineFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class OJMicrolineFlowHandler(ConfigFlow, domain=DOMAIN): """Handle an OJ Microline config flow.""" - VERSION = 1 + VERSION = CONFIG_FLOW_VERSION + + @staticmethod + @callback + def async_get_options_flow( + config_entry: ConfigEntry, + ) -> OptionsFlow: + """ + Get the options flow for this handler. + + Args: + config_entry: The ConfigEntry instance. + + Returns: + The created config flow. + """ + return OJMicrolineOptionsFlowHandler(config_entry) async def async_step_user(self, user_input: Optional[dict[str, Any]] = None) -> Any: """ @@ -86,3 +108,51 @@ async def async_step_user(self, user_input: Optional[dict[str, Any]] = None) -> return self.async_show_form( step_id="user", data_schema=DATA_SCHEMA, errors=errors ) + + +class OJMicrolineOptionsFlowHandler(OptionsFlow): + """Handle options.""" + + def __init__(self, config_entry: ConfigEntry) -> None: + """ + Initialize options flow. + + Args: + config_entry: The ConfigEntry instance. + """ + self.config_entry = config_entry + + async def async_step_init( + self, user_input: dict[str, Any] | None = None + ) -> FlowResult: + """ + Handle a flow initialized by the user. + + Args: + user_input: The input received from the user or none. + + Returns: + The created config entry. + """ + if user_input is not None: + return self.async_create_entry(title="", data=user_input) + + return self.async_show_form( + step_id="init", + data_schema=vol.Schema( + { + vol.Optional( + CONF_USE_COMFORT_MODE, + default=self.config_entry.options.get( + CONF_USE_COMFORT_MODE, False + ), + ): bool, + vol.Optional( + CONF_COMFORT_MODE_DURATION, + default=self.config_entry.options.get( + CONF_COMFORT_MODE_DURATION, COMFORT_DURATION + ), + ): vol.All(vol.Coerce(int), vol.Range(min=1)), + } + ), + ) diff --git a/custom_components/ojmicroline_thermostat/const.py b/custom_components/ojmicroline_thermostat/const.py index c7880c4..d18e0d1 100644 --- a/custom_components/ojmicroline_thermostat/const.py +++ b/custom_components/ojmicroline_thermostat/const.py @@ -2,6 +2,7 @@ DOMAIN = "ojmicroline_thermostat" MANUFACTURER = "OJ Electronics" INTEGRATION_NAME = "OJ Microline Thermostat" +CONFIG_FLOW_VERSION = 2 API_TIMEOUT = 30 UPDATE_INTERVAL = 60 @@ -9,6 +10,8 @@ CONF_CUSTOMER_ID = "customer_id" CONF_DEFAULT_HOST = "ocd5.azurewebsites.net" CONF_DEFAULT_CUSTOMER_ID = 99 +CONF_USE_COMFORT_MODE = "use_comfort_mode" +CONF_COMFORT_MODE_DURATION = "comfort_mode_duration" PRESET_VACATION = "Vacation" PRESET_FROST_PROTECTION = "Frost Protection" diff --git a/custom_components/ojmicroline_thermostat/manifest.json b/custom_components/ojmicroline_thermostat/manifest.json index 19de2da..6e98ada 100644 --- a/custom_components/ojmicroline_thermostat/manifest.json +++ b/custom_components/ojmicroline_thermostat/manifest.json @@ -6,7 +6,7 @@ "documentation": "https://github.com/robbinjanssen/home-assistant-ojmicroline-thermostat", "issue_tracker": "https://github.com/robbinjanssen/home-assistant-ojmicroline-thermostat/issues", "requirements": [ - "ojmicroline-thermostat==1.0.0" + "ojmicroline-thermostat==1.1.0" ], "dependencies": [], "codeowners": [ diff --git a/custom_components/ojmicroline_thermostat/strings.json b/custom_components/ojmicroline_thermostat/strings.json index 17b53ec..a5f55b5 100644 --- a/custom_components/ojmicroline_thermostat/strings.json +++ b/custom_components/ojmicroline_thermostat/strings.json @@ -22,5 +22,16 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" } + }, + "options": { + "step": { + "init": { + "description": "Set default options when changing the thermostat temperature.", + "data": { + "use_comfort_mode": "Set the regulation to comfort mode when changing the temperature.", + "comfort_mode_duration": "The duration in minutes the comfort mode should be enabled." + } + } + } } } diff --git a/custom_components/ojmicroline_thermostat/translations/en.json b/custom_components/ojmicroline_thermostat/translations/en.json index 8c319ef..6737a53 100644 --- a/custom_components/ojmicroline_thermostat/translations/en.json +++ b/custom_components/ojmicroline_thermostat/translations/en.json @@ -22,5 +22,16 @@ "abort": { "already_configured": "Your credentials are already configured." } + }, + "options": { + "step": { + "init": { + "description": "Set default options when changing the thermostat temperature.", + "data": { + "use_comfort_mode": "Set the regulation to comfort mode when changing the temperature.", + "comfort_mode_duration": "The duration in minutes the comfort mode should be enabled." + } + } + } } } diff --git a/custom_components/ojmicroline_thermostat/translations/nl.json b/custom_components/ojmicroline_thermostat/translations/nl.json index dcf7f77..b7a39a9 100644 --- a/custom_components/ojmicroline_thermostat/translations/nl.json +++ b/custom_components/ojmicroline_thermostat/translations/nl.json @@ -22,5 +22,16 @@ "abort": { "already_configured": "Deze combinatie is al geconfigureerd." } + }, + "options": { + "step": { + "init": { + "description": "Stel de standaard opties in wanneer de temperatuur van de thermostaat wordt gewijzigd.", + "data": { + "use_comfort_mode": "Zet de modus naar comfort wanneer de temperatuur wijzigd.", + "comfort_mode_duration": "De totale tijd in minuten dat de comfort mode aan moet staan." + } + } + } } } diff --git a/poetry.lock b/poetry.lock index df661c6..5da1bd9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -138,19 +138,19 @@ files = [ [[package]] name = "astroid" -version = "2.13.1" +version = "2.13.3" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.13.1-py3-none-any.whl", hash = "sha256:9dbe1718881b2925cd60080d879ee41909da20535cb549dff0ec5dec7ed2e6d5"}, - {file = "astroid-2.13.1.tar.gz", hash = "sha256:d2f2775756807ab136867c9c500556c26eda487930281f61e30e40daecdb8d84"}, + {file = "astroid-2.13.3-py3-none-any.whl", hash = "sha256:14c1603c41cc61aae731cad1884a073c4645e26f126d13ac8346113c95577f3b"}, + {file = "astroid-2.13.3.tar.gz", hash = "sha256:6afc22718a48a689ca24a97981ad377ba7fb78c133f40335dfd16772f29bcfb1"}, ] [package.dependencies] lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, @@ -238,7 +238,6 @@ mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -713,14 +712,14 @@ gitdb = ">=4.0.1,<5" [[package]] name = "identify" -version = "2.5.12" +version = "2.5.16" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "identify-2.5.12-py2.py3-none-any.whl", hash = "sha256:e8a400c3062d980243d27ce10455a52832205649bbcaf27ffddb3dfaaf477bad"}, - {file = "identify-2.5.12.tar.gz", hash = "sha256:0bc96b09c838310b6fcfcc61f78a981ea07f94836ef6ef553da5bb5d4745d662"}, + {file = "identify-2.5.16-py2.py3-none-any.whl", hash = "sha256:832832a58ecc1b8f33d5e8cb4f7d3db2f5c7fbe922dfee5f958b48fed691501a"}, + {file = "identify-2.5.16.tar.gz", hash = "sha256:c47acedfe6495b1c603ed7e93469b26e839cab38db4155113f36f718f8b3dc47"}, ] [package.extras] @@ -740,19 +739,19 @@ files = [ [[package]] name = "isort" -version = "5.11.4" +version = "5.12.0" description = "A Python utility / library to sort Python imports." category = "dev" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "isort-5.11.4-py3-none-any.whl", hash = "sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b"}, - {file = "isort-5.11.4.tar.gz", hash = "sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6"}, + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, ] [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile-deprecated-finder = ["pipreqs", "requirementslib"] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] @@ -943,7 +942,7 @@ yarl = ">=1.6.0" type = "git" url = "https://github.com/robbinjanssen/python-ojmicroline-thermostat.git" reference = "main" -resolved_reference = "b41c25aad2aacc41d422d27e502fe5dc2455257e" +resolved_reference = "f16196145ad2f71b620952fc3a76dec2bd5c9b49" [[package]] name = "packaging" @@ -962,26 +961,26 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pathspec" -version = "0.10.3" +version = "0.11.0" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.10.3-py3-none-any.whl", hash = "sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6"}, - {file = "pathspec-0.10.3.tar.gz", hash = "sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"}, + {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, + {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, ] [[package]] name = "pbr" -version = "5.11.0" +version = "5.11.1" description = "Python Build Reasonableness" category = "dev" optional = false python-versions = ">=2.6" files = [ - {file = "pbr-5.11.0-py2.py3-none-any.whl", hash = "sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"}, - {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, + {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, + {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, ] [[package]] @@ -1049,14 +1048,14 @@ files = [ [[package]] name = "pydocstyle" -version = "6.2.2" +version = "6.3.0" description = "Python docstring style checker" category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pydocstyle-6.2.2-py3-none-any.whl", hash = "sha256:021b33525927b43b4469c2715694c38082cb98146b52342df652b30806e3cb61"}, - {file = "pydocstyle-6.2.2.tar.gz", hash = "sha256:5714e3a96f6ece848a1c35f581e89f3164867733609f0dd8a99f7e7c6b526bdd"}, + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, ] [package.dependencies] @@ -1101,7 +1100,6 @@ mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} tomlkit = ">=0.10.1" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] spelling = ["pyenchant (>=3.2,<4.0)"] @@ -1189,19 +1187,19 @@ files = [ [[package]] name = "requests" -version = "2.28.1" +version = "2.28.2" description = "Python HTTP for Humans." category = "dev" optional = false python-versions = ">=3.7, <4" files = [ - {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.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" @@ -1298,18 +1296,18 @@ gitlab = ["python-gitlab (>=1.3.0)"] [[package]] name = "setuptools" -version = "65.6.3" +version = "67.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, - {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, + {file = "setuptools-67.0.0-py3-none-any.whl", hash = "sha256:9d790961ba6219e9ff7d9557622d2fe136816a264dd01d5997cfc057d804853d"}, + {file = "setuptools-67.0.0.tar.gz", hash = "sha256:883131c5b6efa70b9101c7ef30b2b7b780a4283d5fc1616383cdf22c83cbefe6"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] @@ -1426,14 +1424,14 @@ files = [ [[package]] name = "urllib3" -version = "1.26.13" +version = "1.26.14" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {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.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, ] [package.extras] @@ -1658,5 +1656,5 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "1eb4e746e4751aeb5f81637eb6ba5d3a5597fd519ff1d0dba7a79896f14e32b2" +python-versions = "^3.10" +content-hash = "20609711c632731243b2d9e8fa145d360b34ad50b40d45ee3c4adb870b2d96e8" diff --git a/pyproject.toml b/pyproject.toml index 1c461e1..bc271de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,9 +9,19 @@ readme = "README.md" homepage = "https://github.com/robbinjanssen/home-assistant-ojmicroline-thermostat" repository = "https://github.com/robbinjanssen/home-assistant-ojmicroline-thermostat" documentation = "https://github.com/robbinjanssen/home-assistant-ojmicroline-thermostat" +classifiers = [ + "Framework :: AsyncIO", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3", + "Topic :: Software Development :: Libraries :: Python Modules", +] [tool.poetry.dependencies] -python = "^3.9" +python = "^3.10" ojmicroline-thermostat = { git = "https://github.com/robbinjanssen/python-ojmicroline-thermostat.git", branch = "main" } [tool.poetry.group.dev.dependencies]