Tasmota on your KinCony board, from the browser

Plug the board in with a USB-C cable and click install. No Python, no esptool, no PlatformIO, and no build to set up: these are the builds the official Tasmota installer does not have, for boards it does not cover.

2 boards Wi-Fi set up in the browser GPL-3.0 firmware, public source
Why this exists

The published binaries do not fit these boards

Each of these three gaps is enough to leave a board half dead, and two of them fail without a single error message.

The full IR driver

The standard ESP32-S3 build has the basic one, which cannot pick an emitter: eight terminals behave as one. The IR preset has the full driver but drops 97 features to fit a 4 MB chip, SPI among them, and with it the Ethernet.

The PCF8574 expanders

The 16 relays and 16 inputs of the A16v3 sit behind I2C expanders, and that driver is commented out in every official build. The board boots with nothing to switch.

Ethernet without a USB cable

The W5500 of both boards shares two pins with the serial console. Without a USB host the console takes them and the link never comes up. The fix is in these builds, and was accepted upstream.

Install

Pick your board

Chrome or Edge on a desktop computer. Web Serial, which the installer needs, does not exist on Firefox, Safari, Android or iOS.

KinCony AG8

Infrared hub, ESP32-S3
8 IR emitters IR receiver air conditioners W5500 Ethernet RS485 and RS232 Modbus and TCP bridge 1-Wire MAX31865

A command chooses which of the eight emitters it leaves through, and air conditioner frames are built by the firmware from vendor, mode, temperature, fan and vane.

Running here since September 2026, Ethernet with no USB cable Use Chrome or Edge on a desktop to flash. Web Serial needs HTTPS or localhost.
After flashing, six steps

Every command below goes in the board's own page: Tools → Console. Paste it, press Enter.

  1. Wi-Fi. Right after flashing, the installer asks for your network: fill it in and you are done here.
    • Skipped that screen? With no Wi-Fi saved, the board opens a network of its own, tasmota-XXXX. Join it from a phone or a laptop, open http://192.168.4.1 and enter your Wi-Fi there.
    • The installer says Disconnected? That is the board restarting: Tasmota restarts to join the network once it has the Wi-Fi, and on these boards the USB comes straight from the ESP32-S3, so every restart makes the port vanish from the browser. The Wi-Fi is already saved. Close it, wait 20 seconds and look for the board on your router or in Home Assistant.
  2. Template. Send this first, then Module 0 as a second command. The board restarts after Module 0.
    Template {"NAME":"KinCony AG8","GPIO":[0,5536,5600,0,0,0,0,0,0,1056,1057,1058,1059,1060,1061,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,5568,736,704,672,0,0,1063,1088],"FLAG":0,"BASE":1}
    Module 0
  3. Ethernet. 8 is the W5500 chip on this board. It restarts by itself, and after that the cable works without USB.
    EthType 8
  4. Learning any remote. Without this, a remote whose protocol Tasmota does not know is ignored; with it, its raw timings come through and can be learned.
    SetOption58 1
  5. Protection and clock. One line, three settings:
    Backlog SetOption65 1; SetOption36 0; Timezone -3
    • SetOption65 1: seven quick power cycles no longer erase every setting.
    • SetOption36 0: five or six quick restarts no longer clear the template and the module.
    • Timezone -3: Brazil time. Tasmota ships at UTC+1; put your own offset instead of -3.
  6. Home Assistant. Add Tasmota IR from HACS: learned keys become buttons, air conditioners become climate entities.

The infrared side of this board is handled by Tasmota IR, which has its own documentation.

KC868-A16v3

16 relays, ESP32-S3
16 relays 16 inputs 4 analog inputs W5500 Ethernet RF 433 MHz DS3231 clock SSD1306 display RS485

The PCF8574 driver for the 32 channels, which no official build carries, next to the clock, the display and the bridges.

Running here since September 2026: 16 relays, 16 inputs, Ethernet with no USB cable Use Chrome or Edge on a desktop to flash. Web Serial needs HTTPS or localhost.
After flashing, seven steps

