← Erweiterte Funktionen | Inhalt
Reference & Troubleshooting — DimmerLink Native Tasmota Driver
Fehlerbehebung
Gerät beim Start nicht erkannt
Symptom: Keine DLK:-Zeilen im seriellen Log. DlStatus gibt {"Command":"Unknown"} oder {"Command":"Error"} zurück.
| Prüfung | Lösung |
|---|---|
| I2C-Modus | DimmerLink wird mit aktiviertem UART geliefert. Wechseln Sie mit dem UART-Befehl SWITCH_I2C (0x5B) in den I2C-Modus, bevor Sie an den I2C-Bus anschließen. |
| Physische Verkabelung | Überprüfen Sie, ob SDA, SCL, GND und VCC angeschlossen sind. SDA und SCL werden direkt verbunden (nicht gekreuzt), anders als UART. |
| Pull-up-Widerstände | Fügen Sie 4,7-kOhm-Widerstände von SDA nach 3,3 V und von SCL nach 3,3 V hinzu. Die internen Pull-ups des ESP32/ESP8266 sind unzureichend. |
| I2C-Pins in Tasmota | Bestätigen Sie, dass GPIO-Pins als I2C SDA und I2C SCL in Configuration > Configure Module zugewiesen sind. |
| Einschaltzeit des Geräts | Das Gerät benötigt ~2 Sekunden nach dem Einschalten für die AC-Frequenzkalibrierung. Starten Sie Tasmota neu, wenn es vor dem Gerät gestartet wurde. |
USE_DIMMERLINK nicht definiert |
Bestätigen Sie, dass die Definition in user_config_override.h vorhanden ist und die Firmware neu gebaut wurde. |
USE_I2C fehlt |
Fügen Sie #define USE_I2C zu user_config_override.h hinzu, wenn eine abgespeckte Umgebung erstellt wird. |
| Firmware-Versionskonflikt | Der Treiber erfordert, dass Register 0x03 genau 0x01 zurückgibt. Andere Firmware-Versionen werden übersprungen. |
Gerät erkannt, aber Befehle werden ignoriert
Symptom: DlStatus gibt Daten zurück, aber DlDim hat keinen sichtbaren Effekt.
| Prüfung | Lösung |
|---|---|
| READY-Zustand des Geräts | Überprüfen Sie DlStatus — wenn "Ready": false, kalibriert das Gerät noch. Warten und erneut versuchen. |
| Fehlercode im Status | Prüfen Sie das Feld LastError. 0xFE = Parameter außerhalb des Bereichs. 0xFC = EEPROM-Schreibfehler. |
| Thermische Abschaltung | Wenn ThermalState SHUTDOWN ist, sind Ausgänge deaktiviert. Lassen Sie das Gerät abkühlen. |
| Lasverkabelung | Bestätigen Sie, dass die Last korrekt mit dem TRIAC-Modul verbunden ist. |
I2C-Fehler oder instabile Kommunikation
Symptom: Gerät erkannt, aber DlStatus zeigt veraltete Daten oder Fehler erscheinen im Log.
| Prüfung | Lösung |
|---|---|
| Leitungslänge | Halten Sie I2C-Leitungen unter 30 cm. Längere Leitungen erfordern stärkere Pull-ups oder I2C-Puffer. |
| Pull-up-Wert | Kürzere Leitungen mit starken Pull-ups (2,2 kOhm) verbessern die Signalintegrität. Verwenden Sie keine Werte unter 1 kOhm. |
| Stromversorgung | Fügen Sie einen 100-nF-Entkopplungskondensator zwischen VCC und GND nahe am DimmerLink-Gerät hinzu. |
| Adresskonflikt | Verwenden Sie I2CScan, um Geräte zu prüfen, die dieselbe Adresse teilen. |
| GPIO-Konflikte | Platzieren Sie SDA oder SCL nicht auf GPIO-Pins, die für andere Zwecke verwendet werden (ADC, Touch, Strapping-Pins). |
Kalibrierung dauert zu lange
Symptom: Gerät zeigt "Ready": false für einen längeren Zeitraum.
| Prüfung | Lösung |
|---|---|
| AC-Verbindung | Die MCU erkennt die AC-Frequenz aus dem Netz. Wenn keine AC-Last angeschlossen ist, kann die Kalibrierung nicht abgeschlossen werden. |
| Frequenzerkennung | Führen Sie DlStatus aus — wenn ACFreq 0 zeigt, hat das Gerät keine AC-Frequenz erkannt. |
| Neukalibrierung erzwingen | Senden Sie DlRecalibrate, um den Kalibrierungszyklus neu zu starten. |
Adressänderung schlägt fehl
Symptom: DlAddress 0x51 gibt einen Fehler zurück oder das Gerät verschwindet.
| Prüfung | Lösung |
|---|---|
| Verifizierungs-Timeout | Der Treiber liest VERSION nach 50 ms von der neuen Adresse. Wenn das Gerät langsam ist, kann die Verifizierung fehlschlagen, obwohl die Adresse geändert wurde. Stromzyklus und Tasmota neu starten. |
| Konflikt an neuer Adresse | Wenn ein anderes Gerät die Zieladresse belegt, treten Kollisionen auf. Scannen Sie den Bus zunächst mit I2CScan. |
| Gerät finden | Führen Sie I2CScan aus oder starten Sie Tasmota neu (was einen erneuten Scan durchführt), um die tatsächliche aktuelle Adresse zu ermitteln. |
Temperatur wird nicht angezeigt
Symptom: Keine Temperaturzeile in der Sensoranzeige. Kein Temp oder Thermal in MQTT.
| Prüfung | Lösung |
|---|---|
| Firmware-Funktion | Die MCU-Firmware muss FEATURE_TEMPERATURE enthalten. Beim Gerätehersteller nachfragen. |
| Registerwert | Beim Start liest der Treiber Register 0x40. Wert 0xFF bedeutet kein Sensor. Jeder andere Wert bedeutet, dass der Sensor vorhanden ist. |
Build-Probleme
| Symptom | Lösung |
|---|---|
Undefinierter Fehler USE_DIMMERLINK |
Prüfen Sie, ob user_config_override.h im Verzeichnis tasmota/ ist, nicht im Projektstamm. |
| Treiber nicht in der Binärdatei | USE_I2C ist für die Umgebung nicht aktiviert. |
Konfliktwarnung XI2C_100 |
Prüfen Sie I2CDEVICES.md — Slot 100 ist für DimmerLink reserviert. |
Linker-Fehler bei I2cRead8 / I2cWrite8 |
USE_I2C fehlt. |
Fehlercodes
| Code | Name | Bedeutung |
|---|---|---|
| 0x00 | OK | Kein Fehler |
| 0xF9 | ERR_SYNTAX | Ungültige Registeradresse |
| 0xFC | ERR_NOT_READY | EEPROM-Schreibfehler (Flash-Schreibvorgang fehlgeschlagen) |
| 0xFD | ERR_INDEX | Ungültiger Dimmerkanal-Index |
| 0xFE | ERR_PARAM | Parameter value out of range (level > 100, curve > 2, address outside 0x08-0x77) |
Fehlercodes werden nach Schreiboperationen aus dem Geräteregister 0x02 gelesen. Der Befehl DlStatus zeigt den letzten Fehlercode an, wenn er nicht null ist, als "LastError":"0xFE". Fehlercodes werden automatisch gelöscht, wenn eine nachfolgende erfolgreiche Operation abgeschlossen wird.
I2C-Registerkarte
| Adresse | Register | Zugriff | Werte |
|---|---|---|---|
| 0x00 | STATUS | R | Bit 0 = READY, Bit 1 = ERROR |
| 0x01 | COMMAND | W | 0x00=NOP, 0x01=RESET, 0x02=RECALIBRATE |
| 0x02 | ERROR | R | 0x00=OK, 0xF9=SYNTAX, 0xFC=NOT_READY, 0xFD=INDEX, 0xFE=PARAM |
| 0x03 | VERSION | R | 0x01 (firmware version fingerprint) |
| 0x10 | DIM0_LEVEL | R/W | 0-100 |
| 0x11 | DIM0_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x12 | DIM1_LEVEL | R/W | 0-100 |
| 0x13 | DIM1_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x14 | DIM2_LEVEL | R/W | 0-100 |
| 0x15 | DIM2_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x16 | DIM3_LEVEL | R/W | 0-100 |
| 0x17 | DIM3_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x18 | FADE | R/W | 0-255 (x100ms) |
| 0x20 | AC_FREQ | R | 50 or 60 |
| 0x21 | AC_PERIOD_L | R | Half-wave period low byte |
| 0x22 | AC_PERIOD_H | R | Half-wave period high byte |
| 0x23 | CALIBRATION | R | 0=busy, 1=complete |
| 0x30 | I2C_ADDRESS | R/W | 0x08-0x77 |
| 0x40 | TEMP_CURRENT | R | raw-50 = Celsius; 0xFF = no sensor |
| 0x41 | TEMP_STATE | R | 0-5 (thermal state) |
I2C-Lese-Eigenart (Dummy-Lese-Anforderung)
Die MCU-Firmware erfordert ein Dummy-Lesen vor jedem echten Lesen, um den internen Registerzeiger korrekt zu setzen. Der Treiber verarbeitet dies transparent:
uint8_t DL_Read8(uint8_t addr, uint8_t reg, uint8_t bus) {
I2cRead8(addr, reg, bus); // Dummy: sets register pointer
return I2cRead8(addr, reg, bus); // Real read
}Dieses Verhalten ist eine Hardware-Anforderung der MCU und muss in jedem Code erhalten bleiben, der direkt mit dem Gerät kommuniziert.
Referenz für thermische Zustände
| Zustand | Registerwert | Typische Temperatur | Verhalten |
|---|---|---|---|
| NORMAL | 0 | Unter ~60 °C | Voller Betrieb |
| WARNING | 1 | ~60-70 °C | Nur Überwachung; keine Ausgangsänderung |
| DERATE | 2 | ~70-80 °C | MCU reduziert Ausgang graduell |
| CRITICAL | 3 | ~80-85 °C | MCU reduziert Ausgang aggressiv |
| SHUTDOWN | 4 | Über ~85 °C | Alle Ausgänge deaktiviert |
| FAULT | 5 | N/A | Temperatursensorfehler erkannt |