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
1.1 Trennen des Sonoff von Ewelink
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 
1auf das Menu Toggle
                                        ESPHome Firmware  - Klicke auf 
compile(siehe2)
                                        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:
                                2.1 Anschließen des FTDI
Schließe zuerst den FTDI an den im Foto markierten FTDI Anschluss des Sonoff an
- Verbinde den FTDI 
GNDmit SonoffGND - Verbinde den FTDI 
RXmit SonoffTX - Verbinde den FTDI 
TXmit SonoffRX - Verbinde den 
3.3Vmit 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.3VPin des FTDI mit dem Sonoff3.3V. 
- Nach Entfernen der Kabelbrücke und sichergestelltem Flash Modus kannst du die neue Firmware über das 
esptoolflashen: 
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! :-)
