# Irrigation

Przetwarzanie

System nawadniania

Irrigation
T
R
P
S1
S2
S3
S4
S5
S6
S7
S8

# Wejścia

IDSkrótNazwaTypDomyślnieOpis
triggerTWyzwólBOOLEANfalse
resetRResetujBOOLEANfalse

# Wyjścia

IDSkrótNazwaTypDomyślnieOpis
pumpPPompaBOOLEANfalseWyjście sterowania pompą
section_1S1Sekcja #1BOOLEANfalseWyjście sterowania zaworem sekcji #1
section_2S2Sekcja #2BOOLEANfalseWyjście sterowania zaworem sekcji #2
section_3S3Sekcja #3BOOLEANfalseWyjście sterowania zaworem sekcji #3
section_4S4Sekcja #4BOOLEANfalseWyjście sterowania zaworem sekcji #4
section_5S5Sekcja #5BOOLEANfalseWyjście sterowania zaworem sekcji #5
section_6S6Sekcja #6BOOLEANfalseWyjście sterowania zaworem sekcji #6
section_7S7Sekcja #7BOOLEANfalseWyjście sterowania zaworem sekcji #7
section_8S8Sekcja #8BOOLEANfalseWyjście sterowania zaworem sekcji #8

# Konfiguracja

IDNazwaTypDomyślnieJednostkaOpis
s1_enabledS1 włączonaBOOLEANtrueOkreśla czy sekcja #1 jest włączona
s1_durationS1 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #1

Szczegóły:

Widoczne gdys1_enabled = true
≥ 0
s2_enabledS2 włączonaBOOLEANfalseOkreśla czy sekcja #2 jest włączona
s2_durationS2 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #2

Szczegóły:

Widoczne gdys2_enabled = true
≥ 0
s3_enabledS3 włączonaBOOLEANfalseOkreśla czy sekcja #3 jest włączona
s3_durationS3 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #3

Szczegóły:

Widoczne gdys3_enabled = true
≥ 0
s4_enabledS4 włączonaBOOLEANfalseOkreśla czy sekcja #4 jest włączona
s4_durationS4 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #4

Szczegóły:

Widoczne gdys4_enabled = true
≥ 0
s5_enabledS5 włączonaBOOLEANfalseOkreśla czy sekcja #5 jest włączona
s5_durationS5 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #5

Szczegóły:

Widoczne gdys5_enabled = true
≥ 0
s6_enabledS6 włączonaBOOLEANfalseOkreśla czy sekcja #6 jest włączona
s6_durationS6 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #6

Szczegóły:

Widoczne gdys6_enabled = true
≥ 0
s7_enabledS7 włączonaBOOLEANfalseOkreśla czy sekcja #7 jest włączona
s7_durationS7 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #7

Szczegóły:

Widoczne gdys7_enabled = true
≥ 0
s8_enabledS8 włączonaBOOLEANfalseOkreśla czy sekcja #8 jest włączona
s8_durationS8 czas trwaniaNUMBER600sCałkowity czas nawadniania w sekundach dla sekcji #8

Szczegóły:

Widoczne gdys8_enabled = true
≥ 0

# Stan

IDNazwaTypDomyślnieJednostkaOpis
activeAktywnyBOOLEANfalseCzy nawadnianie jest obecnie aktywne

# Kod źródłowy

Pokaż kod Volang
channel = input::channel()

section_count = 8

fn disable_all(section_count) {
    section = 0
    while (section < section_count) {
        section += 1
        output::set(str::fmt("section_{}", section), false)
    }
}

extern fn onCallback(section_count, callback_id) {
    disable_all(section_count)

    current_section = 0
    if (callback_id == 0) {
        output::set("pump", true)
        callback::set(0, "onCallback", section_count, 1)
        return
    } else if (callback_id > 0 and callback_id < (section_count + 1)) {
        current_section = callback_id
    } else if (callback_id == (section_count + 1)) {
        output::set("pump", false)
        state::set("active", false)
        return
    }

    section_output = str::fmt("section_{}", current_section)
    section_enabled_cfg = str::fmt("s{}_enabled", current_section)
    section_duration_cfg = str::fmt("s{}_duration", current_section)

    section_enabled = config::get(section_enabled_cfg)
    section_duration = config::get(section_duration_cfg)

    if (!section_enabled) {
        callback::set(0, "onCallback", section_count, current_section + 1)
        return
    }

    output::set(section_output, true)
    callback::set(section_duration * 1000, "onCallback", section_count, current_section + 1)
}

input_value = input::value()

if (channel == "trigger" and input_value) {
    if (state::get("active")) {
        return
    }

    state::set("active", true)
    callback::set(0, "onCallback", section_count, 0)
    return
}

if (channel == "reset") {
    callback::clear()
    callback::set(0, "onCallback", section_count, section_count + 1)
    return
}
System nawadniania