Impulse zählen mit wb-rules
Impulse an einem Digitaleingang zählen
Ein Zähler oder Taster mit potenzialfreiem Ausgang wird an den Universaleingang A1 des Controllers angeschlossen. Die Regel zählt, wie oft A1 mit Masse verbunden wird, und zeigt das Ergebnis in einem virtuellen Gerät an. Das Gerät enthält außerdem eine Schaltfläche zum Zurücksetzen des Zählers.
Das WB-MCM8 bietet dieselbe Impulszählfunktion und speichert die Zählerwerte im eigenen nichtflüchtigen Speicher. Der Hersteller empfiehlt es für reale Installationen; das folgende Beispiel dient zur Demonstration und zum Lernen.
Berücksichtigen Sie in einer realen Installation die Häufigkeit der Schreibzugriffe auf PersistentStorage. Diese Schreibzugriffe erreichen den eMMC-Speicher des Controllers; das Speichern bei jedem Impuls kann bei hohen Impulsraten den Speicherverschleiß beschleunigen.
Beispielregel
Die Regel stellt beim Start den gespeicherten Zählerstand wieder her, zählt nur steigende Flanken (0 → 1) und speichert sowohl Erhöhungen als auch Rücksetzungen.
defineVirtualDevice("pulse_counter", {
title: "Pulse counter",
cells: {
impulses: {
type: "value",
value: 0
},
reset: {
type: "pushbutton"
}
}
});
var ps = new PersistentStorage("pulse-counter-storage", { global: true });
var inputChannel = "wb-gpio/A1_IN";
var impulseCount = (ps["impulseCount"] === undefined) ? 0 : ps["impulseCount"];
dev["pulse_counter"]["impulses"] = impulseCount;
defineRule("count_impulses", {
whenChanged: inputChannel,
then: function (newValue) {
if (newValue) {
impulseCount += 1;
dev["pulse_counter"]["impulses"] = impulseCount;
ps["impulseCount"] = impulseCount;
}
}
});
defineRule("reset_counter", {
whenChanged: "pulse_counter/reset",
then: function () {
impulseCount = 0;
dev["pulse_counter"]["impulses"] = impulseCount;
ps["impulseCount"] = impulseCount;
}
});
Ersetzen Sie für WBE2-DI-DR-3 den Eingangskanal A1 durch den gewünschten Kanal aus seiner MQTT-Kanaltabelle, beispielsweise wb-gpio/MOD1_IN1.
