Compare commits
No commits in common. "main" and "v0.15.11" have entirely different histories.
11
README.md
11
README.md
@ -1,14 +1,3 @@
|
|||||||
# Announcement: I have to take the project down in the next few days
|
|
||||||
> Dear User,
|
|
||||||
>
|
|
||||||
> We are writing to inform you that we have discovered two Home Assistant integration plug-ins developed by you ( https://github.com/Andre0512/hon and https://github.com/Andre0512/pyhOn ) that are in violation of our terms of service. Specifically, the plug-ins are using our services in an unauthorized manner which is causing significant economic harm to our Company.
|
|
||||||
> We take the protection of our intellectual property very seriously and demand that you immediately cease and desist all illegal activities related to the development and distribution of these plug-ins. We also request that you remove the plug-ins from all stores and code hosting platforms where they are currently available.
|
|
||||||
> Please be advised that we will take all necessary legal action to protect our interests if you fail to comply with this notice. We reserve the right to pursue all available remedies, including but not limited to monetary damages, injunctive relief, and attorney's fees.
|
|
||||||
> We strongly urge you to take immediate action to rectify this situation and avoid any further legal action. If you have any questions or concerns, please do not hesitate to contact us.
|
|
||||||
>
|
|
||||||
> Haier Europe Security and Governance Department
|
|
||||||
|
|
||||||
|
|
||||||
**This python package is unofficial and is not related in any way to Haier. It was developed by reversed engineered requests and can stop working at anytime!**
|
**This python package is unofficial and is not related in any way to Haier. It was developed by reversed engineered requests and can stop working at anytime!**
|
||||||
|
|
||||||
# pyhOn
|
# pyhOn
|
||||||
|
@ -7,10 +7,10 @@ class Appliance(ApplianceBase):
|
|||||||
def attributes(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
def attributes(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
||||||
data = super().attributes(data)
|
data = super().attributes(data)
|
||||||
if data.get("lastConnEvent", {}).get("category", "") == "DISCONNECTED":
|
if data.get("lastConnEvent", {}).get("category", "") == "DISCONNECTED":
|
||||||
data["parameters"]["temp"].value = 0
|
data["parameters"]["temp"].value = "0"
|
||||||
data["parameters"]["onOffStatus"].value = 0
|
data["parameters"]["onOffStatus"].value = "0"
|
||||||
data["parameters"]["remoteCtrValid"].value = 0
|
data["parameters"]["remoteCtrValid"].value = "0"
|
||||||
data["parameters"]["remainingTimeMM"].value = 0
|
data["parameters"]["remainingTimeMM"].value = "0"
|
||||||
|
|
||||||
data["active"] = data["parameters"]["onOffStatus"].value == 1
|
data["active"] = data["parameters"]["onOffStatus"] == "1"
|
||||||
return data
|
return data
|
||||||
|
@ -7,7 +7,7 @@ from pyhon.parameter.base import HonParameter
|
|||||||
class Appliance(ApplianceBase):
|
class Appliance(ApplianceBase):
|
||||||
def attributes(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
def attributes(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
||||||
data = super().attributes(data)
|
data = super().attributes(data)
|
||||||
parameter = data.get("parameters", {}).get("onOffStatus")
|
parameter = data["parameters"]["onOffStatus"]
|
||||||
is_class = isinstance(parameter, HonParameter)
|
is_class = isinstance(parameter, HonParameter)
|
||||||
data["active"] = parameter.value == 1 if is_class else parameter == 1
|
data["active"] = parameter.value == 1 if is_class else parameter == 1
|
||||||
return data
|
return data
|
||||||
|
@ -89,11 +89,8 @@ class HonCommand:
|
|||||||
def parameter_value(self) -> Dict[str, Union[str, float]]:
|
def parameter_value(self) -> Dict[str, Union[str, float]]:
|
||||||
return {n: p.value for n, p in self._parameters.items()}
|
return {n: p.value for n, p in self._parameters.items()}
|
||||||
|
|
||||||
def _load_parameters(self, attributes: Dict[str, Dict[str, Any] | Any]) -> None:
|
def _load_parameters(self, attributes: Dict[str, Dict[str, Any]]) -> None:
|
||||||
for key, items in attributes.items():
|
for key, items in attributes.items():
|
||||||
if not isinstance(items, dict):
|
|
||||||
_LOGGER.info("Loading Attributes - Skipping %s", str(items))
|
|
||||||
continue
|
|
||||||
for name, data in items.items():
|
for name, data in items.items():
|
||||||
self._create_parameters(data, name, key)
|
self._create_parameters(data, name, key)
|
||||||
for rule in self._rules:
|
for rule in self._rules:
|
||||||
@ -147,11 +144,7 @@ class HonCommand:
|
|||||||
self.appliance.sync_command_to_params(self.name)
|
self.appliance.sync_command_to_params(self.name)
|
||||||
try:
|
try:
|
||||||
result = await self.api.send_command(
|
result = await self.api.send_command(
|
||||||
self._appliance,
|
self._appliance, self._name, params, ancillary_params
|
||||||
self._name,
|
|
||||||
params,
|
|
||||||
ancillary_params,
|
|
||||||
self._category_name,
|
|
||||||
)
|
)
|
||||||
if not result:
|
if not result:
|
||||||
_LOGGER.error(result)
|
_LOGGER.error(result)
|
||||||
|
@ -190,7 +190,6 @@ class HonAPI:
|
|||||||
command: str,
|
command: str,
|
||||||
parameters: Dict[str, Any],
|
parameters: Dict[str, Any],
|
||||||
ancillary_parameters: Dict[str, Any],
|
ancillary_parameters: Dict[str, Any],
|
||||||
program_name: str = "",
|
|
||||||
) -> bool:
|
) -> bool:
|
||||||
now: str = datetime.utcnow().isoformat()
|
now: str = datetime.utcnow().isoformat()
|
||||||
data: Dict[str, Any] = {
|
data: Dict[str, Any] = {
|
||||||
@ -209,8 +208,6 @@ class HonAPI:
|
|||||||
"parameters": parameters,
|
"parameters": parameters,
|
||||||
"applianceType": appliance.appliance_type,
|
"applianceType": appliance.appliance_type,
|
||||||
}
|
}
|
||||||
if command == "startProgram" and program_name:
|
|
||||||
data.update({"programName": program_name.upper()})
|
|
||||||
url: str = f"{const.API_URL}/commands/v1/send"
|
url: str = f"{const.API_URL}/commands/v1/send"
|
||||||
async with self._hon.post(url, json=data) as response:
|
async with self._hon.post(url, json=data) as response:
|
||||||
json_data: Dict[str, Any] = await response.json()
|
json_data: Dict[str, Any] = await response.json()
|
||||||
@ -322,12 +319,6 @@ class TestAPI(HonAPI):
|
|||||||
command: str,
|
command: str,
|
||||||
parameters: Dict[str, Any],
|
parameters: Dict[str, Any],
|
||||||
ancillary_parameters: Dict[str, Any],
|
ancillary_parameters: Dict[str, Any],
|
||||||
program_name: str = "",
|
|
||||||
) -> bool:
|
) -> bool:
|
||||||
_LOGGER.info(
|
_LOGGER.info("%s - %s", str(parameters), str(ancillary_parameters))
|
||||||
"%s - %s - %s",
|
|
||||||
str(parameters),
|
|
||||||
str(ancillary_parameters),
|
|
||||||
str(program_name),
|
|
||||||
)
|
|
||||||
return True
|
return True
|
||||||
|
@ -6,7 +6,7 @@ CLIENT_ID = (
|
|||||||
"3MVG9QDx8IX8nP5T2Ha8ofvlmjLZl5L_gvfbT9."
|
"3MVG9QDx8IX8nP5T2Ha8ofvlmjLZl5L_gvfbT9."
|
||||||
"HJvpHGKoAS_dcMN8LYpTSYeVFCraUnV.2Ag1Ki7m4znVO6"
|
"HJvpHGKoAS_dcMN8LYpTSYeVFCraUnV.2Ag1Ki7m4znVO6"
|
||||||
)
|
)
|
||||||
APP_VERSION = "2.4.7"
|
APP_VERSION = "2.3.5"
|
||||||
OS_VERSION = 31
|
OS_VERSION = 31
|
||||||
OS = "android"
|
OS = "android"
|
||||||
DEVICE_MODEL = "exynos9820"
|
DEVICE_MODEL = "exynos9820"
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
aiohttp>=3.8
|
aiohttp~=3.9
|
||||||
yarl>=1.8
|
yarl~=1.9
|
||||||
typing-extensions>=4.8
|
typing-extensions~=4.8
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
black>=22.12
|
black~=23.11
|
||||||
flake8>=6.0
|
flake8~=6.1
|
||||||
mypy>=0.991
|
mypy~=1.7
|
||||||
pylint>=2.15
|
pylint~=3.0
|
||||||
setuptools>=62.3
|
setuptools~=68.2
|
||||||
|
4
setup.py
4
setup.py
@ -7,7 +7,7 @@ with open("README.md", "r", encoding="utf-8") as f:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="pyhOn",
|
name="pyhOn",
|
||||||
version="0.15.15",
|
version="0.15.11",
|
||||||
author="Andre Basche",
|
author="Andre Basche",
|
||||||
description="Control hOn devices with python",
|
description="Control hOn devices with python",
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
@ -21,7 +21,7 @@ setup(
|
|||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
python_requires=">=3.10",
|
python_requires=">=3.10",
|
||||||
install_requires=["aiohttp>=3.8", "typing-extensions>=4.8", "yarl>=1.8"],
|
install_requires=["aiohttp~=3.9", "typing-extensions~=4.8", "yarl~=1.9"],
|
||||||
classifiers=[
|
classifiers=[
|
||||||
"Development Status :: 4 - Beta",
|
"Development Status :: 4 - Beta",
|
||||||
"Environment :: Console",
|
"Environment :: Console",
|
||||||
|
Loading…
Reference in New Issue
Block a user