# Switch

Eingänge register
Switch
C
SP
LP
H
TG
ON
OFF

# Ausgänge

IDKürzelNameTypStandardBeschreibung
clickCclickBOOLEANfalse
short_pressSPshort_pressBOOLEANfalse
long_pressLPlong_pressBOOLEANfalse
holdHholdBOOLEANfalse
toggleTGtoggleBOOLEANfalse
onONonBOOLEANfalse
offOFFoffBOOLEANtrue

# Konfiguration

IDNameTypStandardEinheitBeschreibung
click_duration_msclick_duration_msNUMBER500ms

Details:

≥ 0
short_press_duration_msshort_press_duration_msNUMBER1000ms

Details:

≥ 0
> click_duration_ms
long_press_duration_mslong_press_duration_msNUMBER5000ms

Details:

≥ 0
> short_press_duration_ms
hold_duration_mshold_duration_msNUMBER1000ms

Details:

≥ 0

# Zustand

IDNameTypStandardEinheitBeschreibung
last_change_time_mslast_change_time_msNUMBER0ms

# Quellcode

Volang-Quellcode anzeigen
callback_ms = 100
channel = input::channel()

extern fn onCallback(callback_id, callback_ms) {
    if (callback_id == 1) {
        output::set("click", false)
    } else if (callback_id == 2) {
        output::set("short_press", false)
    } else if (callback_id == 3) {
        output::set("long_press", false)
    } else if (callback_id == 10) { // hold check
        if (output::get("on") == true) {
            if (output::get("hold")) {
                output::set("hold", false)
                callback::set(config::get("hold_duration_ms"), "onCallback", 10, callback_ms)
            } else if (!output::get("hold")) {
                output::set("hold", true)
                callback::set(callback_ms, "onCallback", 10, callback_ms) // schedule callback to switch off the hold pulse
            }
        }
    }
}

pressed = input::value()
now = time::uptime()

if (pressed == 1) {
    state::set("last_change_time_ms", now)
    output::set("on", true)
    output::set("off", false)

    callback::set(config::get("hold_duration_ms"), "onCallback", 10, callback_ms)
} else {
    callback::clear()

    diff_ms = time::uptime() - state::get("last_change_time_ms")

    clicked = false
    if (diff_ms <= config::get("click_duration_ms")) {
        output::set("click", true)
        callback::set(callback_ms, "onCallback", 1, callback_ms)
        clicked = true
    } else if (diff_ms <= config::get("short_press_duration_ms")) {
        output::set("short_press", true)
        callback::set(callback_ms, "onCallback", 2, callback_ms)
    } else if (diff_ms <= config::get("long_press_duration_ms")) {
        output::set("long_press", true)
        callback::set(callback_ms, "onCallback", 3, callback_ms)
    }

    if (clicked) {
        output::toggle("toggle")
    }
    output::set("on", false)
    output::set("off", true)

    output::set("hold", false)
}
Erfahren Sie, wie der Logikbaustein Switch funktioniert, wann Sie ihn einsetzen und wie Sie ihn in Ihrer Voldeno Smart-Home-Automatisierung konfigurieren.