This program implements the Ayla Networks LAN API to interact with HiSense WiFi Air Conditioner module, models AEH-W4B1 and AEH-W4E1, as well as Fujitsu FGLair.
As discussed here, the program doesn't seem to fit the AEH-W4A1 module, which relies on entirely different protocol (implemented by the apps Hi-Smart Life, AirConnect, Smart Cool, AC WIFI and טורנדו WiFi). Please let me know if you have a different experience, or tried it with other modules.
The module is installed in A/Cs and humidifiers that are either manufactured or only branded by many other companies. These include Beko, Westinghouse, Winia, Tornado, York and more.
This program is not affiliated with Ayla Networks, HiSense, Fujitsu, any of their subsidiaries, or any of their resellers.
Find the code for your app, from the list below:
If using HomeAssistant, this is the preferred method.
https://github.com/xury77/AirCon
to the list.Use this method if not using HomeAssistant, or if you prefer to set it up outside of HomeAssistant.
Download the docker-compose.yaml
and options.json
. Update all the relevant fields in options.json
:
username
and password
to your app login credentials, and code
to the app code from the list above.
These will be used to discover you A/Cs and get their LAN keys, if there are no config files in the config directory (/opt/hisense
).mqtt_host
to the MQTT broker server, use localhost
if running on the same host.
Leave blank if not using MQTT.mqtt_user
and mqtt_pass
to the MQTT credentials. Leave null (or drop) if no authentication is used.port
to the port to be used by the web server.log_level
to your desired verbosity level.Run:
docker-compose up -d
Check the logs and verify that everything is in shape:
journalctl CONTAINER_NAME=hisense_ac
Profit!
The A/Cs should now be auto-discovered by HomeAssistant or openHAB
(using the HomeAssistant MQTT Components Binding).
SmartThings requires manual setup, using the groovy file, see below.
Use this method if the docker setup above does not work for you.
Download and install aircon module:
python3.10 setup.py install
Run discovery command to fetch the LAN keys that will allow connecting to the A/C. Pass it your login credentials, as well as the code for your app from the list below:
For example:
python3.10 -m aircon discovery tornado-us foo@example.com my_pass
The CLI will generate a config file for each A/C, that needs to be passed to the A/C
control server below. You can select the A/C that the config is generated for by
setting the --device
flag to the device name you configured in the app.
git pull
on the repository and
run setup. You may also need to re-run discovery.python3.10 -m aircon run --port 8888 --config config.json --mqtt_host localhost
Parameters:
--port
or -p
- Port for the web server.--config
- The config file with the credentials to connect to the A/C.--mqtt_host
- The MQTT broker hostname or IP address. Must be set to enable MQTT.--mqtt_port
- The MQTT broker port. Default is 1883.--mqtt_client_id
- The MQTT client ID. If not set, a random client ID will be generated.--mqtt_user
- <user:password> for the MQTT channel. If not set, no authentication is used.--mqtt_topic
- The MQTT root topic. Default is "hisense_ac". The server will listen on topics
<{mqtt_topic}/{property_name}/command> and publish to <{mqtt_topic}/{property_name}/status>.--log_level
- The minimal log level to send to syslog. Default is WARNING.--local_ip
- The local IP address to report to the AC unit(s) as target server. Useful in case the server running this application has multiple IP addresses (e.g. in multiple VLANs), since some/most(?) AC units will refuse to report to an IP address outside of their subnet.curl -ik 'http://localhost:8888/hisense/status'
curl -ik 'http://localhost:8888/hisense/command?property=t_power&value=ON'
In order to use with multiple Air Conditioners, simply add multiple --config params. MQTT topic will contain your topic defined by flag --mqtt_topic (hisense_ac by default) and device MAC address (for uniqueness).
Assuming your username is "pi"
sudo mkdir /opt/hisense
sudo mv config*.json /opt/hisense
sudo chown pi:pi /opt/hisense/*
Create a service configuration file (as root), e.g. /lib/systemd/system/hisense.service
:
[Unit]
Description=Hisense A/C server
After=network.target
[Service]
ExecStart=/usr/bin/python3.10 -m aircon run --port 8888 --config config.json --mqtt_host localhost
WorkingDirectory=/opt/hisense
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
/etc/systemd/system/
:
sudo ln -s /lib/systemd/system/hisense.service /etc/systemd/system/multi-user.target.wants/hisense.service
sudo systemctl enable hisense.service
sudo systemctl start hisense.service
Listed here are the properties available through the API for standard A/Cs (FGLair and humidifers have different properties):
Property | Read Only | Values | Comment |
---|---|---|---|
f_electricity | x | Integer | |
f_e_arkgrille | x | 0, 1 | Alarm from cabinet grille protection |
f_e_incoiltemp | x | 0, 1 | Indoor coil temperature sensor in fault |
f_e_incom | x | 0, 1 | Indoor and outdoor communication in fault |
f_e_indisplay | x | 0, 1 | Communication faulty between indoor control panel and display panel |
f_e_ineeprom | x | 0, 1 | Error in EEPROM of indoor control panel |
f_e_inele | x | 0, 1 | Communication faulty between indoor control panel and indoor power panel |
f_e_infanmotor | x | 0, 1 | Indoor fan motor operation abnormal |
f_e_inhumidity | x | 0, 1 | Indoor humidity sensor in fault |
f_e_inkeys | x | 0, 1 | Communication faulty between indoor control panel and keyboard plate |
f_e_inlow | x | 0, 1 | |
f_e_intemp | x | 0, 1 | Indoor temperature sensor in fault |
f_e_invzero | x | 0, 1 | Fault found from indoor voltage crossing zero detection |
f_e_outcoiltemp | x | 0, 1 | The temperature sensor in outdoor coil faulty |
f_e_outeeprom | x | 0, 1 | Outdoor EEPROM error |
f_e_outgastemp | x | 0, 1 | Exhaust temperature sensor faulty |
f_e_outmachine2 | x | 0, 1 | |
f_e_outmachine | x | 0, 1 | |
f_e_outtemp | x | 0, 1 | Outdoor ambient temperature sensor faulty |
f_e_outtemplow | x | 0, 1 | |
f_e_push | x | 0, 1 | Communication faulty between WiFi control panel and indoor control panel |
f_filterclean | x | 0, 1 | Does the filter require cleaning |
f_humidity | x | Integer | Relative humidity percent |
f_power_display | x | 0, 1 | |
f_temp_in | x | Decimal | Environment temperature in Fahrenheit |
f_voltage | x | Integer | |
t_backlight | ON, OFF | Turn the display on/off | |
t_device_info | 0, 1 | ||
t_display_power | 0, 1 | ||
t_eco | OFF, ON | Economy mode | |
t_fan_leftright | OFF, ON | Horizontal air flow | |
t_fan_mute | OFF, ON | Quite mode | |
t_fan_power | OFF, ON | Vertical air flow | |
t_fan_speed | AUTO, LOWER, LOW, MEDIUM, HIGH, HIGHER | Fan Speed | |
t_ftkt_start | Integer | ||
t_power | OFF, ON | Power | |
t_run_mode | OFF, ON | Double frequency | |
t_setmulti_value | Integer | ||
t_sleep | STOP, ONE, TWO, THREE, FOUR | Sleep mode | |
t_temp | Integer | Temperature in Fahrenheit | |
t_temptype | CELSIUS, FAHRENHEIT | Displayed temperature unit | |
t_temp_eight | OFF, ON | Eight heat mode | |
t_temp_heatcold | OFF, ON | Fast cool heat | |
t_work_mode | FAN, HEAT, COOL, DRY, AUTO | Work mode |
You will need a groovy script to enable SmartThings integration with the Air Conditioner, through the control server above. It currently implements the main functionality (turn on/off, AC mode, fan speed, dimmer etc.).
The groovy file is available here, for download and installation through the Groovy IDE. As I'm continuously improving this script, it would be more efficient to use the IDE's github integration, in order to stay up-to-date.
HomeAsststant is now fully supported through MQTT Discovery. Properly configured devices are auto-configured and populated in the Lovelace dashboard.
Pull requests are always welcome.
Please use YAPF with the style config defined here to style your code. Single quotes are used throughout the code-base. Unfortunately YAPF still doesn't support mandating this (support exists in the fixers branch), so please be mindful.