<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home Assistant on Such geek. Wow.</title><link>https://www.ericlight.com/categories/home-assistant.html</link><description>Recent content in Home Assistant on Such geek. Wow.</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 27 Sep 2026 00:00:00 +1200</lastBuildDate><atom:link href="https://www.ericlight.com/categories/home-assistant/index.xml" rel="self" type="application/rss+xml"/><item><title>Replacing the Tuya components from an Orbit 60w LED Floodlight</title><link>https://www.ericlight.com/post/orbit-60w-floodlight.html</link><pubDate>Sun, 27 Sep 2026 00:00:00 +1200</pubDate><guid>https://www.ericlight.com/post/orbit-60w-floodlight.html</guid><description>&lt;img src="https://www.ericlight.com/post/orbit-60w-floodlight/orbit-floodlight.png" alt="Featured image of post Replacing the Tuya components from an Orbit 60w LED Floodlight" /&gt;&lt;h2 id="tldr"&gt;TL;DR:
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;You can replace the Tuya CBU with an Espressif ESP8685-WROOM-06-H4 and ESPhome&lt;/li&gt;
&lt;li&gt;To put it in flash mode, pull GPIO8 high, and GPIO9 low.&lt;/li&gt;
&lt;li&gt;If you’re on Linux, make sure your user is in the dialout group to write to the device.&lt;/li&gt;
&lt;li&gt;Scroll to the end for the YAML&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-article"&gt;The article:
&lt;/h2&gt;&lt;p&gt;(I actually wrote the detail of this post in 2024 but didn&amp;rsquo;t convert it into an actual blog until now. Good times.)&lt;/p&gt;
&lt;p&gt;The Orbit range of smart lighting is another rebranded Tuya line. As in previous iterations of this article, controlling the device with Home Assistant was slow, presumably due to the calls to the Tuya datacentre - and I really just wanted to have devices that are entirely under my control.&lt;/p&gt;
&lt;p&gt;The Tuya component is underneath an obvious antenna box at the top of the floodlight:&lt;/p&gt;
&lt;p&gt;&lt;img alt="The floodlight’s control board, with the Tuya CBU module at the top" class="gallery-image" data-flex-basis="177px" data-flex-grow="73" height="1242" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ericlight.com/post/orbit-60w-floodlight/cbu-module.jpeg" srcset="https://www.ericlight.com/post/orbit-60w-floodlight/cbu-module_hu_6ac9f607d799114d.jpeg 800w, https://www.ericlight.com/post/orbit-60w-floodlight/cbu-module.jpeg 918w" width="918"&gt;&lt;/p&gt;
&lt;p&gt;This is a very simple device – no buttons, no switches, just a simple light output. At the top is a Tuya CBU module, and below that is a Cokintech KP35026, the PWM-controlled power switch driving the LED’s.&lt;/p&gt;
&lt;p&gt;The traces here are very, very simple. You’ve got 3.3v and GND where you expect them to be, and then you have an output from P7 and P8 – here’s the pinout from &lt;a class="link" href="https://docs.libretiny.eu/boards/cbu/" target="_blank" rel="noopener"
 &gt;https://docs.libretiny.eu/boards/cbu/&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tuya CBU module pinout diagram" class="gallery-image" data-flex-basis="314px" data-flex-grow="131" height="500" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ericlight.com/post/orbit-60w-floodlight/cbu-pinout.png" width="656"&gt;&lt;/p&gt;
