Eightree ET28 supported?

Hi everyone,
I am looking to move a lot of my devices to ESPHome but I cannot find an official support page for the Eightree ET28.

It comes with Tasmota preinstalled.

Does anybody have reliable info and maybe had one setup?

Thanks
Alex

The config would be similar to Sonoff pow, esp32-c3 though.
Tasmota gives you correct pinout and you could extract your calibration values before flashing.
I’m not sure about 74x595 here, what is it used for?

Not sure what the 74x595 SRCLK is used for, unfortunately. But I can try to find information on it. I think it is for the relay, but not sure.

I have doubts it’s used at all.
Relay is on GPIO06.

Flashed this config but the relay is not working. ESPHome reports the toggle and state but the hardware does nothing, so no clicking, no nothing. Any ideas?

# If factory.bin flashing fails and keeps restarting into tasmota safeboot, then flash OTA and then run these commands on ESPHome LXC:
# cd /root/config/
# curl -O https://esphome.io/files/ota/partitions_tasmota_migration_a.bin
# curl -O https://esphome.io/files/ota/partitions_esphome.bin

# /usr/local/bin/esphome upload --partition-table --file partitions_tasmota_migration_a.bin eightree_et28.yaml
# /usr/local/bin/esphome upload --partition-table --file partitions_esphome.bin eightree_et28.yaml

substitutions:
  devicename: "eightree_et28_543204f70d18"
  friendly_name: "Eightree ET28 54:32:04:F7:0D:18"

esphome:
  name: ${devicename}
  friendly_name: ${friendly_name}
  comment: ${friendly_name}

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: !secret api_encryption_key_eightree_et28_543204f70d18

ota:
  - platform: esphome
    password: !secret ota_password
    #allow_partition_access: true  # For ESP32 devices migrating from Tasmota's safeboot layout, ESPHome needs explicit permission to access and modify the partition table. Add allow_partition_access: true to ota: block

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  manual_ip:
    static_ip: !secret static_ip_eightree_et28_543204f70d18
    gateway: !secret gateway_ip
    subnet: !secret subnet_mask
    dns1: !secret dns_ip

web_server:
  port: 80
#  auth:
#    username: admin
#    password: !secret web_server_password

time:
  - platform: homeassistant
    id: homeassistant_time

captive_portal:

text_sensor:
  - platform: wifi_info
    mac_address:
      name: "MAC Address"

sensor:
  - platform: wifi_signal
    name: "WiFi Signal"
    device_class: signal_strength
    update_interval: 60s

  - platform: hlw8012
    cf_pin: GPIO3
    cf1_pin: GPIO7
    sel_pin:
      number: GPIO4
      inverted: true
      
    current_resistor: 0.001
    voltage_divider: 708

    update_interval: 10s

    voltage:
      name: "Voltage"
      device_class: voltage
      state_class: measurement

    current:
      name: "Current"
      device_class: current
      state_class: measurement

    power:
      name: "Power"
      id: "${devicename}_power"
      device_class: power
      state_class: measurement

  - platform: total_daily_energy
    name: "Daily Energy"
    power_id: "${devicename}_power"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.001

switch:
  - platform: gpio
    id: relay
    name: None
    pin: GPIO6
    restore_mode: RESTORE_DEFAULT_OFF

binary_sensor:
  - platform: gpio
    id: switchid
    internal: true
    pin:
      number: GPIO5
      mode:
        input: true
        pullup: true
      inverted: true

    filters:
      - delayed_on_off: 50ms

    on_press:
      then:
        - switch.toggle: relay

output:
  - platform: gpio
    id: state_led
    pin:
      number: GPIO20
      inverted: true

light:
  - platform: binary
    id: status_led
    internal: true
    output: state_led

P.S.: Reverted to tasmota and it works there, so it is not a hardware failure.

Capture the actual template you use there (I’m not familiar with Tasmota).

Template {"NAME":"EIGHTREE","GPIO":[0,0,0,2720,2624,32,224,2656,0,0,0,0,0,0,0,0,0,0,0,0,320,7648],"FLAG":0,"BASE":1}

And it shows relay on gpio6. Weird.
Is the physical button doing anything on esphome ?

Nope. Also dead.

Anything suspicious on esphome logs?

Logs only show me turning on/off but no errors or anything else. Essentially pretending to work.

My bag is empty.
You could post boot log here to see if there’s something abnormal.

