# Moving average
Moving average
V
R
AVG
# Eingänge
| ID | Kürzel | Name | Typ | Standard | Beschreibung |
|---|---|---|---|---|---|
value | V | value | NUMBER | 0 | |
reset | R | reset | BOOLEAN | false |
# Ausgänge
| ID | Kürzel | Name | Typ | Standard | Beschreibung |
|---|---|---|---|---|---|
average | AVG | average | NUMBER | 0 |
# Konfiguration
| ID | Name | Typ | Standard | Einheit | Beschreibung |
|---|---|---|---|---|---|
algorithm | algorithm | ENUM | 0 | Details: Werte: EMA, CA | |
alpha | alpha | NUMBER | 0.2 | Details: Sichtbar wenn algorithm = EMA> 0 ≤ 1 |
# Zustand
| ID | Name | Typ | Standard | Einheit | Beschreibung |
|---|---|---|---|---|---|
count | count | NUMBER | 0 | ||
prev_reset | prev_reset | BOOLEAN | false |
# Quellcode
Volang-Quellcode anzeigen
channel = input::channel()
value = input::value()
if (channel == "reset") {
prev_reset = state::get("prev_reset")
if (value and !prev_reset) {
current = input::get("value")
state::set("count", 1)
output::set("average", current)
}
state::set("prev_reset", value)
return
}
if (channel == "value") {
count = state::get("count")
avg = output::get("average")
if (count == 0) {
state::set("count", 1)
output::set("average", value)
return
}
algorithm = config::get("algorithm")
if (algorithm == 0) {
alpha = config::get("alpha")
new_avg = alpha * value + (1 - alpha) * avg
output::set("average", new_avg)
} else {
count = count + 1
state::set("count", count)
new_avg = avg + (value - avg) / count
output::set("average", new_avg)
}
}