Every command below goes in the board's own page: Tools → Console. Paste it, press Enter.

  1. Wi-Fi. Right after flashing, the installer asks for your network: fill it in and you are done here.
    • Skipped that screen? With no Wi-Fi saved, the board opens a network of its own, tasmota-XXXX. Join it from a phone or a laptop, open http://192.168.4.1 and enter your Wi-Fi there.
    • The installer says Disconnected? That is the board restarting: Tasmota restarts to join the network once it has the Wi-Fi, and on these boards the USB comes straight from the ESP32-S3, so every restart makes the port vanish from the browser. The Wi-Fi is already saved. Close it, wait 20 seconds and look for the board on your router or in Home Assistant.
  2. Template. Send this first, then Module 0 as a second command. The board restarts after Module 0.
    Template {"NAME":"KinCony A16v3","GPIO":[0,5536,5600,0,4704,4707,4705,4706,1152,640,608,0,0,0,0,5568,9408,9440,1120,0,0,0,0,0,0,0,0,1314,0,0,1376,736,704,672,0,0,1312,1313],"FLAG":0,"BASE":1}
    Module 0
    • The template already puts a WS2812 LED strip on GPIO41, pin 3 of the P12 header beside the ESP32-S3 (39 40 41 GND 3V3). With no strip wired there, the light it creates simply lights nothing.
    • The display stays off on purpose. Turning it on takes an Option A3 mark in the template, and the display then claims a power slot of its own: after the 16 relays it becomes power 17, the strip light moves to 18 and stops answering in Home Assistant. On a board without the strip, mark GPIO45 as 6210 and the display comes on.
  3. Ethernet. 8 is the W5500 chip on this board. It restarts by itself, and after that the cable works without USB.
    EthType 8
  4. The two files. Download pcf8574.dat and display.ini, upload both under Tools → Manage File system, then restart:
    Restart 1
  5. Inputs. Each input drives the relay with the same number, always. One line, two settings:
    Backlog SetOption114 0; SwitchMode0 3
    • SetOption114 0: input 1 switches relay 1, and so on up to 16, on the board itself, with no Home Assistant and no network. It is Tasmota's default, written out so it also undoes the variant below.
    • SwitchMode0 3: for pushbuttons, the wall buttons that spring back, the usual case. Each press toggles the relay; releasing does nothing.
    • Latching switches and pulsing outputs are set per channel, and the input keeps its relay. SwitchMode1 0 gives input 1 a latching switch, the kind that stays where you leave it: every flip toggles the relay, so the switch position never has to match the relay when Home Assistant switches it too. PulseTime13 5 turns relay 13 off by itself after 0.5 s: 1 to 111 are tenths of a second, above that it is seconds plus 100, and 0 removes the pulse.
    • Home Assistant shows the 16 relays, not the inputs: with SetOption114 0 Tasmota does not announce them.

    Variant: inputs for Home Assistant only. The inputs stop driving the relays and show up in Home Assistant as 16 binary sensors, and an automation decides what each one does:

    Backlog SetOption114 1; SwitchMode0 2
    • SetOption114 1: closing input 1 no longer flips relay 1.
    • SwitchMode0 2: a closed contact reads on. It is also what makes Home Assistant create the inputs as sensors; in mode 0 they only show up as automation triggers.
    • Switching between the two removes or recreates the 16 input sensors in Home Assistant, along with any area or name given to them there.
  6. Protection and clock. One line, three settings:
    Backlog SetOption65 1; SetOption36 0; Timezone -3
    • SetOption65 1: seven quick power cycles no longer erase every setting.
    • SetOption36 0: five or six quick restarts no longer clear the template and the module.
    • Timezone -3: Brazil time. Tasmota ships at UTC+1; put your own offset instead of -3.
  7. LED strip. Only with a strip on GPIO41. One line, two settings:
    Backlog Pixels 7; Dimmer 30
    • Pixels 7: how many LEDs the strip has. Tasmota starts at 30; put your own count.
    • Dimmer 30: 30% brightness. The strip draws from the board's 5 V, the same rail as the ESP32, so keep it low until you have measured that 5 V with the strip lit.

Both files come from this repository. pcf8574.dat turns the 32 expander pins into relays and inputs; display.ini describes the SSD1306 and is only read on a board that turns the display on (step 2).

Already flashed

Find a board on your network

Plug it in by USB and let this page ask it. It answers with its Wi-Fi and cable addresses; nothing is written to the board.

Close the installer's window first: only one page can hold the port. A board that was already running from 12 V before the USB went in does not answer over USB; the second button restarts it so it does, and the relays go back to where they were.

Back the board up first

Installing writes the factory image at offset 0: bootloader, partition table, application and safeboot. On a board coming from another firmware the installer first asks whether to erase the flash, and the box starts unticked. Coming from KCS, tick it: that is what makes the board boot clean, and it also erases KCS along with everything configured and learned inside it.

