I came across Home Assistant recently but haven't used it yet. I have been working on a project to make embedded web bas ed IDE's for programmable devices that behave like PLC's and HMI's. I have a PLC type device working on and ESP32-P4 that you connect to and program in a browser.
I wanted to have a touch screen LCD to connect and control it with. To do this I got an ESP32-S3 based 7" LCD from WaveShare. I created a web based IDE that is served from the ESP32 that allows you to design your screen layout and write custom script to react to events from the buttons and set point controls. The web layout is stored as JSON and then used by the firmware on the ESP32 to create LVGL based controls that match the web design.
The HMI and PLC both use Tags as the underlying data source. A tag is just another name for a variable that you create and access from your PLC or HMI. The reason I'm posting here is because I added an MQTT interface that links to the Tags. So you can publish or subscribe to MQTT data like any other device. That allows you to control or display other devices using your MQTT data sources. This might be of interest to users who want a drag and drop method of creating LCD panels and adding some script to respond to MQTT data without flashing an MCU reapeatedly. There is a web flasher for the device on Github so there's no need to install any IDF or Arduino framework to try it out. Currently it only supports the one Waveshare LCD that I used but the project is MIT licensed so it can be used and expanded to other devices.
I made a little YouTube video (I'm not great at that) about the HMI and how it works. The whole thing is just starting so expect issues if you try it. https://youtu.be/Iz2J7VkQpUw?si=7cJOZx_ny-GOxpKl