Sonoff 4ch Pro mit ESPHome oder Tasmota flashen

Im Folgenden findest du eine Kurz-Anleitung, wie du einen Sonoff 4CH (pro) mit einer eigenen Firmware flashen kannst. Für diese Anleitung ist nicht viel von Nöten:

  • PC oder Laptop mit LAN und WLAN Verbindung
  • Sonoff 4ch (pro) R1/R2
  • Home Assistant Installation
  • USB TTL Konverter Adapter
  • 4 Jumper Kabel m-w (Alternativ: 4er Steckbrücke und 4 Jumper-Kabel w-w )
  • 1 Jumper-Kabel m-m für die GPIO0 Brücke ab Sonoff 4CH Pro R2
  • Optional: Stecker-Netzteil 12v für Sonoff 4CH Pro (anstelle einer FTDI Stromversorgung, wenn einer diese Lösung bevorzugt)

1. Vorbereitungen

Sollte der Sonoff bereits über Ewelink verbunden sein, trenne die Verbindung durch Löschen des Gerätes in der App. Dadurch setzt du das Gerät auch gleich zurück. Anschließend kannst du das Gerät vom Strom nehmen, da es eine Reihe weiterer Vorbereitungen gibt.

1.2 Installieren der benötigten Tools

Zum Überspielen nehmen wir das Tool esptool, da es schnell ist, Plattformunabhängig arbeiten kann und ich zumindest bislang wenig Fehler durch das Tool hatte.

pip install esptool

1.3 ESPHome Firmware vorbereiten

Für dieses Beispiel nehme ich ein einfaches Relay setup zum Schalten der jeweiligen Ausgänge. Bei Gelegenheit schreibe ich ein weiteres Tutorial, wie man eine Mehrzonen-Bewässerung mit dem Relay umsetzen kann.

substitutions:
  button1_gpio: GPIO0
  button2_gpio: GPIO9
  button3_gpio: GPIO10
  button4_gpio: GPIO14

  led_status_gpio: GPIO13

  relay1_gpio: GPIO12
  relay2_gpio: GPIO5
  relay3_gpio: GPIO4
  relay4_gpio: GPIO15

  rx_gpio: GPIO3
  tx_gpio: GPIO1

  project: 4ch Relay
  hostname: 4ch_pro_1
esphome:
  name: "$hostname"
  platform: ESP8266
  board: esp01_1m
  on_boot:
    priority: -100.0
    then:
      # Set light to half brightness when first ready.
      - light.turn_on:
          id: status_led
          brightness: 50%

    # Wait to check for a Home Assistant API connection.
      - delay: 15s
      - if:
        condition:
          api.connected:
        then:
          # If connected, then flash the LED, and leave it at full brightness.
          - logger.log: "$project is connected to the Home Assistant API!"
          - light.turn_on:
              id: status_led
              brightness: 100%
          - delay: 0.5s
          - light.turn_off: status_led
          - delay: 0.5s
          - light.turn_on:
              id: status_led
              brightness: 100%
          - delay: 0.5s
          - light.turn_off: status_led
          - delay: 0.5s
          - light.turn_on:
              id: status_led
              brightness: 100%
          - delay: 0.5s
          - light.turn_off: status_led
          - delay: 0.5s
          - light.turn_on:
              id: status_led
              brightness: 100%

  # Turn off the LED when the device is shutting down (like for a firmware update).
  on_shutdown:
    then:
      - light.turn_off: status_led

# wifi connection
wifi:
  # wifi connection
  ssid: !secret wifi_ssid
  password: !secret wifi_pwd
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: !secret wifi_ap_ssid
    password: !secret wifi_ap_pwd
captive_portal:
# Enable Home Assistant API
api:
  password: !secret api_pwd
# Enable OTA update password
ota:
  password: !secret ota_pwd
# Logging
# Enable logging in debug mode. You might want to change to NONE, ERROR, WARN, DEBUG, VERBOSE, VERY_VERBOSE
# If test works fine, change to ERROR or INFO
logger:
  level: DEBUG
# MQTT, if you use mqtt broker
mqtt:
  broker: !secret mqtt_broker_url
  port: !secret mqtt_broker_port
  username: !secret mqtt_broker_usr
  password: !secret mqtt_broker_pwd
# Mini Web Portal
web_server:
  port: !secret web_port
  auth:
    username: !secret web_usr
    password: !secret web_pwd

# common housekeeping
output:
  platform: esp8266_pwm
  pin: $led_status_gpio
  inverted: True
  id: _status_led
light:
  platform: monochromatic
  internal: True
  output: _status_led
  id: status_led
# buttons on the side
binary_sensor:
  - platform: gpio
    pin:
    number: $button1_gpio
    mode: INPUT_PULLUP
    inverted: True
    name: "$project Button 1"
  - platform: gpio
    pin:
    number: $button2_gpio
    mode: INPUT_PULLUP
    inverted: True
    name: "$project Button 2"
  - platform: gpio
    pin:
    number: $button3_gpio
    mode: INPUT_PULLUP
    inverted: True
    name: "$project Button 3"
  - platform: gpio
    pin:
    number: $button4_gpio
    mode: INPUT_PULLUP
    inverted: True
    name: "$project Button 4"
switch:
  - platform: gpio
    name: "$project Relay 1"
    pin: $relay1_gpio
  - platform: gpio
    name: "$project Relay 2"
    pin: $relay2_gpio
  - platform: gpio
    name: "$project Relay 3"
    pin: $relay3_gpio
  - platform: gpio
    name: "$project Relay 4"
    pin: $relay4_gpio

