Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flipper Zero AC remote apps

Twenty infrared air-conditioner remotes for the Flipper Zero, one app per IR protocol, plus a detector that tells you which one you need. Each lives in its own folder and builds independently with ufbt.

Why separate apps rather than one universal remote? Because you only own one air conditioner. Install the single app that matches it and pin that to your Flipper's favourites, and the remote is two button presses away — instead of launching a large app and picking your way through brand and protocol menus every time you want to change the temperature. Each app is also smaller, and only ever offers the modes and buttons your unit actually has, so there is nothing on screen that does nothing.

App Protocol Also covers
ballu_ac_remote Ballu YKR-K/002E, 13 B
carrier_ac_remote Carrier AC64, 64-bit Surrey
coolix_ac_remote Coolix, 24-bit Beko, Midea OEMs
daikin_ac_remote Daikin ARC433, 35 B
delonghi_ac_remote De'Longhi PAC A95, 64-bit
fujitsu_ac_remote Fujitsu, 16 B + 7 B Fujitsu General, OGeneral
goodweather_ac_remote Goodweather, 48-bit Rapid
gree_ac_remote Gree, 8 B Amana, Cooper & Hunter, EKOKAI, RusClimate, Soleus Air
haier_ac_remote Haier YR-W02, 14 B Daichi, Mabe
kelon_ac_remote Kelon, 48-bit Hisense, AUX
kelvinator_ac_remote Kelvinator, 16 B Gree YAP0F8/YAPOF3, Sharp A5VEY/YB1FA, Green
lg_ac_remote LG / LG2, 28-bit General Electric
midea_ac_remote Midea, 48-bit Comfee, Danby, Kaysun, Keystone, Lennox, MrCool, Pioneer, Trotec
mitsubishi_ac_remote Mitsubishi Electric, 18 B MSZ / MSH / MLZ series
mitsubishi_heavy_ac_remote Mitsubishi Heavy ZM-S, 19 B
neoclima_ac_remote Neoclima, 12 B Soleus Air
panasonic_ac_remote Panasonic, 27 B
samsung_ac_remote Samsung AR, 14 B + 21 B
tcl_ac_remote TCL112, 14 B Daewoo, Electrolux, Leberg, Teknopoint
toshiba_ac_remote Toshiba, 9 B Carrier (some)

Which app do I need?

Install ac_detector first, point your existing remote at the Flipper's infrared window and press Power. It reads the frame, names the protocol, lists the brands that ship it, and tells you which app above to use.

This matters more than it sounds, because the name on the front of an air conditioner often has nothing to do with the protocol inside it. A Tornado, a Vivax and a Beko may all speak Coolix; a Ballu speaks Electra; a Sharp may speak Kelvinator. The detector reads what the remote actually sends.

Mitsubishi Electric and Mitsubishi Heavy Industries are different companies with different protocols, and both have an app here. Kelvinator is worth calling out too: Gree's YAP0F8 and YAPOF3 handsets and Sharp's A5VEY speak it, not their own makers' protocols.

It knows 70 frame formats across 54 protocols and around 100 brands — considerably more than this repo has apps for — so it will also tell you when your unit uses something we have not built a remote for yet, and print the payload so you can report it. Signals it cannot make sense of, such as flicker from lamps or a switching supply, are filtered out and never disturb the reading on screen. See ac_detector/docs/DETECTION.md for how it decides.

Model pickers

Several manufacturers ship more than one frame format, and nothing in a received signal says which one a given unit wants. Those apps put a Model row on the Setup screen; the choice is saved to the SD card and survives a restart. The names match what AC Detector prints on its Model page, so you can read the format off the detector and pick the same entry.

App Models
daikin ARC433, ARC477, ARC484, ARC423, BRC4C15, ARC480, BRC52B, DGS01
haier YR-W02, HSU07, AC160, AC176
mitsubishi 144-bit, 112-bit, 136-bit
fujitsu ARDB1, ARJW2, ARRAH2E, ARREB1E, ARREW4E, ARRY4
gree YAW1F, YBOFB, YX1FSF
kelon RCH-R0Y3, DG11R2
mitsubishi_heavy ZM-S, ZJ-S
lg, midea, panasonic, toshiba see each app's Setup screen

Samsung is the exception: its 21-byte "extended" frame is a message type rather than a model — a real handset sends it for power, timer and sleep changes and the short one otherwise — so the app does the same automatically and offers no choice.

Building

cd <app>_ac_remote
ufbt            # build
ufbt launch     # build, upload and run on a connected Flipper

They are developed against the Unleashed dev SDK. To point ufbt at it:

ufbt update --index-url=https://up.unleashedflip.com/directory.json --channel=dev

Using them

The layout is the same in every app: Mode and Fan open a dropdown (OK to open, OK again to confirm and transmit), temperature has - / +, then the buttons that particular AC actually has, then Extra and Setup.

  • An inverted (filled) button is the one the cursor is on.
  • A ring around a button means that toggle is believed to be on. The AC sends nothing back, so it is the app's own guess, not a reading.
  • Temperature changes are debounced by 800 ms, so holding + transmits once.
  • Extra holds commands the main screen cannot express — fixed vane positions, timers, less common functions — and shows the payload of the last transmission at the bottom.
  • Setup persists settings to the SD card, and on protocols with several incompatible handset generations it also picks the variant.

Handset variants

Six apps expose a variant picker in Setup, because nothing in the IR signal says which generation a unit expects:

App Setting Options
fujitsu Model ARRAH2E, ARREB1E, ARRY4, ARREW4E, ARDB1, ARJW2
panasonic Model JKE, LKE, NKE, DKE, CKP, RKR
lg Protocol LG, LG2
gree Model YAW1F, YBOFB, YX1FSF
midea Model Standard, Kaysun
toshiba Remote Generic, WA-TH0x

All default to the first option. If a unit ignores the app entirely, this is the first thing worth changing — LG vs LG2, for instance, differ only in the header timings, so the wrong one is simply not decoded.

Testing

Every app carries a host-side test for its encoder:

cd <app>_ac_remote && ./tests/run.sh

The protocol modules deliberately include nothing from the Flipper SDK, so they compile and run with plain cc on a desktop. Each test rebuilds the frame from the generated timings with an independent decoder and checks it against the reference library's published constants, layout and checksum, over every reachable mode / fan / temperature combination.

That verifies the encoding. It cannot verify that a particular air conditioner responds — model variants are real, and only hardware settles that.

Credits

The UI and app structure come from sokogen/flipperzero-htw-ac-remote, an HTW air-conditioner remote for the Flipper. These apps keep its layout, state handling and IR transmit path, with the protocol layer replaced and the views generalised so one template serves every protocol.

Protocol definitions were ported from two projects, and the tests check against their published constants:

  • IRremoteESP8266src/ir_*.h / ir_*.cpp. The primary reference for almost every protocol here; its bitfield unions are the strictest description of each frame.
  • ESPHomeesphome/components/*. Used where it is clearer, and the only source for Ballu, which IRremoteESP8266 does not implement.

Where the two disagree, IRremoteESP8266's union wins — for example ESPHome's Gree component writes absolute Celsius into byte 1, which also sets a timer bit; these apps follow the union instead.

Licence

MIT, inherited from the original HTW app. See LICENSE.

About

Air Conditioners Infrared remote controller apps

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages