Zum Inhalt springen

← Web, MQTT & HTTP | Inhalt | Weiter: Referenz →

Erweiterte Funktionen — Nativer DimmerLink-Treiber für Tasmota

Dimmkurven erklärt

Die Dimmkurve bestimmt, wie der Helligkeitsprozentsatz dem tatsächlichen TRIAC-Zündwinkel und damit der an die Last abgegebenen Leistung zugeordnet wird. Es stehen drei Kurven zur Verfügung, die jeweils für verschiedene Lasttypen geeignet sind.

LINEAR (Wert 0)

Der Phasenwinkel ist proportional zum angeforderten Helligkeitsniveau. Die Beziehung zwischen dem Befehlswert und der elektrischen Leistung ist linear.

plaintext
Power delivered
100% |                    /
     |                  /
 50% |              /
     |           /
  0% |        /
     +------------------
     0%     50%     100%
          Level set

Anwendungsfälle: Allzwecklasten, Widerstandsheizungen, Kollektormotoren, jede Last, bei der die elektrische Leistung direkt dem eingestellten Wert folgen soll. Geeignet als Ausgangspunkt, wenn die optimale Kurve unbekannt ist.

Nicht empfohlen für: LED-Lampen oder Glühlampen, bei denen die wahrgenommene Helligkeit wichtig ist.

RMS (Wert 1)

Der Phasenwinkel wird so eingestellt, dass die Effektivspannung (und damit die RMS-Leistung) proportional zum eingestellten Niveau ist.

plaintext
Perceived brightness (incandescent)
100% |                    /
     |                  /
 50% |              /
     |           /
  0% |        /
     +------------------
     0%     50%     100%
          Level set

Anwendungsfälle: Glühlampen und Halogenlampen. Mit der RMS-Kurve erzeugt ein Wert von 50 ungefähr die halbe wahrgenommene Helligkeit gegenüber einem Wert von 100.

Nicht empfohlen für: LED-Lampen — dimmbare LED-Treiber regeln den Strom intern, und die Beziehung zwischen Phasenwinkel und Lichtabgabe ist komplexer.

LOG (Wert 2)

Der Phasenwinkel folgt einer logarithmischen Kurve, die gleichmäßig wahrgenommene Helligkeitsstufen erzeugen soll. Das menschliche Auge reagiert logarithmisch auf Lichtintensität (Weber-Fechner-Gesetz), sodass gleiche Schritte annähernd gleiche Wahrnehmungsänderungen erzeugen.

plaintext
Perceived brightness (LED)
100% |                         /
     |                    /
 50% |               /
     |         /
  0% |  /
     +------------------
     0%     50%     100%
          Level set

Anwendungsfälle: Dimmbare LED-Lampen, Stimmungsbeleuchtung, jede Anwendung, bei der sanftes Dimmen bei niedrigen Niveaus wichtig ist. Verhindert die häufige Beschwerde, dass LEDs in einem kleinen Bereich von „kaum an" zu „sehr hell" springen.

Nicht empfohlen für: Resistive oder induktive Lasten, bei denen die Leistungsregelung (nicht die wahrgenommene Helligkeit) das Ziel ist.

Auswahl der richtigen Kurve

Last Empfohlene Kurve Befehl
Dimmbare LED LOG DlCurve 2
Glühlampe RMS DlCurve 1
Halogenlampe RMS DlCurve 1
Widerstandsheizung LINEAR DlCurve 0
Kollektormotor (Lüfter, Mixer) LINEAR DlCurve 0
Unbekannt Alle drei ausprobieren --

Die Kurve kann jederzeit geändert werden, ohne das aktuelle Helligkeitsniveau zu beeinflussen. Die neue Kurve gilt ab dem nächsten Helligkeitsänderungsbefehl.


Fade-Steuerung

Funktionsweise

Die Fade-Zeit steuert, wie lange die MCU-Hardware für den Übergang vom aktuellen Helligkeitsniveau zum neu befohlenen Niveau benötigt. Das Fade wird vollständig in der MCU-Firmware implementiert — sobald ein neues Niveau über I2C geschrieben wird, rampt das Gerät intern ohne weitere Interaktion mit Tasmota.

Zeitberechnung

plaintext
Fade time (seconds) = value * 0.1
Wert Fade-Zeit
0 Sofort (kein Fade)
1 100 ms
5 500 ms
10 1,0 Sekunde
20 2,0 Sekunden
50 5,0 Sekunden
100 10,0 Sekunden
255 25,5 Sekunden (Maximum)

Fade gilt pro Gerät, nicht pro Kanal

Alle Kanäle eines einzelnen Geräts teilen dieselbe Fade-Zeit. Um unterschiedliche Fade-Geschwindigkeiten auf verschiedenen Kanälen zu haben, müssen diese auf separaten Geräten sein.

