Se rendre au contenu

Variateur AC via DimmerLink dans Tasmota

Tasmota n'a pas de pilote natif de découpe de phase TRIAC. DimmerLink comble cette lacune — Tasmota envoie des commandes par I2C (Berry sur ESP32) ou UART (SerialSend sur toute carte), et DimmerLink gère la synchronisation TRIAC précise.

En bref : Tasmota ne peut pas piloter nativement un variateur TRIAC à découpe de phase. Utilisez DimmerLink comme esclave I2C/UART. Sur ESP32 Tasmota : écrivez un script Berry de 5 lignes qui associe tout déclencheur de règle à une écriture de registre I2C à l'adresse 0x50. Sur ESP8266 : utilisez SerialSend5 avec le format de paquet binaire DimmerLink. Home Assistant découvre l'appareil automatiquement via Tasmota MQTT.




Pourquoi Tasmota ne peut pas piloter un TRIAC directement

La commande Dimmer de Tasmota contrôle une sortie PWM interne ou un relais SWITCH. Elle ne supporte pas la commande de phase TRIAC (découpe de phase) car cela nécessite une interruption matérielle à chaque passage par zéro AC (toutes les 10 ms à 50 Hz) avec une précision de déclenchement inférieure à la milliseconde.

Tasmota exécute une boucle d'événements et la pile WiFi sur le même cœur. Il ne peut pas garantir une latence ISR < 1 ms sous charge WiFi. Brancher directement un module TRIAC rbdimmer et tenter de synchroniser les impulsions de gâchette depuis Tasmota produira du scintillement ou aucune variation de luminosité.

La solution : déléguer la synchronisation à DimmerLink. DimmerLink est un contrôleur dédié Cortex-M0+ qui gère la détection de passage par zéro et le déclenchement du TRIAC de manière autonome. Tasmota envoie uniquement le niveau de luminosité cible (0–100) une fois par commande utilisateur — aucune exigence de synchronisation.




Matériel nécessaire

  • Carte ESP32 ou ESP8266 flashée avec Tasmota
  • Module DimmerLink
  • Module variateur AC rbdimmer (tout calibre de courant)
  • Résistances 4,7 kΩ × 2 (pour rappels I2C, en mode I2C)



Étape 1 — Basculer DimmerLink en mode I2C

DimmerLink est livré en mode UART par défaut. Pour l'approche Berry I2C (ESP32), vous devez d'abord le basculer en mode I2C.

Connectez DimmerLink à un adaptateur USB-UART (TX → RX, RX → TX, GND → GND, VCC → 3.3V), puis envoyez la commande SWITCH_I2C à 115200 baud :

text
Byte sequence: 02 5B

Dans n'importe quel terminal série (RealTerm, picocom) :

  1. Ouvrez le port à 115200, 8N1.
  2. Envoyez les octets bruts : 02 5B.
  3. Réponse attendue : 00 (OK). DimmerLink démarre désormais en mode I2C après chaque mise sous tension.

Après le basculement, déconnectez de l'adaptateur UART et câblez en I2C.

Si vous préférez garder DimmerLink en mode UART (plus simple pour ESP8266), passez cette étape et allez directement à l'Étape 3.




Étape 2 — Câblage


Connexion I2C (ESP32 — recommandée)

❌ non supporté Pin ESP32 Remarques
VCC 3,3V Correspondre à la tension logique du MCU
GND GND
SDA (TX/SDA) GPIO21 Ajouter un rappel 4,7 kΩ vers 3.3V
SCL (RX/SCL) GPIO22 Ajouter un rappel 4,7 kΩ vers 3.3V

Connectez les résistances de rappel de SDA et SCL vers 3.3V. Sans elles, le bus I2C ne fonctionnera pas de manière fiable.

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


Connexion UART (ESP8266 ou ESP32)

❌ non supporté ESP8266 RBDdimmer (ancienne) Remarques
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 sur ESP8266 sont partagés avec l'USB. Utilisez Serial.swap() pour rediriger vers GPIO15/GPIO13, ou utilisez I2C.

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


DimmerLink → Module variateur AC

❌ non supporté Module variateur
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.




Étape 3A — Script Berry Tasmota (ESP32, mode I2C)

Le scripting Berry est disponible uniquement sur ESP32 Tasmota. Il offre un contrôle programmatique complet de l'I2C.

Ouvrez la console web Tasmota et collez :

berry
# Fichier : dimmer_i2c.be — contrôle DimmerLink par I2C
# Registre 0x10 (DIM0_LEVEL) : 0–100 pourcent
import wire
wire.begin()  # initialiser le bus I2C une fois au chargement du script
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)   # registre DIM0_LEVEL
    wire.write(l)
    wire.endTransmission()
end
# Associer la commande Dimmer de Tasmota (0–100) à DimmerLink
tasmota.add_rule("Dimmer#State",
    def(value) set_dimmer(value) end)
# Associer la commande Power (on/off) à pleine ou zéro luminosité
tasmota.add_rule("Power#State",
    def(value)
        if value == 1 then set_dimmer(100)
        else set_dimmer(0) end
    end)

