Counter Node für Node-RED

node-red-contrib-counter

Es gibt wirklich unzählige Nodes als Erweiterung für Node-Red. Was es bisher aber nicht gab, war ein einfacher Zähler für Nachrichten-Pakete. Und genau sowas habe ich für mein Projekt benötigt. Also was blieb mir anderes über, als kurzer Hand eine solche Node selber zu schreiben?! ;)

Die Node ist mittlerweile öffentlich auf GitHub, npm und über die offizielle Node-Sammlung verfügbar und kann somit wie jede andere Node installiert werden.

npm install node-red-contrib-counter

Die Nutzung ist denkbar einfach. Setzt man die Node in einen beliebigen Flow zwischen zwei Nodes ein, so zählt diese die Nachrichtenmenge und fügt msg.count zur ausgehenden Nachricht hinzu. Neben diesem Standardverhalten gibt es viele Einstell- und Steuerungsmöglichkeiten für die Node.

Konfiguration

  • Initial Count: Der Zählerstand der Node beim Start.
  • Default Step: Der Wert, um welchen der Zähler bei jeder Nachricht erhöht werden soll.
  • Lower Limit: Ein optionales oberes Limit für den Wert des Zählers.
  • Upper Limit: Ein optionales unteres Limit für den Wert des Zählers.
  • Mode: Gibt an, ob der Zähler standardmäßig erhöht oder verringert werden soll bei eingehenden Nachrichten.
  • Outputs: Steuert die Weitergabe der Nachrichten, mehr Informationen unterhalb.

Ausgabe

Es gibt zwei verschiedene Möglichkeiten zur Aus- und Weitergabe der Nachrichten:

  • single: Der aktuelle Zählerstand wird als msg.count an das eingehende Nachrichtenobjekt gehangen.
  • split: Die Node hat nun zwei ausgehende Punkte. Der erste gibt nur den Zählerstand als msg.payload und ggf. Informationen zur Limitierung aus. Der zweite Ausgang enthält das unberührte, originale msg Objekt.

Steuerung

Es ist möglich, den Zähler mittels eingehenden Nachrichten im Verhalten zu kontrollieren. Dies geschieht mit Eigenschaften des eigehenden msg Objektes:

  • msg.increment: Der Zähler wird um den übergebenen Wert erhöht.
  • msg.decrement: Der Zähler wird um den übergebenen Wert verringert.
  • msg.reset: Wenn kein Wert übergeben wurde, wird der Zähler auf den initial count zurückgesetzt. Wird hingegen ein Wert übergeben, so wird der Wert des Zählers auf diesen gesetzt.

Beispiele

Zwei einfache Beispiel-Flows welche die Bedienung und Ausgabe der Node zeigen.


[{
  "id":"25b6280d.1ecf6",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"decrement",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":380,
  "y":160,
  "wires":[["8a41c1.6006b64"]]
},{
  "id":"285e0e19.b9680a",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"increment",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":380,
  "y":120,
  "wires":[["ce8d952f.18666"]]
},{
  "id":"fda0a334.bc9588",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"reset",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":370,
  "y":200,
  "wires":[["17cce981.975686"]]
},{
  "id":"ce8d952f.18666",
  "type":"function",
  "z":"327d23e5.bb5924",
  "name":"msg object",
  "func":"msg.increment = 2;\nreturn msg;",
  "outputs":1,
  "noerr":0,
  "x":550,
  "y":120,
  "wires":[["ac65bf94.6e609"]]
},{
  "id":"17cce981.975686",
  "type":"function",
  "z":"327d23e5.bb5924",
  "name":"msg object",
  "func":"msg.reset = true;\nreturn msg;",
  "outputs":1,
  "noerr":0,
  "x":550,
  "y":200,
  "wires":[["ac65bf94.6e609"]]
},{
  "id":"8a41c1.6006b64",
  "type":"function",
  "z":"327d23e5.bb5924",
  "name":"msg object",
  "func":"msg.decrement = 1;\nreturn msg;",
  "outputs":1,
  "noerr":0,
  "x":550,
  "y":160,
  "wires":[["ac65bf94.6e609"]]
},{
  "id":"ac65bf94.6e609",
  "type":"counter",
  "z":"327d23e5.bb5924",
  "name":"",
  "init":"0",
  "step":1,
  "lower":null,
  "upper":null,
  "mode":"increment",
  "outputs":"1",
  "x":740,
  "y":140,
  "wires":[["988afc3c.a08f98"]]
},{
  "id":"370626a8.22216a",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"normal msg without control parameter",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":470,
  "y":80,
  "wires":[["ac65bf94.6e609"]]
},{
  "id":"988afc3c.a08f98",
  "type":"debug",
  "z":"327d23e5.bb5924",
  "name":"message",
  "active":true,
  "console":"false",
  "complete":"true",
  "x":900,
  "y":140,
  "wires":[]
}]

