Zum Inhalt springen

Tasmota AC-Dimmer-Steuerung über DimmerLink

Tasmota hat keinen nativen TRIAC-Phasenanschnitt-Treiber. DimmerLink schließt diese Lücke — Tasmota sendet Befehle über I2C (Berry auf ESP32) oder UART (SerialSend auf jeder Platine), und DimmerLink übernimmt die präzise TRIAC-Steuerung.

Kurzfassung: Tasmota kann einen TRIAC-Phasenanschnitt-Dimmer nicht nativ ansteuern. Verwenden Sie DimmerLink als I2C/UART-Slave. Auf ESP32 Tasmota: Schreiben Sie ein 5-zeiliges Berry-Script, das jeden Regel-Trigger auf einen I2C-Registerschreibvorgang an Adresse 0x50 abbildet. Auf ESP8266: Verwenden Sie SerialSend5 mit dem binären Paketformat von DimmerLink. Home Assistant erkennt das Gerät automatisch über Tasmota MQTT.




Warum Tasmota keinen TRIAC direkt ansteuern kann

Der Dimmer-Befehl in Tasmota steuert einen internen PWM-Ausgang oder ein SWITCH-Relais. Er unterstützt keine Phasenanschnitt-Steuerung (Phasenanschnitt-TRIAC), da dafür ein Hardware-Interrupt bei jedem AC- Nulldurchgang (alle 10 ms bei 50 Hz) mit sub-Millisekunden- Zündpräzision erforderlich ist.

Tasmota führt eine Ereignisschleife und den WiFi-Stack auf demselben Kern aus. Es kann keine ISR-Latenz < 1 ms unter WiFi-Last garantieren. Das direkte Anschließen eines rbdimmer-TRIAC-Moduls und der Versuch, Gate-Impulse von Tasmota aus zu steuern, führt zu Flimmern oder keinerlei Dimmung.

Die Lösung: Timing an DimmerLink auslagern. DimmerLink ist ein dedizierter Cortex-M0+-Controller, der Nulldurchgangserkennung und TRIAC-Zündung autonom verwaltet. Tasmota sendet nur einmal pro Benutzerbefehl den Ziel-Helligkeitswert (0–100) — keinerlei Timing-Anforderungen.




Benötigte Hardware

  • ESP32- oder ESP8266-Platine mit Tasmota-Firmware
  • DimmerLink-Modul
  • rbdimmer AC-Dimmer-Modul (beliebiger Nennstrom)
  • 4,7-kΩ-Widerstände × 2 (für I2C-Pull-ups, bei Verwendung des I2C-Modus)



Schritt 1 — DimmerLink in den I2C-Modus umschalten

DimmerLink wird standardmäßig im UART-Modus ausgeliefert. Für den Berry-I2C-Ansatz (ESP32) müssen Sie ihn zuerst in den I2C-Modus umschalten.

Verbinden Sie DimmerLink mit einem USB-UART-Adapter (TX → RX, RX → TX, GND → GND, VCC → 3.3V), dann senden Sie den SWITCH_I2C-Befehl bei 115200 Baud:

text
Byte sequence: 02 5B

In einem beliebigen Serial-Terminal (RealTerm, picocom):

  1. Öffnen Sie den Port bei 115200, 8N1.
  2. Senden Sie Roh-Bytes: 02 5B.
  3. Erwartete Antwort: 00 (OK). DimmerLink startet nun nach jedem Einschalten im I2C-Modus.

Nach dem Umschalten vom UART-Adapter trennen und für I2C verdrahten.

Wenn Sie DimmerLink im UART-Modus belassen möchten (einfacher für ESP8266), überspringen Sie diesen Schritt und gehen Sie direkt zu Schritt 3.




Schritt 2 — Verdrahtung


I2C-Verbindung (ESP32 — empfohlen)

Jeder ESP32 ESP32-Pin Hinweise
VCC 3,3V Logikspannung des MCU anpassen
GND GND
SDA (TX/SDA) GPIO21 4,7-kΩ-Pull-up zu 3.3V hinzufügen
SCL (RX/SCL) GPIO22 4,7-kΩ-Pull-up zu 3.3V hinzufügen

Pull-up-Widerstände von SDA und SCL zu 3.3V anschließen. Ohne sie funktioniert der I2C-Bus nicht zuverlässig.

text
3.3V ──┬──────────────┬──
      4.7k           4.7k
       │               │
