I made a Custom Component for my Sec-Touch Ventilation Central controller

This is a problem I also had at the start So I understand correctly that everything works?

1 Like

Yes Sir - thank you so much for your project :raised_hands:

Just one further question. By any chance do you have those elements as well: https://www.dezentrale-lueftung.com/wp-content/uploads/2020/07/montage-a-160.pdf

Im searching for a way to made them smart as well, maybe with an relays… I’ve got on pair and they are not connected to the main hub…

Mine are all connected to the SEC-Touch.

Update for deprecations on ESPHome 2026.4

I have done an update that could help us track which other properties we could control with the device.

Theoretically we can run a full scan, then change some property and run a full scan again and then compare the changes.


v1.1.0

Features

  • Sniffer component: Added a new sniffer component to the sec-touch integration that listens for unhandled bus values — useful for discovering unknown device behaviors and expanding component coverage.
  • SET task priority: SET tasks now take priority over pending GET tasks in the queue, ensuring write operations are not blocked behind read requests.
  • Inter-task delay: Added a 30 ms delay between tasks to improve bus stability and reduce communication errors.

Improvements

  • Added debug logging for malformed messages to aid future diagnostics.
  • Added logging for the current sniffer status.
  • General code cleanup following review feedback.

We have a new release with a nice addition thanks to "Mike Houben", Now we can completetly separate the 6 "normal" speeds from the presets ("7-11" special mode speeds)


v1.2.0

What's Changed

Features

  • split_special_modes for fan: New opt-in flag that decouples the 6 real fan speeds from the 5 special modes (Burst, Sleep, Automatic Humidity/CO2/Time). With it enabled, the HA slider exposes levels 1–6 only, while special modes are reachable via preset_mode. Existing configs are fully unaffected (split_special_modes defaults to false).
  • select.sec_touch platform: New writable Mode dropdown for ESPHome's built-in web_server UI. Because ESPHome's web server does not render fan preset_mode dropdowns, this platform gives non-HA users (and local-LAN fallback scenarios) a clickable control for all 7 modes (Off, Normal, Burst, Sleep, Automatic Humidity, Automatic CO2, Automatic Time). The select mirrors device state in real time and validates at config load that a matching fan.sec_touch with the same fan_number exists.
  • New examples: examples/split-mode.yaml and examples/webserver-fallback.yaml demonstrate both features end-to-end.

Bug Fixes

  • Fixed stale-preset flash and stale-echo revert on rapid control changes — a race condition where a quick second command could cause the UI to briefly revert to the previous preset before settling.
  • Fixed slider snapping in split mode: picking Burst now correctly snaps the HA slider to 100% (level 6), while picking Normal preserves the current slider position instead of resetting it to 1.
  • Burst triggered from the physical SEC-Touch panel now also syncs the HA slider to 100% (consistent with the software path).
  • Added missing <map> C++ include.
  • Fixed fan speed range validation on state transition.

Improvements

  • General README and documentation improvements.

Stable release branch

Please use stable as the ref branch in your component settings

external_components:
  - source:
      type: git
      url: https://github.com/distante/esphome-components
      ref: stable

New Contributors


Full Changelog: Comparing v1.1.0...v1.2.0 · distante/esphome-components · GitHub

Many Many Thanks for the excellent work provided here. Since I have a very old sec-touch display controller (which is not compatible with the „official“ Gateway) I think I need to adapt the code provided since I currently get an error Message: Not enough TABs in message (task=GET_DATA property_id=175 len=17 hex: 02 33 32 38 30 30 09 31 37 35 09 33 31 31 39 32 0A ). Task Failed

Could this be related to not matching Baud Rate?
Maybe someone can help how to handle this?

I do not think the baud rate is the problem here. You could try the Sniffer to see what does the device sends.

With that said, doing a transform seems like the message is well formed but it does not has any CRC so that is why a TAB is missing.

02 "32800" TAB "175" TAB "31192" 0A

Maybe your device do not use it, I have pushed a change on the main branch with better logging, you could use it and check if all your fans report the same missing CRC.

Could you please make a github issue with the data if all your fans report a missing CRC? We could probably make the CRC optional since we are not really using it anyway (although maybe we should :grimacing: )

I have found which code reports the "Summer Ventilation" (48) the problem is that I can not find out how to set it. Using the same format that the fans use does nothing.

I am thinking if makes sense to make a release with a switch that can be called but does nothing, or just make it a readonly sensor.

