The community tables: where the payload map started
Before anything had been captured on a W41H1 bus, the project took its first map of the command
and status payloads from two community projects for older Hisense modules. This page keeps what
was taken, says which of it survived, and lists the firmware’s ac_* field names next to the
functions they turned out to be.
Status of this page
History. Do not build from the tables on this page. The reference for the bus is 03-rs485-ac-protocol.md, which was confirmed on a real unit and found several of the values below wrong for it. The byte-offset tables that once stood here were removed when doc 03 replaced them.
The sources are pslawinski/esphome_airconintl
(messages.h, device_status.h) and deiger/AirCon. Both
target the older AEH-W4A1 module. NOTICE.md
records what this project took from each and which frames are still their bytes.
To build a replacement board today, use the project’s own component:
firmware/esphome/README.md and
docs/guide/ESP32-Replacement-Build.md.
What the community description said, and what holds
| Community description | On the W41H1 |
|---|---|
| RS-485, 9600 8N1, an ESP32 UART through a MAX485 to the 4-pin port, DE and RE from a GPIO | Holds. Wiring is in ../hardware/pinouts.md |
Frame F4 F5, a 2-byte big-endian length, payload, a 2-byte little-endian checksum, F4 FB |
The tags hold. The length is one byte at offset 4 and the checksum is high byte first (doc 03, frame envelope) |
| Status frame of 82 bytes | 160 bytes |
Room temperature as (raw - 32) × 0.5556 |
Whole degrees in the panel’s unit |
Fan command values 05, 07, 09 |
0B to 13 in steps of two, auto 01 |
| Eco at status byte 35 bit 3 | Bit 2 |
| Purify at status byte 36 bit 5 | Unsettled: the stock capability table says bit 7 (doc 03) |
| Power on, power off and the status poll as literal frames | Still sent as published. No capture of them from the owner’s bus exists |
Value tables
From deiger/AirCon. These are semantic values, the numbers an application uses, not the bytes
on the wire. Doc 03 has the wire encoding.
| Function | Values | Today |
|---|---|---|
| Mode | FAN=0, HEAT=1, COOL=2, DRY=3, AUTO=4 | In use as the command index (Mode in the codec) |
| Fan speed | AUTO=0, LOWER=5, LOW=6, MEDIUM=7, HIGH=8, HIGHER=9 | NOTICE.md records that the source’s fan table did not match this bus and was replaced. The codec’s fan index also runs 5 to 9 for low to high, with 0 for auto and 1 for quiet |
| Power | OFF=0, ON=1 | |
| Temperature | whole °C or °F, a unit flag selects. The source notes that raw units may be half degrees | Whole degrees. The unit flag is status byte 26 bit 1 |
| Vertical swing | OFF=0, ON=1 | |
| Horizontal swing | OFF=0, ON=1 | No motor on the units measured |
| Sleep | STOP=0, 1, 2, 3, 4 | Four profiles: General, Old, Young, Kids |
| Eco | OFF=0, ON=1 | |
| Quiet (mute) | OFF=0, ON=1 | |
| 8 °C heat | OFF=0, ON=1 | Not implemented. See 14-open-questions.md |
The firmware’s ac_* names and their functions
The vendor firmware names fifteen capability fields. This was the first evidence of what a unit can support. They are the flags of the ProductType reply, and their positions in that reply are in doc 10 §5a. The status positions in the right column were the community’s and are superseded by doc 03.
| Firmware name | Function | Status position first assumed |
|---|---|---|
ac_cool_heat |
heat pump (cooling and heating) | |
ac_fan_mute |
quiet | byte 36 bit 2 (holds) |
ac_humidity |
humidity | bytes 22 and 23 (never confirmed) |
ac_8heat, ac_enable_8heat |
8 °C heat | |
ac_power_save |
eco | byte 35 bit 3 (wrong, it is bit 2) |
ac_power_display |
panel display and dimmer | |
ac_purify |
ioniser | byte 36 bit 5 (unsettled) |
ac_swing_direction_8, ac_swing_follow |
louvre positions | byte 35 bits 6 and 7 are the plain swing flags |
ac_infinite_fan_speed |
stepless fan | byte 16 (the fan byte) |
ac_q_display, ac_ai, ac_dr |
quick display, smart mode, demand response |
Other community components
akrabi/hisense_ac_esphome and zoffypal/esphome_hisence_ac speak the same kind of bus and
were on the first reading list. Their payload maps were never checked against this unit. If you
use one of them on a W41H1, capture real frames first
(../tools/README.md) and compare mode, temperature and fan against doc 03
before trusting a write.