ESP32 SDA ──── DL SDA  │
ESP32 SCL ──────────── DL SCL
GND ────────────────── DL GND
3.3V ───────────────── DL VCC


UART-Verbindung (ESP8266 oder ESP32)

Jeder ESP32 ESP8266 ❌ nein Hinweise
VCC 3,3V 3,3V
GND GND GND
RX (TX/SDA) GPIO1 TX* GPIO17 TX2 DL RX ← MCU TX
TX (RX/SCL) GPIO3 RX* GPIO16 RX2 DL TX → MCU RX

* GPIO1/3 auf ESP8266 werden mit USB geteilt. Verwenden Sie Serial.swap() zum Umleiten auf GPIO15/GPIO13, oder verwenden Sie stattdessen I2C.

cpp
// ESP8266: Serial auf GPIO15 (TX) / GPIO13 (RX) umleiten
Serial.begin(115200);
Serial.swap();  // TX → GPIO15, RX → GPIO13


DimmerLink → AC-Dimmer-Modul

Jeder ESP32 Dimmer-Modul
VCC VCC
GND GND
Z-C Z-C
Dim DIM

The dimmer module connects to mains AC and the load as described in the Hardware Connection Guide.




Schritt 3A — Tasmota-Berry-Script (ESP32, I2C-Modus)

Berry-Scripting ist nur auf ESP32-Tasmota verfügbar. Es bietet volle programmatische Kontrolle über I2C.

Öffnen Sie die Tasmota-Webkonsole und fügen Sie ein:

berry
# Datei: dimmer_i2c.be — DimmerLink-Steuerung über I2C
# Register 0x10 (DIM0_LEVEL): 0–100 Prozent
import wire
wire.begin()  # I2C-Bus einmal beim Laden des Scripts initialisieren
def set_dimmer(level)
    var l = int(level)
    if l < 0 then l = 0 end
    if l > 100 then l = 100 end
    wire.beginTransmission(0x50)
    wire.write(0x10)   # Register DIM0_LEVEL
    wire.write(l)
    wire.endTransmission()
end
# Tasmota-Dimmer-Befehl (0–100) auf DimmerLink abbilden
tasmota.add_rule("Dimmer#State",
    def(value) set_dimmer(value) end)
# Tasmota-Power-Befehl (ein/aus) auf volle oder null Helligkeit abbilden
tasmota.add_rule("Power#State",
    def(value)
        if value == 1 then set_dimmer(100)
        else set_dimmer(0) end
    end)

Zum automatischen Laden beim Booten als autoexec.be über den Tasmota-Dateimanager speichern (Tools → Manage File System).

So funktioniert es:

  • wire.begin() wird einmal beim Laden des Scripts aufgerufen, um den I2C-Bus zu initialisieren — nicht bei jedem Befehl.
  • wire.beginTransmission(0x50) adressiert DimmerLink an der Standard-I2C-Adresse.
  • wire.write(0x10) wählt das DIM0_LEVEL-Register.
  • wire.write(l) setzt die Helligkeit 0–100%.
  • Die Regel wird ausgelöst, wenn Tasmota einen Dimmer-Befehl von der Konsole, über MQTT oder von Home Assistant empfängt.


Test über die Tasmota-Konsole

text
Dimmer 50     → set_dimmer(50) → I2C-Schreibvorgang 50 an 0x10
Dimmer 0      → set_dimmer(0)  → Lampe aus
Power 0       → set_dimmer(0)



Schritt 3B — Tasmota UART über SerialSend (ESP8266 und ESP32)

Wenn Berry nicht verfügbar ist (ESP8266) oder Sie keine Scripts schreiben möchten, verwenden Sie SerialSend5 zum Senden von binären Rohpaketen an DimmerLink über UART.

DimmerLink-UART-Paketformat für SET-Helligkeit:

text
02  53  00  LEVEL
│   │   │   └── Helligkeit 0–100 (dezimal)
│   │   └────── Kanalindex (immer 00)
│   └────────── Befehl SET (0x53)
└────────────── Startbyte (immer 0x02)

In der Tasmota-Konsole:

text
# Helligkeit auf 50% setzen  (0x32 hex = 50 dezimal)
SerialSend5 02530032
# Helligkeit auf 75% setzen  (0x4B hex = 75 dezimal)
SerialSend5 0253004B
# Ausschalten  (0x00 = 0%)
SerialSend5 02530000
# Volle Helligkeit einschalten (0x64 hex = 100 dezimal)
SerialSend5 02530064