&lt;p&gt;The backlit view really helps demonstrate how little is going on here:&lt;/p&gt;
&lt;p&gt;&lt;img alt="The control board lit from behind, showing its traces" class="gallery-image" data-flex-basis="165px" data-flex-grow="69" height="1746" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ericlight.com/post/orbit-60w-floodlight/backlit.jpeg" srcset="https://www.ericlight.com/post/orbit-60w-floodlight/backlit_hu_73d5db24edd07cfd.jpeg 800w, https://www.ericlight.com/post/orbit-60w-floodlight/backlit.jpeg 1205w" width="1205"&gt; &lt;img alt="The backlit board with the P7, P8, 3.3v and GND traces marked in red" class="gallery-image" data-flex-basis="165px" data-flex-grow="69" height="1746" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ericlight.com/post/orbit-60w-floodlight/backlit-annotated.png" srcset="https://www.ericlight.com/post/orbit-60w-floodlight/backlit-annotated_hu_f414c961a9b9d9d5.png 800w, https://www.ericlight.com/post/orbit-60w-floodlight/backlit-annotated.png 1205w" width="1205"&gt;&lt;/p&gt;
&lt;p&gt;Before I desoldered the CBU from the board, I connected RX and TX and dumped the Tuya firmware, and decoded this with the OpenBeken flash tool from &lt;a class="link" href="https://github.com/openshwprojects/BK7231GUIFlashTool" target="_blank" rel="noopener"
 &gt;https://github.com/openshwprojects/BK7231GUIFlashTool&lt;/a&gt;. Here are the interpreted results:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device configuration, as extracted from Tuya:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- LED Cool (Channel 4) on P8
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- LED Warm (Channel 5) on P7
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- PWM Frequency 1000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device seems to be using CBU module, which is using BK7231N.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;And the Tuya section starts, as usual, at 2023424
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Too easy. Swapping that to the ESP8685-WROOM-06-H4 pinout turns them into GPIO3 and GPIO7. Additionally, to put it into download mode we need to bring IO8 high and IO9 low. And if you’re running Linux, your user needs to be in the dialout group for permissions to write to /dev/ttyUSB0.&lt;/p&gt;
&lt;p&gt;&lt;img alt="ESP8685-WROOM-06-H4 module pinout diagram" class="gallery-image" data-flex-basis="195px" data-flex-grow="81" height="512" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ericlight.com/post/orbit-60w-floodlight/esp8685-pinout.png" width="418"&gt;&lt;/p&gt;
&lt;h2 id="the-yaml-snippet"&gt;The YAML snippet:
&lt;/h2&gt;&lt;p&gt;The YAML is below. Note this is partial YAML; other important parts such as enabling the API and OTA are left out. This uses the ledc platform to manage the PWM output, and the cwww (Cold-White, Warm-White) light platform to present a usable control. I also chose ALWAYS_ON as the power-restore light, as that allows people to also use it as a regular light.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;esp32&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;board&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;esp32-c3-devkitm-1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;framework&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;arduino&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;output&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ledc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO3&lt;/span&gt; &lt;span style="color:#75715e"&gt;# P8 on CBU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio_cold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ledc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO7&lt;/span&gt; &lt;span style="color:#75715e"&gt;# P7 on CBU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio_warm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;light&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;cwww&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;LED Floodlight&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;cold_white&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio_cold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;warm_white&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio_warm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;cold_white_color_temperature&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;6536&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;K&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;warm_white_color_temperature&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2000&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;K&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;constant_brightness&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;restore_mode&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ALWAYS_ON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Replacing the Tuya components from a Mercator Ikuü light switch</title><link>https://www.ericlight.com/post/replacing-tuya-mercator-ikuu.html</link><pubDate>Wed, 04 Dec 2024 00:00:00 +1300</pubDate><guid>https://www.ericlight.com/post/replacing-tuya-mercator-ikuu.html</guid><description>&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/esp-12f-installed.jpeg" alt="Featured image of post Replacing the Tuya components from a Mercator Ikuü light switch" /&gt;&lt;h2 id="tldr"&gt;TL;DR
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;You can replace the Tuya WB3S with an Espressif ESP-12F (or ESP-12E) and ESPHome.&lt;/li&gt;
&lt;li&gt;You need to pull EN up to 3.3v, &lt;strong&gt;and&lt;/strong&gt; pull GPIO15 down to ground via a 10k resistor.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re on Linux, make sure your user is in the &lt;code&gt;dialout&lt;/code&gt; group to write to the ESP-12.&lt;/li&gt;
&lt;li&gt;Scroll to the end for the YAML.
&lt;ul&gt;
&lt;li&gt;Comment out the appropriate buttons for your model.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve confirmed that SSW01G-WIFI uses button 2, and SSW02G-WIFI uses buttons 1 and 3. Presumably SSW03G-WIFI uses all of them, but I don&amp;rsquo;t have one to confirm.&lt;/li&gt;
&lt;li&gt;Make sure you change &lt;code&gt;light.toggle&lt;/code&gt; into &lt;code&gt;fan.toggle&lt;/code&gt; if you decide to declare a button as a fan, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-article"&gt;The article
&lt;/h2&gt;&lt;p&gt;The Mercator Ikuü range of smart devices is another rebranded Tuya line. As a result, controlling the device with Home Assistant was slow due to the calls to the Tuya datacentre - and honestly I just wanted to have devices that are entirely under my control. I started by disassembling the switch and immediately saw the Tuya WB3S on the underside of the top plate.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/switch-disassembled.jpeg"
			alt="The disassembled switch: a yellow plastic case with a green circuit board"&gt;&lt;figcaption&gt;
			&lt;p&gt;The switch, opened up. The controlling PCB sits on the underside of the top plate.&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Be careful lifting this PCB out, as there are pins connecting it to the 240v plane - make sure you lift it straight. This set of connecting pins is labelled CN1, and is responsible for connecting the controlling MCU to the 240v relays.&lt;/p&gt;
