Ir al contenido

← Métodos de control | Contenido | Siguiente: Referencia →

Ejemplos de código

Ejemplo 1: Control simple de brillo desde 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)

Ejemplo 2: Atenuación temporizada con temporizador 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()

Ejemplo 3: Reacción a la pulsación de un botón

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
)

Ejemplo 4: Cambios de brillo programados

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

Ejemplo 5: Control de escenas activado por 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

Ejemplo 6: Endpoint HTTP personalizado

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

Ejemplo 7: Alerta de reducción por temperatura

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

Ejemplo 8: Configuración manual sin cargador automático

Si prefiere el control manual completo en lugar de usar el cargador automático:

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

Luego en otros scripts Berry:

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

Ejemplo 9: Integración con Home Assistant mediante MQTT

El autodescubrimiento de Tasmota funciona con Home Assistant. El relé virtual DimmerLink aparece como un interruptor. Para el control del dimmer, publique desde 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"