The KCS firmware itself is not lost. KinCony publishes it per board on their forum, and the file inside the zip is a complete image, bootloader and partition table included, so it goes back at offset 0 the same way. What no download brings back is what the board held: the settings, the scenes and the IR codes learned into the KCS slots. A browser cannot read the flash, and that is what the backup is for.

python -m esptool --chip esp32s3 --port COM3 --baud 460800 read_flash 0x0 0x1000000 backup-16MB.bin

The file must be exactly 16,777,216 bytes, and write_flash 0x0 backup-16MB.bin puts the board back the way it came, settings and learned codes included.

How it works

Three minutes, start to finish

Plug the board in

USB-C, with a cable that carries data. If the board is not listed, hold DW, tap RST, release DW, and try again.

Click install

The browser writes the factory image straight from this page, asking first whether to erase the flash. Nothing is installed on your computer.

Join your Wi-Fi

The installer offers to set Wi-Fi up over the same cable. From there the board has its own web interface, and Home Assistant finds it by MQTT.

Where the firmware comes from

Tasmota, plus two environments

Both builds come from cateim/Tasmota, branch tasmota-kincony: Tasmota itself with one environment per board. Every push there builds both and publishes a release, and this page serves the binaries of the latest one.

Updating Tasmota

Merge the upstream release into that branch and push. Only two files carry the changes, so that is the whole update, and the site picks the result up within a day.

Updating a board

The page recognises a board that already runs one of these builds, by the name it announces (Tasmota AG8, Tasmota A16v3), and offers Update, written without erasing, and the settings are kept: tested on the A16v3. Backing the configuration up first (Configuration, Backup) still costs nothing. Uploading the plain .bin under Firmware Upgrade, in the board's own web interface, does the same from the board itself.

Reading the source

Tasmota is GPL-3.0 and the branch is public, which is the complete source of what this page writes onto your board.

FAQ

Before you click

Can I go back to the KinCony firmware?

Yes, and you do not need the backup for the firmware itself. KinCony publishes KCS per board on their forum, free and without an account, as one zip per board (KCS_AG8_*.bin, KCS_A16V3_*.bin). Each is a complete image with bootloader and partition table, so write_flash 0x0 with the file from the zip puts the board back on KCS. The board comes back blank, though: the settings, the scenes and the IR codes learned into the KCS slots live in the board's own storage, and only the backup taken before flashing brings those back.

Does it work from a phone or tablet?

No. Flashing needs Web Serial, which only Chrome and Edge on a desktop have. Once the board is flashed, its web interface and Home Assistant work from any browser.

Are my settings kept when I flash from here?

On a board already running one of these builds, yes: it is offered Update, written without erasing, and the settings are kept, as tested on the A16v3. Anything else, KCS included, gets a fresh install, and the installer asks first whether to erase; coming from KCS, tick it. Either way, a configuration backup (Configuration, Backup) takes a second and restores everything at once.

Where is my board on the network?

Find my board, on this page, asks it over USB and shows both addresses. By hand, press Install on the board's card, pick the port, open Logs & Console, type Status 5 and press Enter. In the answer, IPAddress is the Wi-Fi address and the one inside "Ethernet" is the cable's; 0.0.0.0 means that side is not connected. The board only listens on USB when the cable was already plugged in as it started: if it was powered from 12 V first, the log says no SOF packet detected on USB port. Restart it with the USB plugged in, by the reset button or by cutting the power, and ask again.

The serial log says "SHA-256 comparison failed". Is it broken?

No. The lines right after it say Attempting to boot anyway..., and the board does. The chip's ROM checks a SHA-256 stored at the end of the bootloader before starting it, and without secure boot a mismatch is only a warning. Builds from before 24 September 2026 wrote a bootloader that declared 4 MB of flash; on its first boot Tasmota corrects that byte to the real 16 MB (resize_max_flash_size_k in partition_core.be) and leaves the hash as it was, so the ROM prints this on every boot from then on. The Expected hash in the log is the one for the 4 MB header, and the Calculated one is the same bootloader with 16 MB. Current builds declare 16 MB from the start, with a matching hash, so a board installed or updated from this page stops showing it. An update over the air replaces only the application and keeps the old bootloader, and the message with it, which is harmless.

Does the board phone home?

No. Tasmota talks to your MQTT broker and to whatever you point it at. The over the air update URL is deliberately left empty in these builds, so an accidental upgrade cannot replace them with a firmware that lacks the drivers these boards need.