Nachdem du die Konfiguration erstellt hast, kannst du über das Menu die Firmware bilden:

  • Klicke unter 1 auf das Menu Toggle
    ESPHome Firmware
  • Klicke auf compile (siehe 2)
    ESPHome Firmware Compile
  • Anschließend nur noch das fertige Binary herunterladen:
    ESPHome Firmware Download

1.4 Firewall

Es kann sehr schwer sein, die Firewall entsprechend anzupassen. Wenn du auf Nummer sicher gehen willst, empfehle ich für den Zeitraum des Überspielens die Firewall kurzzeitig zu deaktivieren. Das betrifft insbesondere die UFW unter Linux. Aber mitunter kann auch die installierte Windows-Firewall ein Problem darstellen.

sudo ufw disable

2. Anschließen des Sonoff 4ch pro an den FTDI

Zur Verdeutlichung habe ich im “quick’n’dirty” Verfahren mal einen Sonoff 40ch pro R2 abfotografiert und beschriftet:

Sonoff 4CH Pro R2 Platine

2.1 Anschließen des FTDI

Schließe zuerst den FTDI an den im Foto markierten FTDI Anschluss des Sonoff an

Warnung

  • Beim Sonoff 4CH wird immer der RX mit TX des FTDI verbunden
  • Beim Sonoff 4CH wird immer der TX mit RX des FTDI verbunden
  • Der RX des Sonoff ist IMMER der Nachfolgende des 3.3V Pins. Auf meinem Foto ist die Reihenfolge auch so beschriftet. Ist die Reihenfolge der Beschriftung nach nicht die gleiche, trifft dennoch die Beschriftung wie auf meinem Foto zu!
  • Verbinde den FTDI GND mit Sonoff GND
  • Verbinde den FTDI RX mit Sonoff TX
  • Verbinde den FTDI TX mit Sonoff RX
  • Verbinde den 3.3V mit dem FTDI und lasse den Anschluss auf der Seite des Sonoff einfach in der Luft hängen
  • Halte die Kabel-Verbindung am Sonoff leicht seitlich angedrückt, so dass du die Kontakte gewährleistest. Lasse die Pins nicht los, bevor du mit allem fertig bist!
  • Verbinde Anschließend den FTDI mit deinem USB-Hub/USB-Port

2.2 Überbrücke den GPIO0 mit GND

Dieser Punkt ist abhängig von deinem Sonoff Gerät. Bei Sonoff 4CH R1 musst du den Pin FW/GPIO0 gedrückt halten, bei Sonoff 4CH R2 musst du mit einem Kabel den GPIO0 mit GND verbinden. Siehe Foto für einen Vergleich!

2.3 Stromversorgung anschließen

  • Verbinde entweder ein Netzteil mit dem Sonoff oder den 3.3V Pin des FTDI mit dem Sonoff 3.3V.

Info

  • Beim Verbinden mit einem Netzteil leuchten LED1 und LED3 rot auf und du kannst die Brücke zwischen GND und GPIO0 entfernen. Anschließend leuchtet LED1 rot.
  • Bei der Verbindung des FTDI 3.3V mit dem Sonoff 3.3V leuchtet KEINE LED. Du kannst die Kabelbrücke zwischen GND und GPIO0 entfernen. Auch nach Entfernen der Kabel-Brücke leuchtet KEINE LED.
  • Bei Erfolg darf in keinem Fall die blaue Status LED leuchten! Der Sonoff befindet sich jetzt im Flash Modus.
  • Nach Entfernen der Kabelbrücke und sichergestelltem Flash Modus kannst du die neue Firmware über das esptool flashen:

3.0 Flashen der Firmware

3.1 Löschen des Speichers

Das Löschen der alten Firmware ist nicht zwangsweise notwendig, aber empfohlen.

Ubuntu: (Nicht vergessen, deinen COM Port anzupassen!)

sudo esptool.py --port /dev/usbtty0 erase_flash

Windows: (Nicht vergessen, deinen COM Port anzupassen!)

esptool.py --port COM4 erase_flash

3.2 Aufspielen der neuen Firmware

Für das Aufspielen bitte erneut COM-Port und Pfad zur Firmware anpassen!

Ubuntu:

sudo esptool.py --port /dev/ttyUSB0 write_flash -fs 1MB -fm dout 0x0 /path/to/fw.bin

Windows:

esptool.py --port COM4 write_flash -fs 1MB -fm dout 0x0 /path/to/fw.bin

4. Abschluss

Nach Abschluss kannst du alle Kabel entfernen. Verbinde anschließend die Stromversorgung über ein Netzteil oder eine 220V Verbindung. Das Gerät startet neu und du solltest die blaue Status-LED wieder leuchten sehen.

4.1 Firewall wieder aktivieren

Hast du deine Firewall deaktiviert, vergiss nicht, sie jetzt wieder zu aktivieren.

sudo ufw enable

4.2 ESPHome aufrufen und Erfolg validieren

Zur End-Prüfung rufe deinen Home-Assistant oder deine direkte ESPHome Installation auf und verifiziere, dass das Gerät online ist.

4.3 Viel Spaß!

Viel Spaß noch mit den jetzigen Möglichkeiten und Spielereien beim Einrichten des Relay! :-)

Anhänge

ESPHome Config File
application/yaml