INFO Starting log output from 192.168.0.231 using esphome API
INFO Successfully resolved eightree_et28_543204f70d18 @ 192.168.0.231 in 0.000s
INFO Successfully connected to eightree_et28_543204f70d18 @ 192.168.0.231 in 3.156s
INFO Successful handshake with eightree_et28_543204f70d18 @ 192.168.0.231 in 0.073s
[08:27:29.107][I][app:151]: ESPHome version 2026.5.1 compiled on 2026-07-21 08:26:24 +0200
[08:27:29.107][I][app:158]: ESP32 Chip: ESP32-C3 rev0.4, 1 core(s)
[08:27:29.107][W][app:193]: Bootloader too old for OTA rollback. Flash via USB once to update the bootloader
[08:27:29.107][C][logger:219]: Logger:
[08:27:29.107][C][logger:219]:   Max Level: DEBUG
[08:27:29.107][C][logger:219]:   Initial Level: DEBUG
[08:27:29.111][C][logger:226]:   Log Baud Rate: 115200
[08:27:29.111][C][logger:226]:   Hardware UART: USB_SERIAL_JTAG
[08:27:29.115][C][logger:235]:   Task Log Buffer Size: 768 bytes
[08:27:29.133][C][switch.gpio:088]: GPIO Switch 'Eightree ET28 54:32:04:F7:0D:18'
[08:27:29.133][C][switch.gpio:088]:   Restore Mode: restore defaults to OFF
[08:27:29.154][C][switch.gpio:152]:   Pin: GPIO6
[08:27:29.154][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'switchid'
[08:27:29.154][C][gpio.binary_sensor:152]:   Pin: GPIO5
[08:27:29.159][C][gpio.binary_sensor:061]:   Mode: interrupt
[08:27:29.160][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[08:27:29.206][C][gpio.output:009]: Binary Output:
[08:27:29.206][C][gpio.output:152]:   Pin: GPIO20
[08:27:29.206][C][light:093]: Light 'status_led'
[08:27:29.214][C][homeassistant.time:009]: Home Assistant Time
[08:27:29.219][C][time:049]: Timezone: UTC+1:00 (DST UTC+2:00)
[08:27:29.230][C][time:055]: Current time: 2026-07-21 08:27:29
[08:27:29.238][C][wifi_info:016]: MAC Address 'MAC Address'
[08:27:29.256][C][hlw8012:035]: HLW8012:
[08:27:29.256][C][hlw8012:035]:   Change measurement mode every 8
[08:27:29.256][C][hlw8012:035]:   Current resistor: 1.0 mΩ
[08:27:29.256][C][hlw8012:035]:   Voltage Divider: 708.0
[08:27:29.260][C][hlw8012:152]:   SEL Pin: GPIO4
[08:27:29.266][C][hlw8012:152]:   CF Pin: GPIO3
[08:27:29.266][C][hlw8012:152]:   CF1 Pin: GPIO7
[08:27:29.267][C][hlw8012:451]:   Update Interval: 10.0s
[08:27:29.271][C][hlw8012:017]:   Voltage 'Voltage'
[08:27:29.271][C][hlw8012:017]:     State Class: 'measurement'
[08:27:29.271][C][hlw8012:017]:     Unit of Measurement: 'V'
[08:27:29.271][C][hlw8012:017]:     Accuracy Decimals: 1
[08:27:29.275][C][hlw8012:232]:     Device Class: 'voltage'
[08:27:29.280][C][hlw8012:017]:   Current 'Current'
[08:27:29.280][C][hlw8012:017]:     State Class: 'measurement'
[08:27:29.280][C][hlw8012:017]:     Unit of Measurement: 'A'
[08:27:29.280][C][hlw8012:017]:     Accuracy Decimals: 2
[08:27:29.282][C][hlw8012:232]:     Device Class: 'current'
[08:27:29.287][C][hlw8012:017]:   Power 'Power'
[08:27:29.287][C][hlw8012:017]:     State Class: 'measurement'
[08:27:29.287][C][hlw8012:017]:     Unit of Measurement: 'W'
[08:27:29.287][C][hlw8012:017]:     Accuracy Decimals: 1
[08:27:29.293][C][hlw8012:232]:     Device Class: 'power'
[08:27:29.307][C][total_daily_energy:017]: Total Daily Energy 'Daily Energy'
[08:27:29.307][C][total_daily_energy:017]:   State Class: 'total_increasing'
[08:27:29.307][C][total_daily_energy:017]:   Unit of Measurement: 'Wh'
[08:27:29.307][C][total_daily_energy:017]:   Accuracy Decimals: 3
[08:27:29.310][C][total_daily_energy:232]:   Device Class: 'energy'
[08:27:29.335][C][captive_portal:133]: Captive Portal:
[08:27:29.348][C][wifi:1526]: WiFi:
[08:27:29.348][C][wifi:1526]:   Local MAC: 54:32:04:F7:0D:18
[08:27:29.348][C][wifi:1526]:   Connected: YES
[08:27:29.351][C][wifi:1237]:   IP Address: 192.168.0.231
[08:27:29.352][C][wifi:1248]:   SSID: [redacted]
[08:27:29.352][C][wifi:1248]:   BSSID: [redacted]
[08:27:29.352][C][wifi:1248]:   Hostname: 'eightree_et28_543204f70d18'
[08:27:29.352][C][wifi:1248]:   Signal strength: -59 dB ā–‚ā–„ā–†ā–ˆ
[08:27:29.352][C][wifi:1248]:   Channel: 1
[08:27:29.352][C][wifi:1248]:   Subnet: 255.255.255.0
[08:27:29.352][C][wifi:1248]:   Gateway: 192.168.0.1
[08:27:29.352][C][wifi:1248]:   DNS1: 192.168.0.1
[08:27:29.352][C][wifi:1248]:   DNS2: 0.0.0.0
[08:27:29.371][C][web_server:450]: Web Server:
[08:27:29.371][C][web_server:450]:   Address: 192.168.0.231:80
[08:27:29.389][C][esphome.ota:097]: Over-The-Air updates:
[08:27:29.389][C][esphome.ota:097]:   Address: 192.168.0.231:3232
[08:27:29.389][C][esphome.ota:097]:   Version: 2
[08:27:29.395][C][esphome.ota:104]:   Password configured
[08:27:29.409][C][safe_mode:058]: Safe Mode:
[08:27:29.409][C][safe_mode:058]:   Successful after: 60s
[08:27:29.409][C][safe_mode:058]:   Invoke after: 10 attempts
[08:27:29.409][C][safe_mode:058]:   Duration: 300s
[08:27:29.415][C][safe_mode:079]:   Bootloader rollback: not supported
[08:27:29.434][C][web_server.ota:256]: Web Server OTA
[08:27:29.447][C][api:238]: Server:
[08:27:29.447][C][api:238]:   Address: 192.168.0.231:6053
[08:27:29.447][C][api:238]:   Listen backlog: 4
[08:27:29.447][C][api:238]:   Max connections: 5
[08:27:29.450][C][api:245]:   Noise encryption: YES
[08:27:29.468][C][wifi_signal.sensor:017]: WiFi Signal 'WiFi Signal'
[08:27:29.468][C][wifi_signal.sensor:017]:   State Class: 'measurement'
[08:27:29.468][C][wifi_signal.sensor:017]:   Unit of Measurement: 'dBm'
[08:27:29.468][C][wifi_signal.sensor:017]:   Accuracy Decimals: 0
[08:27:29.474][C][wifi_signal.sensor:232]:   Device Class: 'signal_strength'
[08:27:29.487][C][mdns:230]: mDNS:
[08:27:29.487][C][mdns:230]:   Hostname: eightree_et28_543204f70d18
[08:27:30.018][S][sensor]: 'WiFi Signal' >> -59 dBm
[08:27:30.039][D][api:223]: Accept 192.168.0.5
[08:27:30.099][D][api.connection:2458]: ESPHome Logs 2026.5.1 (192.168.0.5): connected
[08:27:30.124][D][total_daily_energy:075]: Scheduling midnight check in 50550s
[08:27:48.781][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:27:48.781][S][sensor]: 'Power' >> 0.0 W
[08:27:58.785][S][sensor]: 'Voltage' >> 228.0 V
[08:27:58.785][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:27:58.785][S][sensor]: 'Power' >> 0.0 W
[08:28:08.797][S][sensor]: 'Voltage' >> 228.0 V
[08:28:08.798][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:28:08.798][S][sensor]: 'Power' >> 0.0 W
[08:28:18.783][S][sensor]: 'Voltage' >> 227.7 V
[08:28:18.783][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:28:18.783][S][sensor]: 'Power' >> 0.0 W
[08:28:25.123][I][safe_mode:142]: Boot seems successful; resetting boot loop counter
[08:28:26.273][D][preferences:148]: Writing 2 items: 1 cached, 1 written, 0 failed
[08:28:28.789][S][sensor]: 'Voltage' >> 226.8 V
[08:28:28.789][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:28:28.789][S][sensor]: 'Power' >> 0.0 W
[08:28:30.029][S][sensor]: 'WiFi Signal' >> -58 dBm
[08:28:38.795][S][sensor]: 'Voltage' >> 227.9 V
[08:28:38.795][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:28:38.795][S][sensor]: 'Power' >> 0.0 W
[08:28:48.787][S][sensor]: 'Voltage' >> 228.0 V
[08:28:48.788][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:28:48.788][S][sensor]: 'Power' >> 0.0 W
[08:28:58.786][S][sensor]: 'Voltage' >> 227.9 V
[08:28:58.787][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:28:58.787][S][sensor]: 'Power' >> 0.0 W
[08:29:08.807][S][sensor]: 'Voltage' >> 227.7 V
[08:29:08.807][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:29:08.807][S][sensor]: 'Power' >> 0.0 W
[08:29:18.785][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:29:18.785][S][sensor]: 'Power' >> 0.0 W
[08:29:28.790][S][sensor]: 'Current' >> 0.00 A
[08:29:28.790][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:29:28.790][S][sensor]: 'Power' >> 0.0 W
[08:29:30.013][S][sensor]: 'WiFi Signal' >> -59 dBm
[08:29:38.791][S][sensor]: 'Current' >> 0.00 A
[08:29:38.791][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:29:38.791][S][sensor]: 'Power' >> 0.0 W
[08:29:39.516][S][switch]: '' >> ON
[08:29:48.211][S][switch]: '' >> OFF
[08:29:48.783][S][sensor]: 'Current' >> 0.00 A
[08:29:48.783][S][sensor]: 'Daily Energy' >> 0.000 Wh
[08:29:48.783][S][sensor]: 'Power' >> 0.0 W

Nothing on logs..

Did you just copy this from the site you linked?
You need to extract the info from your device if you use pre-flashed firmware.

No, that was the command I run to flash the template via console.

This is when I re-run on device

08:58:41.033 CMD: template
08:58:41.040 MQT: stat/tasmota_F66EEC/RESULT = {"NAME":"EIGHTREE","ARCH":"ESP32C3","GPIO":[0,0,0,2720,2624,32,224,2656,0,0,0,0,0,0,0,0,0,0,0,0,320,7648],"FLAG":0,"BASE":1}

Your device has evil inside.

Try with just switch and use variant instead of board.
This is getting quite desperate…


substitutions:
  devicename: "eightree_et28_543204f70d18"
  friendly_name: "Eightree ET28 54:32:04:F7:0D:18"

esphome:
  name: ${devicename}
  friendly_name: ${friendly_name}
  comment: ${friendly_name}

esp32:
  variant: esp32c3
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: !secret api_encryption_key_eightree_et28_543204f70d18

ota:
  - platform: esphome
    password: !secret ota_password
    #allow_partition_access: true  # For ESP32 devices migrating from Tasmota's safeboot layout, ESPHome needs explicit permission to access and modify the partition table. Add allow_partition_access: true to ota: block

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  manual_ip:
    static_ip: !secret static_ip_eightree_et28_543204f70d18
    gateway: !secret gateway_ip
    subnet: !secret subnet_mask
    dns1: !secret dns_ip

web_server:
  port: 80
#  auth:
#    username: admin
#    password: !secret web_server_password


switch:
  - platform: gpio
    id: relay
    name: None
    pin: GPIO6
    restore_mode: RESTORE_DEFAULT_OFF


:smiley:

Unfortunately, does not seem to be the issue. Still not turning on the power.

I did test the physical button with my original config and that did register in ESPHome, so the physical button seems to ā€œworkā€. But for physical and digital button, the device just does not turn on.

Ok,
Get one foot long nail made of pure silver and hit it to the rightmost plug-hole of the device.

That might be an option, yes :smiley:

Tried every AI I could find and so far I only get hallucination marathons…

I don’t know if your relay is active low of high so it might be inverted. But it should change the state when you toggle the switch to ON and back OFF.

Does tasmota have any configuration for 74x595 ? Presence of that remains mystery to me.