Repository navigation
Protocol Overview
nberardi edited this page Jul 18, 2026
·
5 revisions
Defines the binary protocol for remote access between a home automation host and Aprilaire Wi‑Fi thermostats, including HVAC and IAQ equipment control.
| Model | Description |
|---|---|
| 8810 | Universal multistage programmable; Event-Based™ air cleaning |
| 8820 | Touchscreen; humidity or ventilation; outdoor temp sensor; support modules |
| 8830 | 2-piece touchscreen; humidity, dehumidification, ventilation; outdoor + wireless outdoor sensors; support modules |
| 8840 | 7″ color 2-piece; full IAQ; outdoor + wireless outdoor; support modules |
| 8081 | Support module — remote temperature |
| 8082 | Support module — remote temperature + humidity |
- Data packets are identical across models; fields are ignored when the model/configuration does not support them.
- The thermostat may use a separate port for Aprilaire cloud (firmware updates; 8840 weather/pollen). That is not this protocol.
- Time synchronization is the automation system’s responsibility (use Setup / Date and Time).
| Item | Value |
|---|---|
| Protocol | TCP |
| Port | 8000 |
| Model | Host connects to thermostat as TCP server |
| Cloud | Separate connection; do not confuse with HA port |
Some 6000-series devices use port 7000. Confirm per device.
- Power thermostat with 24 VAC on RC & R.
- Enter provisioning / clear-Wi‑Fi mode on the thermostat (menu path varies by model; guide example is 8820: MENU → SETUP → WIFI DISCONNECT AND CLEAR SETTINGS → YES).
- Join thermostat AP SSID (includes model + last 6 of MAC), e.g.
APRILAIRE8820A50107. - Browser:
http://192.168.1.99/index.html— select LAN SSID, password; optional static IP under Advanced. - Save/Apply; find LAN IP (router or scan if DHCP).
- Connect automation client to
IP:8000.
| Type | Initiator | Purpose |
|---|---|---|
| COS | Thermostat | Unsolicited change-of-state when subscribed (replaces polling) |
| Read Request / Response | Host → Thermostat | Query attribute; response is asynchronous |
| Write | Host → Thermostat | Set attribute; NACK if rejected |
| NACK | Thermostat | Error / rejection with status code |
- Prefer COS + Sync over continuous polling.
- Temperatures on the wire are always Celsius (packed ½ °C bytes). See Temperature Encoding.
- Multi-field writes are atomic — any invalid field → NACK, no partial apply.
- Null (0) on many multi-field attributes means “leave this sub-field unchanged.”
- Deadband applies in Auto mode; dual setpoints that violate deadband NACK or cause opposing SP correction + COS.
- Effectively one home-automation TCP session per thermostat (community observation; official app uses another path).
Protocol reference for scrypted-aprilaire · Validate codecs with npm test