Se rendre au contenu

← Méthodes de contrôle | Sommaire | Suivant : Référence →

Exemples de code

Exemple 1 : Contrôle simple de la luminosité depuis Berry

berry
# Set brightness directly from any Berry script
import DimmerLink
# Access the first loaded DimmerLink instance
var dim = global._dimmerlink[0]
# Set brightness
dim.set_level(0, 75)     # channel 0 (first channel), 75%
# Read current level
print(dim.levels[0])     # prints: 75
# Turn off
dim.set_level(0, 0)

Exemple 2 : Gradation minutée avec un timer Berry

berry
# Gradually dim from current level to 0 over 10 seconds
var dim = global._dimmerlink[0]
var target = 0
var current = dim.levels[0]
var steps = 20
var step_size = (current - target) / steps
var step_delay = 500  # ms
var step_count = 0
def dim_step()
  step_count += 1
  var new_level = current - int(step_size * step_count)
  if new_level < target  new_level = target  end
  dim.set_level(0, new_level)
  if step_count < steps
    tasmota.set_timer(step_delay, dim_step)
  end
end
dim_step()

Exemple 3 : Réaction à un appui sur un bouton

berry
# Toggle DimmerLink on button press using Tasmota rules
# In Tasmota console:
# Rule1 ON Button1#state DO br global._dimmerlink[0].set_level(0, global._dimmerlink[0].levels[0] > 0 ? 0 : 100) ENDON
# Rule1 1
# Or in Berry:
tasmota.add_rule("Button1#state",
  def ()
    var dim = global._dimmerlink[0]
    if dim.levels[0] > 0
      dim.set_level(0, 0)
    else
      dim.set_level(0, 100)
    end
    dim._sync_power()
  end
)

Exemple 4 : Changements de luminosité planifiés

berry
# Set brightness based on time of day
# Add to autoexec.be after the dimmerlink_loader line
tasmota.add_cron("0 0 7 * * *", def ()
  # 7:00 AM — full brightness
  tasmota.cmd("DimmerLinkPreset full")
end, "morning")
tasmota.add_cron("0 0 21 * * *", def ()
  # 9:00 PM — dim for evening
  tasmota.cmd("DimmerLinkPreset low")
end, "evening")
tasmota.add_cron("0 0 23 * * *", def ()
  # 11:00 PM — night mode
  tasmota.cmd("DimmerLinkPreset night")
end, "night")

Exemple 5 : Contrôle de scènes déclenché par MQTT

berry
# Subscribe to a custom MQTT topic for scene control
tasmota.add_rule("MqttReceived#scene",
  def (value)
    if value == "movie"
      # Dim to 10%, LOG curve for LED
      for inst : global._dimmerlink
        for ch : 0 .. inst.channels - 1
          inst.set_level(ch, 10)
        end
        inst._sync_power()
      end
      tasmota.cmd("DimmerLink_TVCurve 2")  # LOG curve
    elif value == "dinner"
      tasmota.cmd("DimmerLinkPreset mid")
      tasmota.cmd("DimmerLink_KitchenCurve 1")  # RMS for warm light
    elif value == "off"
      tasmota.cmd("DimmerLinkPreset night")
    end
  end
)
# Trigger from MQTT:
# Topic: cmnd//scene
# Payload: movie

Exemple 6 : Point de terminaison HTTP personnalisé

berry
# Add a custom web endpoint for external integration
import webserver
webserver.on("/dimmerlink/api", def (req)
  import json
  var result = {}
  for inst : global._dimmerlink
    result[inst.label] = {
      "addr": format("0x%02X", inst.addr),
      "levels": inst.levels,
      "power": inst.power,
      "ready": inst.ready
    }
  end
  webserver.content_response(json.dump(result))
end)
# Access: http:///dimmerlink/api
# Returns: {"Kitchen":{"addr":"0x50","levels":[75],"power":true,"ready":true}}

Exemple 7 : Alerte de déclassement thermique

berry
# Monitor temperature and send MQTT alert if thermal protection activates
# (Requires MCU firmware with FEATURE_TEMPERATURE)
tasmota.add_cron("0 */1 * * * *", def ()
  for inst : global._dimmerlink
    if inst.has_temp
      var temp = inst.get_temp()
      var state = inst.get_temp_state_name()
      if state != "NORMAL" && state != nil
        var msg = format('{"alert":"thermal","device":"%s","temp":%d,"state":"%s"}', inst.label, temp, state)
        tasmota.publish("tele/dimmerlink/alert", msg)
      end
    end
  end
end, "temp_monitor")

Exemple 8 : Configuration manuelle sans chargeur automatique

Si vous préférez un contrôle entièrement manuel plutôt que d'utiliser le chargeur automatique :

berry
# In preinit.be (runs before autoexec.be)
import DimmerLink
# Create instances explicitly
var kitchen = DimmerLink(0x50, "Kitchen", 1)
var bedroom = DimmerLink(0x51, "Bedroom", 2)
# Store references for use in other scripts
global.kitchen_dimmer = kitchen
global.bedroom_dimmer = bedroom

Puis dans d'autres scripts Berry :

berry
global.kitchen_dimmer.set_level(0, 50)
global.bedroom_dimmer.set_level(1, 30)  # channel 2

Exemple 9 : Intégration avec Home Assistant via MQTT

La découverte automatique de Tasmota fonctionne avec Home Assistant. Le relais virtuel DimmerLink apparaît comme un interrupteur. Pour le contrôle du variateur, publiez depuis HA :

yaml
# Home Assistant configuration.yaml
mqtt:
  light:
    - name: "Kitchen Dimmer"
      command_topic: "cmnd/tasmota_XXXX/DimmerLink_Kitchen"
      state_topic: "tele/tasmota_XXXX/SENSOR"
      state_value_template: "{{ value_json.Kitchen.Level }}"
      brightness_command_topic: "cmnd/tasmota_XXXX/DimmerLink_Kitchen"
      brightness_state_topic: "tele/tasmota_XXXX/SENSOR"
      brightness_value_template: "{{ value_json.Kitchen.Level }}"
      brightness_scale: 100
      on_command_type: "brightness"