Many Thanks for your support, unfortunatelly i do not get the Sniffer working. If i enter the coresponding yaml code:
`

  • platform: sec_touch_sniffer
    sec_touch_id: sec_touch_component
    name: "Sniffer"
    `

i get the error Message: Couldn't find ID 'sec_touch_component'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "sec_touch_uart".

But if i take a look in the log-files I get for all the fans (their IDs, like 173, 174, 175, 176, 177, 178) the same kind of failure, which looks for me as if the CRC is missing on all of them:

[16:50:25.756][D][sec-touch:050]: SEC-Touch update [16:50:25.758][D][sec-touch:097]: [loop] No Data available, processing task queue [16:50:25.761][D][sec-touch:212]: Processing one task of 6 - type: GET_DATA [16:50:25.766][D][sec-touch-uart:334]: send_get_message [16:50:25.766][D][sec-touch-uart:343]: buffer 32800 173 54142 [16:50:25.769][D][sec-touch:062]: [loop] We are waiting for the response after a task of type GET_DATA [16:50:25.776][D][sec-touch:102]: [loop] Data available (Current buffer size: 0, Task queue size: 5) [16:50:25.780][D][sec-touch-uart:235]: store_data_to_incoming_message 2 [16:50:25.780][D][sec-touch-uart:235]: store_data_to_incoming_message 51 [16:50:25.790][D][sec-touch-uart:235]: store_data_to_incoming_message 50 [16:50:25.794][D][sec-touch-uart:235]: store_data_to_incoming_message 56 [16:50:25.801][D][sec-touch-uart:235]: store_data_to_incoming_message 48 [16:50:25.805][D][sec-touch-uart:235]: store_data_to_incoming_message 48 [16:50:25.813][D][sec-touch-uart:235]: store_data_to_incoming_message 9 [16:50:25.817][D][sec-touch-uart:235]: store_data_to_incoming_message 49 [16:50:25.825][D][sec-touch-uart:235]: store_data_to_incoming_message 55 [16:50:25.826][D][sec-touch-uart:235]: store_data_to_incoming_message 51 [16:50:25.827][D][sec-touch-uart:235]: store_data_to_incoming_message 9 [16:50:25.835][D][sec-touch-uart:235]: store_data_to_incoming_message 53 [16:50:25.857][D][sec-touch-uart:235]: store_data_to_incoming_message 52 [16:50:25.857][D][sec-touch-uart:235]: store_data_to_incoming_message 49 [16:50:25.857][D][sec-touch-uart:235]: store_data_to_incoming_message 52 [16:50:25.860][D][sec-touch-uart:235]: store_data_to_incoming_message 50 [16:50:25.867][D][sec-touch-uart:235]: store_data_to_incoming_message 10 [16:50:25.871][D][sec-touch:123]: Received ETX, processing message [16:50:25.878][D][sec-touch:366]: [process_data] buffer: 32800 173 54142 [16:50:25.882][E][sec-touch-uart:452]: [process_data] Not enough TABs in message (task=GET_DATA property_id=173 len=17 hex: 02 33 32 38 30 30 09 31 37 33 09 35 34 31 34 32 0A ). Task Failed

Regarding "Summer-Ventilation Mode": When using a SEC-20BF Controller the speed and direction of each Fan are sent on a given interval to the Controller Board of the fans and thereby the direction of the Fans is changed in "heat recovery" Mode. If Summer Ventilation mode ist selected on the SEC 20-BF the Direction of the two paired Fans is not changed in each zycle (the code sent to the controler Board stays the same). Maybe the Sec-Touch Controller works the same way

I will try to do a build where the crc is optional and ping you here.

Regarding the Summer Ventilation in my device works the same. But I am not able to get it to change from the ESP device. :disappointed_face:

@LPold can you try installing the main branch (not stable) ? I have pushed a new configuration optional_crc you can set it as true in sec_touch: and test it. It also worked on my devices without the CRC.

please note that the log tags were changed there

Many Many Thanks for the Option to work without CRC - i tried it and now the Logs do not show failure Messages and it seems as if i can receive the fan Speed of the Fans (see log below) but Unfortunatelly it seems that the mode and speed do not change after inputs form the touch panel and remain at "Speed 1, Operation Normal" independent of their actual speeds.