Fade mit Web-UI-Schiebereglern verwenden

Die Fade-Einstellung beeinflusst alle Pegeländerungsbefehle, einschließlich derjenigen von Web-UI-Schiebereglern. Bei einem Fade-Wert ungleich null sendet das Bewegen des Schiebereglers ein neues Zielniveau, und das Gerät wechselt sanft dorthin. Erneutes Bewegen des Schiebereglers vor Abschluss des Fades startet einen neuen Übergang von der aktuellen Position.

Fade einstellen und abfragen

plaintext
DlFade 10       # Set device 1 fade to 1.0 second
DlFade2 0       # Set device 2 fade to instant
DlFade          # Query device 1 current fade value

Temperaturüberwachung

Verfügbarkeit der Funktion

Die Temperaturüberwachung ist verfügbar, wenn die MCU-Firmware mit FEATURE_TEMPERATURE kompiliert wurde. Der Treiber erkennt dies automatisch beim Start durch Lesen des Registers TEMP_CURRENT (0x40). Wenn das Register 0xFF zurückgibt, ist kein Temperatursensor vorhanden und alle Temperaturfelder werden unterdrückt.

Temperaturmessung

Die Rohtemperatur wird in Register 0x40 mit einem Offset von 50 gespeichert:

plaintext
Temperature (Celsius) = register_value - 50

Dies ermöglicht einen Bereich von -50 °C (Registerwert 0) bis +205 °C (Registerwert 255). Der normale Betriebsbereich liegt zwischen 20 °C und 100 °C.

Thermische Zustände

Die MCU-Firmware verwaltet den thermischen Schutz autonom. Sechs Zustände sind definiert:

Zustand Wert Beschreibung Treiber-Aktion
NORMAL 0 Temperatur unter Warnschwelle Keine
WARNING 1 Temperatur über Warnschwelle Protokollierung auf DEBUG-Ebene
DERATE 2 Aktive Ausgangsreduzierung zur Temperatursenkung Keine — Hardware steuert Ausgang
CRITICAL 3 Aggressive Ausgangsreduzierung Protokollierung auf ERROR-Ebene
SHUTDOWN 4 Alle Ausgänge aus Sicherheitsgründen deaktiviert Protokollierung auf ERROR-Ebene
FAULT 5 Temperatursensorfehler Protokollierung auf ERROR-Ebene

Zustände CRITICAL, SHUTDOWN und FAULT lösen einen ERROR-Protokolleintrag aus:

plaintext
DLK: Dev 0x50 thermal CRITICAL

Thermischer Schutz wird hardwareseitig verwaltet

Die MCU verwaltet Drosselung und Abschaltung autonom. Tasmota kann den thermischen Schutz nicht überschreiben — wenn sich das Gerät im SHUTDOWN-Zustand befindet, hat das Schreiben eines Helligkeitswerts keinen Effekt, bis das Gerät abkühlt und den Abschaltzustand verlässt.

Überwachung via MQTT

Bei aktivierter Temperatur enthält jede SENSOR-Nachricht die aktuelle Temperatur und den Zustand:

json
{
  "DimmerLink1": {
    "Addr": "0x50",
    "ACFreq": 50,
    "Fade": 0,
    "Ch1": {"Level": 75, "Curve": "LOG"},
    "Temp": 42,
    "Thermal": "NORMAL"
  }
}

Verwenden Sie Tasmota-Regeln oder ein externes System, um auf Änderungen des thermischen Zustands zu reagieren.


Multi-Geräte-Adressierung

Der Treiber unterstützt bis zu vier DimmerLink-Geräte auf demselben I2C-Bus (oder auf zwei Bussen verteilt). Geräte werden in der Reihenfolge, in der sie beim Boot-Scan erkannt werden — aufsteigend nach Adresse (0x08 bis 0x77) — von 1 bis 4 nummeriert.

Gerätenummerierung

I2C-Adresse Erkennungsreihenfolge Gerätenummer
0x50 1. gefunden Gerät 1 (Suffix 1 oder kein Suffix)
0x51 2. gefunden Gerät 2 (Suffix 2)
0x52 3. gefunden Gerät 3 (Suffix 3)

Eindeutige Adressen zuweisen

Alle DimmerLink-Geräte werden mit I2C-Adresse 0x50 geliefert. Um mehrere Geräte zu verwenden, muss jedem einzeln eine eindeutige Adresse zugewiesen werden, bevor sie zusammen angeschlossen werden.

Schritt-für-Schritt für drei Geräte:

plaintext
Step 1: Connect Device A only (boots at 0x50)
        Console: DlAddress 0x51
        Result: Device A is now at 0x51
Step 2: Power off. Connect Device B only (boots at 0x50)
        Console: DlAddress 0x52
        Result: Device B is now at 0x52
