← Metodi di controllo | Indice | Avanti: Riferimento →
Esempi di codice
Esempio 1: Controllo semplice della luminosità da 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)Esempio 2: Dimmerazione temporizzata con 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()Esempio 3: Reazione alla pressione di un pulsante
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
)Esempio 4: Variazioni di luminosità pianificate
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")Esempio 5: Controllo scene attivato via 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 Esempio 6: Endpoint HTTP personalizzato
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}} Esempio 7: Avviso di riduzione termica
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")Esempio 8: Configurazione manuale senza auto-loader
Se si preferisce il controllo manuale completo invece dell'auto-loader:
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 = bedroomPoi in altri script Berry:
berry
global.kitchen_dimmer.set_level(0, 50)
global.bedroom_dimmer.set_level(1, 30) # channel 2Esempio 9: Integrazione con Home Assistant tramite MQTT
Il rilevamento automatico di Tasmota funziona con Home Assistant. Il relè virtuale DimmerLink appare come un interruttore. Per il controllo del dimmer, pubblicare da 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"