[21:38:30.363][D][sec_touch.fan:041]: No update needed for fan with property_id 173 (state 1) (speed 1)(preset Normal)
[21:38:30.406][D][sec_touch.fan:023]: New Real Speed from device for property_id 174 (speed 19177)
[21:38:30.412][D][sec_touch.fan:041]: No update needed for fan with property_id 174 (state 1) (speed 1)(preset Normal)
[21:38:30.449][D][sec_touch.fan:023]: New Real Speed from device for property_id 175 (speed 31192)
[21:38:30.464][D][sec_touch.fan:041]: No update needed for fan with property_id 175 (state 1) (speed 1)(preset Normal)
[21:38:30.497][D][sec_touch.fan:023]: New Real Speed from device for property_id 176 (speed 11403)
[21:38:30.508][D][sec_touch.fan:041]: No update needed for fan with property_id 176 (state 1) (speed 1)(preset Normal)
[21:38:30.546][D][sec_touch.fan:023]: New Real Speed from device for property_id 177 (speed 8122)
[21:38:30.559][D][sec_touch.fan:041]: No update needed for fan with property_id 177 (state 1) (speed 1)(preset Normal)
[21:38:30.587][D][sec_touch.fan:023]: New Real Speed from device for property_id 178 (speed 3972)
[21:38:30.607][D][sec_touch.fan:041]: No update needed for fan with property_id 178 (state 1) (speed 1)(preset Normal)
[21:38:32.360][D][sec_touch.fan:023]: New Real Speed from device for property_id 173 (speed 54142)```

I have pushed a little change on the logs and a little fix. Looks like your device sends other values for the fans.

If that is the case, you will need to create a map of fan->value and I can see if I can make it work dynamically.

Running the update will tell you if the hardware send a out-of-range value

Again many thanks for your support.

Currently I see this in the logs:
ˋˋˋ
[09:51:17.852][W][sec_touch.fan:024]: Ignoring out-of-range speed 54142 for property_id 173
[09:51:17.901][W][sec_touch.fan:024]: Ignoring out-of-range speed 19177 for property_id 174
[09:51:17.936][W][sec_touch.fan:024]: Ignoring out-of-range speed 31192 for property_id 175
[09:51:17.978][W][sec_touch.fan:024]: Ignoring out-of-range speed 11403 for property_id 176
[09:51:18.023][W][sec_touch.fan:024]: Ignoring out-of-range speed 8122 for property_id 177
[09:51:18.067][W][sec_touch.fan:024]: Ignoring out-of-range speed 3972 for property_id 178
[09:51:22.866][W][sec_touch.fan:024]: Ignoring out-of-range speed 54142 for property_id 173
[09:51:22.901][W][sec_touch.fan:024]: Ignoring out-of-range speed 19177 for property_id 174
[09:51:22.942][W][sec_touch.fan:024]: Ignoring out-of-range speed 31192 for property_id 175
[09:51:22.986][W][sec_touch.fan:024]: Ignoring out-of-range speed 11403 for property_id 176
[09:51:23.029][W][sec_touch.fan:024]: Ignoring out-of-range speed 8122 for property_id 177
[09:51:23.072][W][sec_touch.fan:024]: Ignoring out-of-range speed 3972 for property_id 178
ˋˋˋ

All fans are set to automatic time mode with speed 1. If I set split_pecial_modes to false the speed is reported to be 11 at boot but changes on the panel are not updated

You will need to disable all the fans but the first one. And do a manual mapping.

  1. Set a velocity on the Panel
  2. Write the reported out-of-range speed
  3. Set anoter velocity
  4. Write the reported out-of-range speed

and so on.

Right now we have no idea what the values are.

Thank you for the advice i will check if the Speed values change accordingly. Besides Regarding Summer Ventilaltion i found in the Project

VentilationSystem/include/SEController.h at main · Manuel-Siekmann/VentilationSystem · GitHub

this snipped:
// Summer ventilation (no heat recovery)
// Register: 48 = [0A00 = on]; [0800 = off]

// Snooze time
// Register: 56 = [xx minutes]

maybe this help to get the Summer Ventilation set properly

That is what I used as base for the component (I know him :grimacing: ) but write does not work, just read

as far as i could analyze the Data i receive it seems as if my device is not using the same registers because the Numbers like 54142 or 19177 do not change when changing fan speed...

you could try the sniffer again (just remove the id, it is just needed for multiple sec devices) and do the long process of change one fan and then call the sniffer again and see what changes.