Pour le charger automatiquement au démarrage, enregistrez sous autoexec.be via le gestionnaire de fichiers Tasmota (Tools → Manage File System).

Fonctionnement :

  • wire.begin() est appelé une fois au chargement du script pour initialiser le bus I2C — pas à chaque commande.
  • wire.beginTransmission(0x50) adresse DimmerLink à l'adresse I2C par défaut.
  • wire.write(0x10) sélectionne le registre DIM0_LEVEL.
  • wire.write(l) définit la luminosité 0–100%.
  • La règle se déclenche chaque fois que Tasmota reçoit une commande Dimmer depuis la console, par MQTT ou depuis Home Assistant.


Test depuis la console Tasmota

text
Dimmer 50     → set_dimmer(50) → écriture I2C 50 dans 0x10
Dimmer 0      → set_dimmer(0)  → lampe éteinte
Power 0       → set_dimmer(0)



Étape 3B — UART Tasmota via SerialSend (ESP8266 et ESP32)

Si Berry n'est pas disponible (ESP8266) ou si vous préférez ne pas écrire de scripts, utilisez SerialSend5 pour envoyer des paquets binaires bruts à DimmerLink par UART.

Format de paquet UART DimmerLink pour SET luminosité :

text
02  53  00  LEVEL
│   │   │   └── luminosité 0–100 (décimal)
│   │   └────── index du canal (toujours 00)
│   └────────── commande SET (0x53)
└────────────── octet de début (toujours 0x02)

Dans la console Tasmota :

text
# Régler la luminosité à 50%  (0x32 hex = 50 décimal)
SerialSend5 02530032
# Régler la luminosité à 75%  (0x4B hex = 75 décimal)
SerialSend5 0253004B
# Éteindre  (0x00 = 0%)
SerialSend5 02530000
# Allumer à fond (0x64 hex = 100 décimal)
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.


Automatiser SerialSend avec les règles Tasmota

Associez la valeur interne Dimmer de Tasmota à une commande SerialSend via les variables Mem et l'astuce WebCmd — ou écrivez un script Berry pour une conversion propre sur ESP32. Pour ESP8266, une approche plus simple consiste à utiliser des niveaux fixes via les règles Tasmota :

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

Pour un contrôle progressif à niveau arbitraire sur ESP8266, l'approche Berry sur ESP32 est recommandée.




Étape 4 — Intégration Home Assistant

Une fois que Tasmota contrôle DimmerLink, Home Assistant voit le périphérique ESP comme un nœud Tasmota standard via la découverte automatique MQTT.

Activer la découverte automatique MQTT dans Tasmota :

text
SetOption19 1      # Activer la découverte MQTT Home Assistant

Home Assistant crée automatiquement une entité light avec contrôle de luminosité. Le curseur de luminosité HA (0–255) est converti en commande Dimmer Tasmota (0–100), qui déclenche la règle Berry écrivant dans DimmerLink.

Pour une configuration manuelle de HA (si la découverte est désactivée) :

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) }}



Erreurs fréquentes

Problème Cause Solution
Berry non disponible sur l'appareil Tasmota sur ESP8266 Utiliser l'approche UART + SerialSend5
La commande Dimmer n'a aucun effet Règle non chargée ou coquille Vérifier la syntaxe tasmota.add_rule ; recharger Berry
DimmerLink ne répond pas en I2C Mauvais mode (toujours UART) Envoyer 02 5B via UART d'abord
I2C instable sous WiFi Résistances de rappel manquantes Ajouter 4,7 kΩ sur SDA et SCL
SerialSend5 envoie un mauvais niveau Erreur de conversion hex 50% = 0x32, 75% = 0x4B, 100% = 0x64
HA affiche le variateur mais le niveau est ignoré Incompatibilité on_command_type Utiliser brightness_scale: 100 dans la config MQTT light



Alternative — ESPHome au lieu de Tasmota

Si l'approche par scripting Berry dans Tasmota semble complexe, ESPHome propose une intégration native DimmerLink en 5 lignes de YAML et gère automatiquement toute la communication I2C.

See: ESPHome YAML for AC Dimmer and DimmerLink




Checklist rapide

  • ☐ DimmerLink basculé en mode I2C (si Berry utilisé) — envoyer `02 5B` via UART
  • ☐ Résistances de rappel installées sur SDA et SCL (4,7 kΩ vers 3.3V)
  • ☐ Berry autoexec.be enregistré et chargé (`tasmota.add_rule` présent)
  • ☐ Console Tasmota : `Dimmer 50` déclenche set_dimmer(50) dans le log Berry
  • ☐ UART : `SerialSend5 02530032` retourne la réponse `00` dans le moniteur série
  • ☐ Découverte automatique Tasmota MQTT activée (`SetOption19 1`)
  • ☐ L'entité light HA apparaît et le curseur contrôle la luminosité



  • Articles connexes



    Encore des questions ?

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

    Partager cet article
    Se connecter pour laisser un commentaire.