[{
  "id":"4f41c5a1.85426c",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"decrement",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":380,
  "y":380,
  "wires":[["e9085587.2d19c"]]
},{
  "id":"afb267a8.63739",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"increment",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":380,
  "y":340,
  "wires":[["4a35e3c7.3dbd0c"]]
},{
  "id":"f066adf1.21ba",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"reset",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":370,
  "y":420,
  "wires":[["523f8e05.d5537"]]
},{
  "id":"4a35e3c7.3dbd0c",
  "type":"function",
  "z":"327d23e5.bb5924",
  "name":"msg object",
  "func":"msg.increment = 3;\nreturn msg;",
  "outputs":1,
  "noerr":0,
  "x":550,
  "y":340,
  "wires":[["f33ad4bd.777a5"]]
},{
  "id":"523f8e05.d5537",
  "type":"function",
  "z":"327d23e5.bb5924",
  "name":"msg object",
  "func":"msg.reset = 10;\nreturn msg;",
  "outputs":1,
  "noerr":0,
  "x":550,
  "y":420,
  "wires":[["f33ad4bd.777a5"]]
},{
  "id":"e9085587.2d19c",
  "type":"function",
  "z":"327d23e5.bb5924",
  "name":"msg object",
  "func":"msg.decrement = 1;\nreturn msg;",
  "outputs":1,
  "noerr":0,
  "x":550,
  "y":380,
  "wires":[["f33ad4bd.777a5"]]
},{
  "id":"9b40b088.73732",
  "type":"debug",
  "z":"327d23e5.bb5924",
  "name":"count",
  "active":true,
  "console":"false",
  "complete":"payload",
  "x":890,
  "y":340,
  "wires":[]
},{
  "id":"f33ad4bd.777a5",
  "type":"counter",
  "z":"327d23e5.bb5924",
  "name":"",
  "init":"100",
  "step":"1",
  "lower":null,
  "upper":null,
  "mode":"increment",
  "outputs":"2",
  "x":740,
  "y":360,
  "wires":[
    ["9b40b088.73732"],
    ["876cc69d.d4b438"]
  ]
},{
  "id":"99b73d63.9fdb",
  "type":"inject",
  "z":"327d23e5.bb5924",
  "name":"normal msg without control parameter",
  "topic":"",
  "payload":"",
  "payloadType":"date",
  "repeat":"",
  "crontab":"",
  "once":false,
  "x":470,
  "y":300,
  "wires":[["f33ad4bd.777a5"]]
},{
  "id":"876cc69d.d4b438",
  "type":"debug",
  "z":"327d23e5.bb5924",
  "name":"message",
  "active":false,
  "console":"false",
  "complete":"true",
  "x":900,
  "y":380,
  "wires":[]
}]
Share:

Einen Kommentar verfassen

Ihre E-Mail-Adresse wird nicht veröffentlicht, sie dient nur der Identifikation! Für die Profilbilder wird Gravatar verwendet und reCAPTCHA, um Spam zu vermeiden.

Kommentare 0

Es sind noch keine Kommentare für diesen Beitrag vorhanden.