More than a
thermostat.
Kiri Bridge controls Mitsubishi heat pumps directly over CN105, keeps Apple Home synchronized with the physical unit, and carries its own setup, update, diagnostic, and recovery tools.
Complete CN105 control
Power, operating mode, target temperature, fan speed, fixed airflow positions, and Swing — all through the indoor unit's own CN105 connection.
Climate and fanpower · auto · heat · cool · temperature · fan
Read room temperature, set the target, choose supported operating modes, and select Auto, Quiet, or discrete fan levels. Cool-only and heat-only units can advertise only the modes they actually support.
Up/down airflowhorizontal flap
Control the horizontal flap that directs air toward the ceiling or floor. Fixed positions, Auto, and Swing are exposed when supported by the indoor unit.
Left/right airflowvertical vanes
Control motorized vertical vanes independently. Units with manual vanes can disable this capability, which removes the WebUI control and prevents incompatible HomeKit services from being created.
State that stays in sync
The indoor unit is the source of truth. Kiri does not assume a command worked, and it does not forget that someone may still use the Mitsubishi remote.
Physical remote synchronizationfull CN105 polling
Kiri polls the complete CN105 state groups. Changes made from the original remote — including power, mode, temperature, fan, and airflow — flow back into Apple Home and the WebUI.
Confirmed commandsquery after set
After a WebUI command, Kiri immediately queries the indoor unit and retries briefly until the requested value is reported. Controls stay busy during confirmation; failures show an error and restore the previous displayed value.
Only changed fields are sentsafer across different models
Changing temperature does not resend untouched fan, mode, or vane fields. An unsupported left/right vane cannot accidentally block an otherwise valid power or temperature command.
Native Apple Home
The ESP32 speaks HomeKit directly. No Home Assistant, Homebridge, cloud account, subscription, or always-on bridge server is required.
Climate controlslocal HomeKit accessory
Power, current state, target mode, current and target temperature, fan speed, and Swing are mapped to the indoor unit. Pair with the QR or manual setup code shown in Kiri's local Admin page.
Single or separate airflow tileyour preferred Home layout
Separate Airflow is the default: fan speed and Swing live on a dedicated service that is easier to automate and avoids duplicate Eve characteristics. AC power and Fan Active remain synchronized. Users who prefer the legacy grouped layout can switch back to a single AC tile.
AC Capabilitieshide what the unit cannot do
Tell Kiri whether the unit supports Auto, Heat, Cool, up/down airflow, and motorized left/right airflow. The selection controls both the local WebUI and which HomeKit modes and advanced services are advertised.
Advanced airflow mappingtilt and swing by axis
Optionally expose up/down and left/right fixed positions as separately named Window Covering-style services, plus dedicated Swing switches for either axis. Legacy Swing continues to control any axis that has not received its own switch; when both switches exist, the combined control is removed to avoid duplication.
Local WebUI
Every production device hosts a responsive controller at http://<device-ip>:8080/. Nothing leaves the local network.
Responsive controllerdesktop and mobile
Control the complete indoor unit, review live status, pair HomeKit, and configure the device from a phone or computer. Pending requests lock relevant controls and server errors remain visible.
Focus-aware live refresh5 seconds · 15 seconds · off
Initial load always fetches state immediately. Periodic refresh pauses when the page is hidden or unfocused, catches up when the user returns, and avoids overwriting a control currently being edited or submitted.
Device administrationidentity · HomeKit · CN105 · maintenance
Configure device identity, WiFi, HomeKit presentation, AC capabilities, polling, logs, LED GPIO, and expert UART settings. Hardware board and firmware version are clearly identified throughout the UI.
Guided setup
The normal buyer flow is browser-driven and assumes a preassembled kit. No command line or source build is required.
WiFi hotspot setuprecommended
Connect to the installer's PROV_KIRI_XX hotspot and open 192.168.4.1:8080. From one guided flow, configure WiFi, probe CN105, verify safe settings, and upload production firmware.
BLE provisioningoptional fallback
Use desktop Chrome through Kiri's public provisioning page, or Espressif's mobile app. Production firmware can reopen a temporary BLE provisioning window after a long press of the hardware button.
Installer remains reachabledesigned for recovery
The installer keeps its SoftAP and BLE provisioning paths available after an attempt, making it possible to replace credentials or retry an install without first recovering over USB.
Safe updates and recovery
Board-specific .kiri packages carry the metadata needed to reject the wrong firmware before it reaches flash.
Validated firmware packagesboard · variant · project · size · hash
The browser inspects package metadata before upload, and the ESP32 validates the OTA image again before selecting it. Atom Lite, AtomS3 Lite, installer, and production packages are explicitly identified.
Local OTAreview before reboot
Upload from the Admin page, review version, variant, destination partition, and warnings, then explicitly confirm the reboot. Installer and production firmware share the same validation and confirmation component.
Browser USB flasherguided WebSerial recovery
The flasher verifies the ESP32 bootloader, shows chip and MAC details, previews every flash region, reports actual write progress, and releases the serial port on success. The final step asks for a manual restart to avoid unstable automatic reset behavior seen in some macOS Chrome versions.
Diagnostics built in
Support tools live on the controller, so intermittent problems can be investigated without shipping every unit back or attaching a debugger.
Persistent logslive tail · download · history
Asynchronous SPIFFS-backed logs preserve useful boot and CN105 history without blocking control. View, tail, download, and clear logs directly from the WebUI.
CN105 link healthpackets · errors · polls · pending sets
Inspect connection phase, attempts, polling cycles, RX and TX packets, RX errors, pending SET requests, and the latest transport error.
Maintenance toolsreboot · reset · LED · expert configuration
Reboot the controller, reset WiFi or HomeKit, clear logs, choose a log level, test the status LED, tune polling, and access clearly marked expert UART and NVS tools when support requires them.
Two supported boards
One codebase supports M5Stack Atom Lite and AtomS3 Lite with board-aware pins, metadata, setup behavior, and release packages.
On-device Lua automation
Small local rules that react to the indoor unit without depending on Apple Home automations or another always-on server.
Safe local rulesLua 5.4 · API v1 · bounded execution
The constrained Lua 5.4 engine can react to state changes and power events, read CN105 telemetry, change climate and airflow settings, retain small values in NVS, and write to the Kiri log.
Scripts are validated and atomically saved with a last-known-good copy. Memory, instructions, actions, and persistent storage are bounded; feedback loops and action storms are automatically stopped. The latest runs and CN105 confirmation result remain visible in Admin.
Open the Automation Editor → for API completion, syntax preflight, and ready-to-adapt examples.
Ready to set one up?
Start with the buyer-focused setup guide, or inspect every line of the firmware on GitHub.