Hex conversion: Dimmer 50 → 50 decimal → 0x32 hex → packet 02 53 00 32. Use any hex calculator or the table in the DimmerLink UART docs.


SerialSend mit Tasmota-Regeln automatisieren

Bilden Sie Tasmota's internen Dimmer-Wert auf einen SerialSend-Befehl ab, indem Sie Mem-Variablen und den WebCmd-Hack verwenden — oder schreiben Sie ein Berry-Script für saubere Konvertierung auf ESP32. Für ESP8266 ist ein einfacherer Ansatz die Verwendung fester Level über Tasmota-Regeln:

text
Rule1
  ON Dimmer#State<20 DO SerialSend5 02530000 ENDON
  ON Dimmer#State>=20 DO SerialSend5 02530032 ENDON

Für stufenlose Steuerung beliebiger Level auf ESP8266 wird der Berry-Ansatz auf ESP32 empfohlen.




Schritt 4 — Home-Assistant-Integration

Sobald Tasmota DimmerLink steuert, sieht Home Assistant das ESP-Gerät als Standard-Tasmota-Knoten über MQTT-Autodiscovery.

MQTT-Autodiscovery in Tasmota aktivieren:

text
SetOption19 1      # Home Assistant MQTT-Erkennung aktivieren

Home Assistant erstellt automatisch eine light-Entität mit Helligkeitssteuerung. Der HA-Helligkeitsregler (0–255) wird auf Tasmota's Dimmer-Befehl (0–100) abgebildet, der die Berry-Regel auslöst, die an DimmerLink schreibt.

Für manuelle HA-Konfiguration (wenn Autodiscovery deaktiviert ist):

yaml
mqtt:
  light:
    - name: "AC Dimmer"
      command_topic: "cmnd/tasmota_dimmer/Dimmer"
      brightness_command_topic: "cmnd/tasmota_dimmer/Dimmer"
      brightness_scale: 100
      payload_on: "100"
      payload_off: "0"
      state_topic: "stat/tasmota_dimmer/RESULT"
      brightness_state_topic: "stat/tasmota_dimmer/RESULT"
      brightness_value_template: >
        {{ value_json.Dimmer | default(0) }}



Häufige Fehler

Problem Ursache Lösung
Berry nicht verfügbar auf dem Gerät Tasmota auf ESP8266 UART + SerialSend5-Ansatz verwenden
Dimmer-Befehl hat keine Wirkung Regel nicht geladen oder Tippfehler tasmota.add_rule-Syntax prüfen; Berry neu laden
DimmerLink antwortet nicht auf I2C Falscher Modus (noch UART) Zuerst 02 5B über UART senden
I2C unzuverlässig bei WiFi Fehlende Pull-up-Widerstände 4,7 kΩ an SDA und SCL hinzufügen
SerialSend5 sendet falschen Level Hex-Umrechnungsfehler 50% = 0x32, 75% = 0x4B, 100% = 0x64
HA zeigt Dimmer, aber Level wird ignoriert on_command_type-Abweichung brightness_scale: 100 in der MQTT-Light-Konfiguration verwenden



Alternative — ESPHome statt Tasmota

Wenn der Berry-Scripting-Ansatz in Tasmota zu komplex erscheint, bietet ESPHome eine native DimmerLink-Integration in 5 Zeilen YAML und übernimmt die gesamte I2C-Kommunikation automatisch.

See: ESPHome YAML for AC Dimmer and DimmerLink




Schnell-Checkliste

  • ☐ DimmerLink in I2C-Modus umgeschaltet (bei Berry-Verwendung) — `02 5B` über UART senden
  • ☐ Pull-up-Widerstände auf SDA und SCL installiert (4,7 kΩ zu 3.3V)
  • ☐ Berry autoexec.be gespeichert und geladen (`tasmota.add_rule` vorhanden)
  • ☐ Tasmota-Konsole: `Dimmer 50` löst set_dimmer(50) im Berry-Log aus
  • ☐ UART: `SerialSend5 02530032` gibt Antwort `00` im seriellen Monitor
  • ☐ Tasmota MQTT-Autodiscovery aktiviert (`SetOption19 1`)
  • ☐ HA-Light-Entität erscheint und Regler steuert Helligkeit



  • Verwandte Artikel



    Noch Fragen?

    Ask on forum.rbdimmer.com or open a GitHub Issue.

    Diesen Beitrag teilen
    Anmelden , um einen Kommentar zu hinterlassen