# For people wanting custom IoT device builds

**URL:** <https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992>\
**Category:** Hardware\
**Tags:** esphome\
**Created:** [26 October 2026 12:04 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992 "2026-10-26T12:04:35Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 12:04 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/1 "2026-10-26T12:04:35Z")

</div>

If you checked out ESPHome in the past and found it too complex to get going, I thought I'd drop an update here to say that It has been (and continues to be) massively updated over the years. It now has a multi-platform desktop app and/or a web server that makes dealing with all the background complexities and compiles completely transparent and easy.

My own ESPHome configs are quite complex with multiple import fragments for reusability and the new app had no problems at all importing and immediately putting it into use. Very cool.

In addition, ESPHome is no longer restricted to just ESP microprocessors but has decent support for multiple different types now.

For those not in the know, ESPHome was originally an offshoot of Home Assistant and still works closely with it if you want to use it that way. However, you absolutely do not need HA at all and I've always used it without.

It is a tool for building custom firmware for microprocessor platforms such as the ESP32, ESP8266, Pi Pico and much more. It is _configuration_ driven using simple to understand YAML files (now with the app/website you get a helpful built in editor).

It has thousands of contributed modules that cover just about every type of sensor, controller and integration you could imagine. It is also easy to drop into C++ within (or external to) a config if you need something custom.

In terms of Node-RED integration, ESPHome has a very good MQTT module as well as HTTP(S) API's.

It even has a Zigbee module for use with hardware that supports it (ESP32 H2 and C6 for example) so low-cost custom Zigbee IoT is now possible.

Check out the blog for more info:

> **[Blog](https://esphome.io/blog/)**

Installation and other documentation here:

> **[Install ESPHome](https://esphome.io/install/)**
>
> Install ESPHome as a Home Assistant app, a desktop app for macOS, Windows and Linux, or a CLI tool.

---

<div class="post-metadata">

**Author:** ![kuema](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/kuema/32/6542_2.png) [@kuema](https://discourse.nodered.org/u/kuema)\
**Post date:** [26 October 2026 12:58 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/2 "2026-10-26T12:58:36Z")

</div>

Nice summary! 👍

I've recently returned to ESPHome myself.

Latest AI tools have gotten very proficient in helping with the config, especially when you need to write lambdas for specific functions. I've got some tricky stuff up and running in no time using ChatGPT. 🤯

I also tested the Zigbee integration recently using an ESP32 C6. Works flawlessly! 😎

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 13:01 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/3 "2026-10-26T13:01:50Z")

</div>

Not had much time for my IoT devices recently but I did get the new app up and running and gave some feedback that they were happy to deal with, nice.

I consider ESPHome the ideal companion for Node-RED if you are doing any kind of custom IoT. It is super reliable and ultra-flexible. Just like Node-RED! 😃

---

<div class="post-metadata">

**Author:** ![kuema](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/kuema/32/6542_2.png) [@kuema](https://discourse.nodered.org/u/kuema)\
**Post date:** [26 October 2026 13:17 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/4 "2026-10-26T13:17:25Z")

</div>

Exactly.

My older devices, mostly still ESP8266, are still running ESPeasy. Never needed to touch them after they were up and running.

For my newer devices, I'm moving over to ESPHome, and plan on migrating the older ones as well.  
I'm not using the desktop app though, but the container image to build the firmwares.

The new Dashboard is nice, but you can't make much use of advanced YAML techniques with their integrated editor. I'm using imports and substitutions quite excessively to get reusable components, so I ended up using VSCode with the ESPHome plugin, works nicely. It uses the Dashboard API to validate the config.

Integration with Node-RED is done via MQTT, of course. 😎

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [26 October 2026 14:21 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/5 "2026-10-26T14:21:39Z")

</div>

Well it remains too complex for me.

The help does say initial connection is the trickiest bit.  
ESPHome does not see any serial ports (EXP32-C3 connected by USB cable).  
Troubleshooting says try a different cable. Nope.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 15:01 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/6 "2026-10-26T15:01:40Z")

</div>

> [@jbudd](#):
>
> ESPHome does not see any serial ports (EXP32-C3 connected by USB cable).

What is the host OS?

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [26 October 2026 15:06 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/7 "2026-10-26T15:06:41Z")

</div>

Linux (Mint)

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 15:08 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/8 "2026-10-26T15:08:45Z")

</div>

> [@kuema](#):
>
> The new Dashboard is nice, but you can't make much use of advanced YAML techniques with their integrated editor

Didn't know that YAML _had_ any advanced techniques? 😃

> [@kuema](#):
>
> VSCode with the ESPHome plugin, works nicely. It uses the Dashboard API to validate the config.

Not tried that. I wonder if it works with VSCodium because I've given up on VSCode itself.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 16:00 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/9 "2026-10-26T16:00:21Z")

</div>

> [@jbudd](#):
>
> Linux (Mint)

When you plug in your ESP device, is it recognised by Linux?

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [26 October 2026 16:15 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/10 "2026-10-26T16:15:35Z")

</div>

From tail /var/log/syslog:

```auto
2026-10-26T16:11:11.756899+00:00 EVO wpa_supplicant[751]: wlp46s0: CTRL-EVENT-SIGNAL-CHANGE above=1 signal=-61 noise=9999 txrate=86700
2026-10-26T16:11:12.662451+00:00 EVO kernel: usb 3-5: new full-speed USB device number 24 using xhci_hcd
2026-10-26T16:11:12.787361+00:00 EVO kernel: usb 3-5: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
2026-10-26T16:11:12.787392+00:00 EVO kernel: usb 3-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
2026-10-26T16:11:12.787395+00:00 EVO kernel: usb 3-5: Product: USB JTAG/serial debug unit
2026-10-26T16:11:12.787397+00:00 EVO kernel: usb 3-5: Manufacturer: Espressif
2026-10-26T16:11:12.787401+00:00 EVO kernel: usb 3-5: SerialNumber: AC:A7:04:BA:6B:48
2026-10-26T16:11:12.791331+00:00 EVO kernel: cdc_acm 3-5:1.0: ttyACM0: USB ACM device
2026-10-26T16:11:12.806901+00:00 EVO mtp-probe: checking bus 3, device 24: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-5"
2026-10-26T16:11:12.807010+00:00 EVO mtp-probe: bus: 3, device: 24 was not an MTP device
2026-10-26T16:11:12.815479+00:00 EVO mtp-probe: checking bus 3, device 24: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-5"
2026-10-26T16:11:12.815571+00:00 EVO mtp-probe: bus: 3, device: 24 was not an MTP device

```

And this is the device

```auto
crw-rw---- 1 root dialout 166, 0 Oct 26 16:13 /dev/ttyACM0

```

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 16:38 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/11 "2026-10-26T16:38:02Z")

</div>

OK, that's a good start. Now we need to know what user account runs the app? Then you need to check that the user is in the dialout group.

The alternative is to adjust the permissions for the device.

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [26 October 2026 21:10 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/12 "2026-10-26T21:10:35Z")

</div>

Hmm I got it to recognise the device after many updates, reboots, apt installs and juggling groups.

I didn't get as far as making the ESP do something and report to MQTT. Another day.

But I feel that when you install something, to be considered easy it really should install the prerequisites.

Can you make an ESP with ESPhome serve a web page like Tasmota does? That is absolutely key to my Tasmota devices. There's plenty of problems with Tasmota but at least you can see the device is on the network and talk to it.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 October 2026 21:34 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/13 "2026-10-26T21:34:04Z")

</div>

> [@jbudd](#):
>
> But I feel that when you install something, to be considered easy it really should install the prerequisites.

Honestly, I've not installed it on Linux. I don't do enough updates to make it worth installing anywhere other that my Windows dev PC. Maybe there is still a bit of a way to go to make the app seamless.

> [@jbudd](#):
>
> Can you make an ESP with ESPhome serve a web page like Tasmota does?

Absolutely. It has a web page component that you can enhance with various controls, optional CSS and JS, and basic charts. This is a lot more comprehensive than (at least the last time I looked) Tasmota. There is also a REST API.

> **[Web Server Component](https://esphome.io/components/web_server/)**
>
> Instructions for setting up a web server in ESPHome.

I can share some example YAML configs if you want.

The docs also have a Tasmota migration page:

> **[Migrating from Tasmota](https://esphome.io/guides/migrate_sonoff_tasmota/)**
>
> Migration guide for installing ESPHome on ESPs running Tasmota.

---

<div class="post-metadata">

**Author:** ![kuema](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/kuema/32/6542_2.png) [@kuema](https://discourse.nodered.org/u/kuema)\
**Post date:** [28 October 2026 05:26 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/14 "2026-10-28T05:26:29Z")

</div>

> [@TotallyInformation](#):
>
> Didn't know that YAML _had_ any advanced techniques? 😃

I'm referring to things like include/import. Those are not standard YAML (also not standardized), but mostly parser or runtime specific features.  
With ESPHome it is quite advanced, because you can create reusable components by using the _packages_ feature. Even nesting multiple levels is possible.  
I've not seen comparable features in common parser libs like js-yaml for Node.

> **[Packages](https://esphome.io/components/packages/)**
>
> How to use packages in ESPHome

I use the packages feature a lot to compose my devices. Those are of different _functional_ types, like sensor nodes, Tasmota plugs, ...  
I start with a shared base device config, and simply include the actually attached hardware components in the "packages" section, by simply uncommenting a line, because my sensor nodes have different sets of sensors, depending on their location.

Unfortunately, the ESPHome Dashboard only offers to edit the "main" file, not the includes. Which is quite sad, because they seem to have put a lot of effort in creating an advanced editor with all kinds of completion, assisting features and docs, making the config a lot easier.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [28 October 2026 10:01 UTC](https://discourse.nodered.org/t/for-people-wanting-custom-iot-device-builds/101992/15 "2026-10-28T10:01:58Z")

</div>

> [@kuema](#):
>
> I'm referring to things like include/import.

Ah, I see. Yes, those weren't obvious to begin with. I think I had to ask in the forum. But once I'd set a base folder to my original ESPHome source folder, everything worked as before.

> [@kuema](#):
>
> With ESPHome it is quite advanced, because you can create reusable components by using the _packages_ feature.

Yes, I'd done this from the outset because I have multiple different microprocessor platform types with a lot of common sensors, controls and outputs. Indeed, this is one of the key features that drew me to ESPHome in the first place.

> [@kuema](#):
>
> I use the packages feature a lot to compose my devices.

Yup.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/6/3/639fb55591bf51cdf49311a2dea3689f8f5789e1.png) ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/f/4f2b232684c646844ef808c0307156218ed35fdb.png)

> [@kuema](#):
>
> Unfortunately, the ESPHome Dashboard only offers to edit the "main" file, not the includes. Which is quite sad, because they seem to have put a lot of effort in creating an advanced editor with all kinds of completion, assisting features and docs, making the config a lot easier.

Good point, hopefully they will fix that before too long.

They have certainly come a long way since the earlier days where you had to install all the build chain and python stuff and figure it out yourself.
