# Moving average

Process
Moving average
V
R
AVG

# 入力

ID略称名前デフォルト説明
valueVvalueNUMBER0
resetRresetBOOLEANfalse

# 出力

ID略称名前デフォルト説明
averageAVGaverageNUMBER0

# 設定

ID名前デフォルト単位説明
algorithmalgorithmENUM0

詳細:

値: EMA, CA
alphaalphaNUMBER0.2

詳細:

表示条件algorithm = EMA
> 0
≤ 1

# 状態

ID名前デフォルト単位説明
countcountNUMBER0
prev_resetprev_resetBOOLEANfalse

# ソースコード

Volang ソースを表示
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)
    }
}
Voldeno スマートホーム自動化における Moving average Logic Block の動作、用途、設定方法を説明します。