Step 3: Power off. Connect Device C (keep at 0x50)
        Power on all three together.
        Three devices detected: 0x50, 0x51, 0x52

Adressverifizierung

Der Treiber verifiziert die Adressänderung durch erneutes Lesen des VERSION-Registers von der neuen Adresse:

c
if (DL_ValidRead8(&ver, new_addr, DL_REG_VERSION, dev->bus) && ver == DL_FW_VERSION) {
    dev->addr = new_addr;
    // success
}

Wenn die Verifizierung fehlschlägt, gibt der Befehl einen Fehler zurück. Das physische Gerät hat möglicherweise bereits die Adresse geändert — führen Sie DlStatus aus, um dies zu bestätigen.

Gültiger Adressbereich

Adressen müssen im Bereich 0x08 bis 0x77 (einschließlich) liegen. Reservierte Adressen 0x00-0x07 und 0x78-0x7F werden abgelehnt.

Hinweise zu I2C-Adresskonflikten

Die Standardadresse 0x50 kollidiert mit gängigen EEPROM/FRAM-Geräten (FM24CXX, AT24Cxx, 24C256, 24LC256). Der Treiber identifiziert DimmerLink-Geräte speziell anhand des Firmware-Versionsbytes in Register 0x03, sodass Nicht-DimmerLink-Geräte an Adresse 0x50 stillschweigend übersprungen werden. Um jedoch unerwünschte Bus-Transaktionen zu vermeiden, ändern Sie die DimmerLink-Adresse, wenn EEPROM-Geräte denselben Bus teilen.

Scanreihenfolge über Busse hinweg

Wenn zwei I2C-Busse aktiv sind, verarbeitet der Scan zuerst Bus 0 und dann Bus 1. Ein Gerät an Bus 0 mit Adresse 0x51 wird vor einem Gerät an Bus 1 mit Adresse 0x50 gefunden.


Migration vom Berry-Treiber

Wenn Sie den Berry-Treiber DimmerLink.be verwendet haben und zum nativen Treiber wechseln, beachten Sie die folgenden Unterschiede.

Was sich ändert

Aspekt Berry-Treiber Nativer Treiber
Befehlspräfix DimmerLink, DimmerLink_Kitchen usw. Dl
Geräteauswahl Nach Bezeichnung (Name) Nach Erkennungsreihenfolge (Zahlensuffix)
Kanaladressierung Abschließende Ziffer: DimmerLink_Kitchen2 ch,level-Syntax: DlDim 2,50
Kurvenbefehl DimmerLink_KitchenCurve 2 DlCurve 2
Fade-Befehl DimmerLink_KitchenFade 10 DlFade 10
Virtuelles Relais Ja — Power ON/OFF Nicht vorhanden
Voreinstellungen DimmerLinkPreset night Nicht vorhanden
Bus-Scanner DimmerLink.scan() in der Berry-Konsole Nicht vorhanden; I2CScan verwenden
Benannte Instanzen Ja — Bezeichnungen in dimmerlink.json Nicht vorhanden — Geräte nummeriert
Konfiguration /dimmerlink.json im Dateisystem user_config_override.h zur Kompilierzeit
MQTT-Telemetrieschlüssel Gerätebezeichnung (z. B. "Kitchen") DimmerLink1, DimmerLink2 usw.

Migrationsschritte

  1. Firmware flashen, die USE_DIMMERLINK enthält.
  2. Berry-Treiberdateien entfernen aus dem Dateisystem (DimmerLink.be, dimmerlink_loader.be) oder die Zeile load('dimmerlink_loader.be') aus autoexec.be entfernen. Der Berry-Treiber und der native Treiber können koexistieren, reagieren aber beide auf dasselbe Gerät und erzeugen doppelte Telemetriedaten.
  3. MQTT-Automatisierungen aktualisierenDimmerLink_-Befehlsnamen durch DlDim, DlCurve, DlFade ersetzen.
  4. MQTT-Abonnements aktualisieren — benannte Geräteschlüssel (z. B. "Kitchen") durch nummerierte Schlüssel ("DimmerLink1", "DimmerLink2") ersetzen.
  5. HTTP-API-Aufrufe aktualisierenDimmerLink_Kitchen%2075 durch DlDim%2075 (oder DlDim2%2075 für das zweite Gerät) ersetzen.
  6. Virtuelle Relais — wenn Sie Power zum Umschalten von Geräten verwendet haben, implementieren Sie die entsprechende Logik mit Tasmota-Regeln und DlDim-Befehlen.
  7. Voreinstellungen — wenn Sie DimmerLinkPreset verwendet haben, erstellen Sie entsprechende Tasmota-Regeln oder Berry-Skripte, die DlDim-Befehle ausgeben.