&lt;p&gt;On the board is the Tuya WB3S, and a Holtek BS813A-1 touch-button sensor (&lt;a class="link" href="https://www.holtek.com.tw/page/vg/BS81xA-x" target="_blank" rel="noopener"
 &gt;https://www.holtek.com.tw/page/vg/BS81xA-x&lt;/a&gt;). It does not appear to contain a TuyaMCU chip. Judging by the silkscreen and component placements, the same pcb is used for the SSW01G-WIFI, SSW02G-WIFI, and SSW03G-WIFI models.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/holtek-bs813a-pinout.png"
			alt="Pinout diagram of the Holtek BS813A-1 in an 8SOP-A package" width="320"&gt;&lt;figcaption&gt;
			&lt;p&gt;The Holtek BS813A-1 touch sensor pinout.&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The way this Holtek sensor works (which I discovered later in the blog by dumping the firmware): while a touch is sensed by the Key1 leg, it will pull Kout1 down to zero volts. This is momentary and returns to 3.3v once the touch is removed. The microchip listens for the appropriate pin to be pulled low, and triggers a relay in response.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/board-cn1-and-wb3s.jpeg"
			alt="The controller PCB, showing the WB3S module and the CN1 header with a red arrow pointing at one end"&gt;&lt;figcaption&gt;
			&lt;p&gt;The controller board. The red arrow marks where I (incorrectly) oriented my CN1 numbering from.&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The red arrow is where I oriented my CN1 pin naming from. I&amp;rsquo;ll refer to the CN1 pins in reading order; pins 1-5 on the top row, pins 6-10 on the bottom. After writing this, I realised that this is almost certainly backwards: the bottom-right pin — what I call pin 10 — has a square base, indicating it should have been pin 1. Oh well.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the pinout of the Tuya WB3S, from &lt;a class="link" href="https://docs.libretiny.eu/boards/wb3s/" target="_blank" rel="noopener"
 &gt;https://docs.libretiny.eu/boards/wb3s/&lt;/a&gt;:&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/wb3s-pinout.png"
			alt="Pinout diagram of the Tuya WB3S module"&gt;&lt;figcaption&gt;
			&lt;p&gt;The Tuya WB3S pinout, via LibreTiny.&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Note, the grey numbers in the WB3S pinout are simply positions; the pin &lt;em&gt;names&lt;/em&gt; are burgundy (i.e., P23 is in position 2). I can see PCB traces at positions 15, 14, 13, 12, 10, 9 (GND), and 8 (3.3v). Positions 17-22 are visibly unsoldered.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WB3S GND (position 9) goes to CN1 Pins 1 &amp;amp; 2&lt;/li&gt;
&lt;li&gt;WB3S 3.3v (position 8) goes to CN1 Pin 6&lt;/li&gt;
&lt;li&gt;WB3S P6 (position 7) goes to CN1 Pin 7, via resistor R7, and on to LED1&lt;/li&gt;
&lt;li&gt;WB3S P7 (position 10) goes to CN1 pin 9, via resistor R14, and on to LED3&lt;/li&gt;
&lt;li&gt;WB3S P8 (position 14) goes to capacitor C2 and onto CN1 pins 1 &amp;amp; 2&lt;/li&gt;
&lt;li&gt;WB3S P9 (position 13) goes to CN1 pin 8, via resistor R13 and LED2 (empty on this model)&lt;/li&gt;
&lt;li&gt;WB3S P10 (position 15) goes to resistor R2, which is empty on this model&lt;/li&gt;
&lt;li&gt;WB3S P24 (position 6) goes to resistor R11, which goes on to LED4 (plate lighting)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And the inverse to cross-check myself: on CN1, I can see upper PCB traces at 1, 2, 6, 7 and 8 - plus an underside trace to 9.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CN1 Pin 1 goes to WB3S GND (position 9)&lt;/li&gt;
&lt;li&gt;CN1 Pin 2 goes to WB3S GND (position 9)&lt;/li&gt;
&lt;li&gt;CN1 Pin 6 goes to WB3S 3.3v (position 8)&lt;/li&gt;
&lt;li&gt;CN1 Pin 7 goes to WB3S P6 (position 7) via resistor R7, which then goes to LED1&lt;/li&gt;
&lt;li&gt;CN1 Pin 8 goes to WB3S P9 (position 13) - this also traces to R13, which is empty on this model, and appears to be for the absent middle switch LED2&lt;/li&gt;
&lt;li&gt;CN1 Pin 9 goes to WB3S P7 (position 10) via resistor R14, and onward to LED3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I double-checked this by powering up the WB3S chip and checking the voltage on the pins as I hit the buttons. All seems correct so far. Before I desoldered the WB3S from the pcb, I connected RX and TX and dumped the Tuya firmware, and decoded this with the OpenBeken flash tool from &lt;a class="link" href="https://github.com/openshwprojects/BK7231GUIFlashTool" target="_blank" rel="noopener"
 &gt;https://github.com/openshwprojects/BK7231GUIFlashTool&lt;/a&gt;. Here are the interpreted results:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device configuration, as extracted from Tuya:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Button (channel 1) on P24 [pinout position 6]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Relay (channel 2) on P7 [pinout position 10]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Button (channel 2) on P8 [pinout position 14]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Relay (channel 1) on P6 [pinout position 7]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device seems to be using WB3S module, which is using BK7231T.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;And the Tuya section starts, as usual, at 2023424
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These results didn&amp;rsquo;t align with my original tracing, so it was really lucky I did this. Although I had correctly identified the relays in position 7 &amp;amp; 10, I had misunderstood how the buttons work. It was thanks to this discrepancy that I started testing the levels while touching the touch sensors, and discovered that button-presses cause the voltage to drop on P8 (position 14) and P24 (position 6). This led me to read up on how the Holtek chip works, helping me to understand what&amp;rsquo;s going on here!&lt;/p&gt;
&lt;p&gt;So, indeed we have two buttons and two relays. The buttons are held HIGH while untouched, and momentarily drop to LOW when touch is detected. In turn, these state changes trigger toggles to the relay outputs. I can finally start writing YAML!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m replacing this Tuya WB3S with an Espressif ESP12-F, which is a perfect drop-in replacement:&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/esp-12f-pinout.jpeg"
			alt="ESP-12 pinout diagram" width="500"&gt;&lt;figcaption&gt;
			&lt;p&gt;The ESP-12 pinout.&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Translating from the WB3S, it appears:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;P24 (position 6 on the WB3S) maps to GPIO12 on the ESP12&lt;/li&gt;
&lt;li&gt;P7 (position 10 on the WB3S) maps to GPIO15 on the ESP12&lt;/li&gt;
&lt;li&gt;P8 (position 14 on the WB3S) maps to GPIO5 on the ESP12&lt;/li&gt;
&lt;li&gt;P6 (position 7 on the WB3S) maps to GPIO13 on the ESP12&lt;/li&gt;
&lt;li&gt;P10 (position 15 on the WB3S) maps to RX on the ESP12&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Additionally, EN needs to be pulled up to 3.3v, and GPIO15 needs to be pulled down to ground via a 10k resistor.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is my first time programming an ESP12 (my previous ESPHome devices have been ESP32&amp;rsquo;s), and I did find them a little more difficult. Skill issue, I know.&lt;/p&gt;
&lt;p&gt;I ended up bumping into a permissions problem, and thanks to &lt;a class="link" href="https://community.home-assistant.io/t/solved-flashing-failing-immediately-on-linux/567332" target="_blank" rel="noopener"
 &gt;this post&lt;/a&gt; I was able to resolve the error &lt;code&gt;failed to execute 'open' on 'SerialPort': Failed to open serial port&lt;/code&gt;. The solution was either to add myself to the &lt;code&gt;dialout&lt;/code&gt; group, or set the ACL on &lt;code&gt;ttyUSB0&lt;/code&gt; (only a transient workaround):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo setfacl -m u:USERNAME:rw /dev/ttyUSB0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG dialout USERNAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Desoldering the original Tyua WB3S was enough of a challenge that I asked a friend for help, and he did the first couple for me while I waited for a hot plate to arrive from AliExpress. Then I did the third one and only slightly cooked my board.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://www.ericlight.com/post/replacing-tuya-mercator-ikuu/esp-12f-installed.jpeg"
			alt="The PCB with an ESP-12F soldered in place of the WB3S, with a resistor bodged across two pads"&gt;&lt;figcaption&gt;
			&lt;p&gt;The ESP-12F in place, complete with the 10k pull-down bodge resistor.&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Result! Not only is this 100% locally-controlled and forever disconnected from the Tuya Cloud, but the response time is ridiculously fast now. What used to be 200~2000ms response time (yes really, depending on network congestion), is now closer to 20ms (unmeasurably fast with my &amp;hellip; [checks] &amp;hellip; zero instruments).&lt;/p&gt;
&lt;h2 id="the-yaml-snippet"&gt;The YAML snippet
&lt;/h2&gt;&lt;p&gt;Example YAML for the one-gang, two-gang, and/or three-gang versions is below. If you&amp;rsquo;re brand-new to ESPHome, note this is partial YAML and will need tweaking; other important parts such as enabling the API and OTA are left out.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;esp8266&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;board&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;esp01_1m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;binary_sensor&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Button 1 - not present on the SSW01G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;button_1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;number&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;inverted&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;mode&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;INPUT_PULLUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;on_press&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;then&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;light.toggle&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;internal&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Button 2 - not present on the SSW02G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;button_1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;number&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;RX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;inverted&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;mode&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;INPUT_PULLUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;on_press&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;then&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;light.toggle&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;internal&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Button 3 - not present on the SSW01G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;button_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;number&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;inverted&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;mode&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;INPUT_PULLUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;on_press&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;then&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;light.toggle&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;internal&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;output&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Relay 1 - not present on the SSW01G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Relay 2 - not present on the SSW02G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Relay 3 - not present on the SSW01G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GPIO15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Expose the relays as lights and/or fans&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;light&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Light 1 - not present on the SSW01G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;binary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Switch 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;output&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Light 2 - not present on the SSW02G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;binary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Switch 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;output&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Light 3 - not present on the SSW01G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;binary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Switch 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;output&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Example of having a fan on button 3 instead - if you do this, you must change&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# the earlier matching button declaration from light.toggle to fan.toggle.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;fan&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;platform&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;binary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Button 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Ensuite Fan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;output&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;relay_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;switch_3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it! Upload that fragment into your normal ESPHome setup, and you should be in business.&lt;/p&gt;</description></item></channel></rss>