Control hOn devices with python
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Andre Basche 6162cd3f98 Bump version 2 weeks ago
.github/workflows Add python3.12 support 3 months ago
pyhon Fix checks 2 weeks ago
.flake8 Add flake8 config 7 months ago
.gitignore Fix missing zone attribute 10 months ago
.pylintrc Fix checks 2 weeks ago
LICENSE Init commit 1 year ago Next try to add py.typed in package 7 months ago Update 3 weeks ago
mypy.ini Improve type hints 7 months ago
requirements.txt Update requirements 2 weeks ago
requirements_dev.txt Fix dependencies 3 months ago Bump version 2 weeks ago

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!


PyPI - Status PyPI PyPI - Python Version PyPI - License PyPI - Downloads
Control your Haier, Candy and Hoover appliances with python! The idea behind this library is, to make the use of all available commands as simple as possible.


pip install pyhOn

Quick overview

To get an idea of what is possible, use the commandline-tool pyhOn. This command requests all available options of connected appliances from the hOn api of your Haier Account.

$ pyhOn --user --password pass123
========== WM - Waschmaschine ==========
      texture: 1
      totalElectricityUsed: 28.71
      totalWashCycle: 35
      totalWaterUsed: 2494
      transMode: 0
      max: 5
      min: 3
      step: 1
      - 0
      - 400
      - 600
      - 800


List devices

import asyncio
from pyhon import Hon

async def devices_example():
    async with Hon(USER, PASSWORD) as hon:
        for appliance in hon.appliances:

Execute a command

async with Hon(USER, PASSWORD) as hon:
    washing_machine = hon.appliances[0]
    pause_command = washing_machine.commands["pauseProgram"]
    await pause_command.send()

Set command parameter

async with Hon(USER, PASSWORD) as hon:
    washing_machine = hon.appliances[0]
    start_command = washing_machine.commands["startProgram"]
    for name, setting in start_command.settings:
        print("Setting", name)
        print("Current value", setting.value)
        if setting.typology == "enum":
            print("Available values", setting.values)
            setting.value = setting.values[0]
        elif setting.typology == "range":
            print("Min value", setting.min)
            print("Max value", setting.max)
            print("Step value", setting.step)
            setting.value = setting.min + setting.step


To get the translation of some keys like programs, you can use the translation command to see all of hOn's available translations

$ pyhOn translate es
    CONTENT_CHOOSE_NAME: Antes de continuar, debes elegir un nombre...
    DEFAULT_NAME: Aire acondicionado
    TITLE_CHOOSE_NAME: ¡Elije un nombre para tu aire acondicionado!
    TITLE_SAVE_NAME: Para cambiar el nombre de tu aparato:

This generates a huge output. It is recommended to pipe this into a file

$ pyhOn translate fr > hon_fr.yaml
$ pyhOn translate en --json > hon_en.json

Usage example

This library is used for the custom HomeAssistant Integration "Haier hOn".


Any kind of contribution is welcome!

Please add your appliances data to our hon-test-data collection.
This helps us to develop new features and not to break compatibility in newer versions.