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
1
auf das Menu Toggle - Klicke auf
compile
(siehe2
) - Anschließend nur noch das fertige Binary herunterladen:
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
GND
mit SonoffGND
- Verbinde den FTDI
RX
mit SonoffTX
- Verbinde den FTDI
TX
mit SonoffRX
- 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 Sonoff3.3V
.
- 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! :-)