ESPHome Configuration
Full ESPHome setup for the XIAO ESP32S3 Plus with the intex_spa component.
Basic Configuration
esphome:
name: intex-spa
friendly_name: "Intex Spa"
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
esp32:
board: seeed_xiao_esp32s3
variant: esp32s3
framework:
type: arduino
logger:
level: INFO
api:
encryption:
key: !secret api_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Intex-Spa Fallback"
password: !secret fallback_password
web_server:
port: 80
external_components:
- source: ./components
components: [intex_spa]
intex_spa:
data_pin: GPIO4 # XIAO D3
clock_pin: GPIO5 # XIAO D4
hold_pin: GPIO6 # XIAO D5
climate:
name: "Water Temperature"
power:
name: "Power"
icon: mdi:power
filter:
name: "Filter Pump"
icon: mdi:pump
bubble:
name: "Bubbles"
icon: mdi:chart-bubble
heater:
name: "Heater"
icon: mdi:radiator
error_text:
name: "Error Code"
icon: mdi:alert-circleExposed Entities
Climate Entity
Shows current temp, allows setting target (20-40°C), HVAC mode
Power Switch
Main power on/off — same as control panel power button
Filter Switch
Circulation pump on/off
Heater Switch
Heater on/off (shows standby when target reached)
Bubble Switch
Air bubbles on/off
Error Sensor
Text sensor showing error code if present
Secrets File
Create secrets.yaml in the same directory:
wifi_ssid: "YourWiFiNetwork"
wifi_password: "YourWiFiPassword"
api_key: "your-32-byte-base64-key"
ota_password: "your-ota-password"
fallback_password: "fallback-hotspot-password"Installation Steps
Clone the component
Copy the intex_spa component to your ESPHome config
Create secrets.yaml
Add your WiFi credentials and encryption keys
First flash via USB-C
esphome run spa.yaml (hold BOOT while connecting USB)
Subsequent updates via OTA
esphome run spa.yaml --device intex-spa.local
Add to Home Assistant
Auto-discovered via ESPHome integration
Dual-Core Task Pinning
The ESP32-S3 component pins timing-critical operations to Core 0:
- Core 0: Bus protocol handling, button timing (ISR-driven)
- Core 1: WiFi stack, ESPHome loop, Home Assistant API
This isolation ensures WiFi activity doesn't disrupt the precise 2µs button pulse timing.
Web Dashboard
The web_server component provides a standalone dashboard at http://intex-spa.local/. No Home Assistant required — control the spa from any browser on your network.
Home Assistant Integration
Once connected, you'll have these entities in HA:
climate.intex_spa_water_temperature
switch.intex_spa_power
switch.intex_spa_filter_pump
switch.intex_spa_heater
switch.intex_spa_bubbles
sensor.intex_spa_error_codeProtocol based on esp8266-intexsbh20 by Jens B. and diyscip by Geoffroy Hubert.