// Entwickler · Node-RED

Werte rein, Umschlag raus.

Mit dem Node-RED-Paket entfällt das Versiegeln von Hand: Dein Flow übergibt Werte, das Paket baut und sendet den Umschlag. andon out nimmt sie im Flow an, der Config-Node andon-view hält dahinter Schlüssel und Kacheln deiner Ansicht.

Keine Node-RED-Quelle? Wie du Dokument, Umschlag und Upload selbst baust, steht in der Referenz.

Der Beispiel-Flow „Andon basics“ im Node-RED-Editor: Ein Simulator füttert vier Kacheln, andon out meldet den letzten Upload.
Der Beispiel-Flow „Andon basics“ im Node-RED-Editor: Ein Simulator füttert vier Kacheln, andon out meldet den letzten Upload.
Der Beispiel-Flow „Andon basics“ im Node-RED-Editor: Ein Simulator füttert vier Kacheln, andon out meldet den letzten Upload.

Im Flow und dahinter.

andon out im Flow

Hier hängst du deine Quellen an. msg.topic ist die Kachel-ID, msg.payload der Wert. Der Status unter dem Node zeigt den letzten Upload.

andon-view Config-Node

Steht nicht im Flow, sondern hinter andon out, so wie der Broker hinter einem MQTT-Node. Er hält View-ID, Schreibschlüssel und Inhaltsschlüssel aus der .env und die Kacheln aus der Vorlage. Er sammelt, prüft, verschlüsselt und lädt hoch.

So findest du ihn: andon out doppelklicken, dann den Stift neben View. Dort liegen .env importieren und Vorlage importieren. Alle Config-Nodes stehen auch im Menü unter Konfigurationsknoten.

Mehrere Ansichten: Jede Ansicht ist ein eigener andon-view mit eigener .env. Mehrere andon out dürfen dieselbe Ansicht füttern, ihre Werte gehen gemeinsam in einem Upload raus.

Der Config-Node andon-view, geöffnet über den Stift neben View in andon out: oben .env importieren, darunter die Schlüssel, das Präfix für die Umgebung und die Vorlage.
Der Config-Node andon-view, geöffnet über den Stift neben View in andon out: oben .env importieren, darunter die Schlüssel, das Präfix für die Umgebung und die Vorlage.
Der Config-Node andon-view, geöffnet über den Stift neben View in andon out: oben .env importieren, darunter die Schlüssel, das Präfix für die Umgebung und die Vorlage.
01

Installieren

In Node-RED unter Palette verwalten nach andon suchen und installieren. Ab Node-RED 3.0.

02

Ansicht anlegen

Im Konfigurator eine Ansicht anlegen, die .env herunterladen und den QR-Code mit der App scannen. Das Paket liefert das Beispiel mit vier fertigen Kacheln. Aus dem Konfigurator brauchst du nur die .env.

03

Beispiel importieren

In Node-RED: Menü → Import → Beispiele → node-red-andon → Andon basics. Der Flow landet im gerade offenen Tab. Ein zweites Beispiel, All tile kinds, hat eine Kachel jeder Art und zeigt jede Form, die sie nimmt.

04

Schlüssel eintragen

In andon out den Stift neben View, dann nur .env importieren. Eine Vorlage würde die vier Kacheln ersetzen, an die der Simulator sendet. Aktualisieren und Fertig.

05

Übernahme (Deploy)

andon out wird grün, die vier Kacheln laufen in der App ein.

Function node → andon out
// In front of andon out. Its dialog lists every
// form each tile takes; "Insert example flow"
// writes them all into a node like this one.
// msg.topic is the tile ID from the view.
node.send({ topic: 't_oee', payload: 79.3 });
// Text works too: "79.3" as MQTT delivers it.
node.send({ topic: 't_status',
            payload: { value: 'Running', status: 'ok' } });

// A line or a bar over time: each number is appended.
// msg.timestamp (ms or ISO) sets the time,
// msg.series picks the series.
node.send({ topic: 't_temp', payload: 180.4 });
// [time, value] pairs replace the series:
node.send({ topic: 't_temp', payload: [
  ['2026-10-03T08:00:00Z', 179.6],
  ['2026-10-03T08:01:00Z', 180.4] ] });

// Several tiles in one message, without a topic:
node.send({ payload: { t_oee: 79.3, t_status: 'Running' } });

// Or a whole view document you built yourself;
// it replaces the view's state:
// node.send({ payload: myViewDocument });
return null;

Was jede Kachel nimmt, zeigt der Node.

Im Dialog nachsehen

andon out doppelklicken: Unter Kacheln steht jede Kachel deiner Vorlage mit allen Formen, die sie nimmt, jede mit einem Beispiel. Eine line etwa nimmt eine Zahl, eine Zahl mit msg.timestamp, Paare aus Zeit und Wert oder eine ganze Reihe.

Beispiel-Flow einfügen

Der Knopf darunter setzt einen Inject- und einen Function-Node vor andon out, fertig verbunden. Der Function-Node sendet alle 30 s einen Wert an jede Kachel, alle weiteren Formen stehen auskommentiert darunter. Der eingefügte Code ist englisch.

All tile kinds

Ein zweites Beispiel im Paket: eine Ansicht mit jeder Kachelart und genau diesem Function-Node. In Node-RED: Menü → Import → Beispiele → node-red-andon → All tile kinds, dann die .env importieren.

Unvollständig? Fehlt die .env, markiert Node-RED andon out schon vor der Übernahme als nicht konfiguriert. Fehlt die Vorlage, zeigt der Node nach der Übernahme „keine Vorlage“: Dann nimmt er nur ganze View-Dokumente.

Der Dialog von andon out im Beispiel „Andon basics“: jede Kachel mit ihren Formen, darunter Beispiel-Flow einfügen.
Der Dialog von andon out im Beispiel „Andon basics“: jede Kachel mit ihren Formen, darunter Beispiel-Flow einfügen.
Der Dialog von andon out im Beispiel „Andon basics“: jede Kachel mit ihren Formen, darunter Beispiel-Flow einfügen.

Was ein Wert bewirkt

Kachelmsg.payloadWirkung
label79.3 · "Running"ersetzt den Wert. Text, der wie eine Zahl aussieht, wird zur Zahl, wenn die Vorlage dort eine hat.
gauge, progress, donut79.3ersetzt den Wert, bei donut die Zahl in der Mitte
line, bar über die Zeit31.9wird als Punkt angehängt, mit der Zeit von jetzt oder aus msg.timestamp, in die Serie aus msg.series. Das geht nur bei einer Serie aus samples: Einer Serie im Raster aus stepSec und points fehlt die Zeit dafür. Der erste Wert ersetzt die Startpunkte der Vorlage. Behalten werden die letzten 60 Punkte, einstellbar unter Zeitreihen.
line, bar über die Zeit[["2026-10-03T08:00:00Z", 31.9], …]Paare aus Zeit und Wert ersetzen die Serie aus msg.series, auch eine im Raster
line, bar über die Zeit{ "series": [{ "name": "A", "start": …, "stepSec": 3600, "points": [12, 30] }] }ersetzt alle Serien, als samples oder im Raster aus start, stepSec und points. Zeiten in UTC, wie toISOString() sie schreibt.
bar mit Kategorien, pie, donut[12, 7, 3]ersetzt die Werte, einer je Kategorie, in der Serie aus msg.series
bar mit Kategorien, pie, donut{ "categories": ["A", "B"], "series": [{ "name": "A", "values": [4, 7] }] }ersetzt Kategorien und Werte zusammen
bar mit Kategorien und einer Serie{ "series": [{ "name": "A", "values": [4, 7], "statuses": [null, "warning"] }] }ein Urteil je Balken: ok, warning, critical oder null
table[["Press 1", 42.7], ["Press 2", null]]ersetzt die Zeilen. Eine Zeile ist ein Array von Zellen oder ein Objekt mit cells und status.
timeline"fault"beginnt ein Segment mit diesem Zustand, auf der Spur aus msg.lane. Derselbe Zustand noch einmal ändert nichts. Der erste ersetzt die Startsegmente der Vorlage.
timeline{ "from": "2026-10-03T06:00:00Z", "to": "2026-10-03T14:00:00Z" }verschiebt die Zeitachse. Was vor from liegt, wird abgeschnitten.
jede Kachel{ "value": 79.3, "status": "warning" }setzt die genannten Felder, null entfernt eines
gauge mit unpassendem Wert"n/a"wird abgelehnt und geht an den Catch-Node, mit einem Satz, was die Kachel nimmt. Die Ansicht bleibt, wie sie war. Das gilt für jede Kachel.

Einstellungen im andon-view

FeldVorgabeWirkung
Intervall30 s, mindestens 10Höchstens ein Upload je Intervall. Die erste Änderung nach einer Pause geht sofort raus, viele Werte werden ein Umschlag.
Veraltet nachleer: dreimal das IntervallSetzt staleAfterSec. Solange Werte kommen, auch unveränderte, geht nach der halben Zeit ein Heartbeat raus. Kommt nichts mehr, wird die Ansicht grau.
Geräte weckenwenn sich ein Status ändertOder bei jedem Upload, oder nie. Jeder Weckruf kostet Akku.
Status aus Bandsaus, je KachelLeitet den Status aus den Bändern ab, statt ihn mit dem Wert zu senden.
Zeitreihen60 Punkte, kein HöchstalterBehält die letzten n Punkte einer Reihe und nichts, was älter ist als das Höchstalter. 0 schaltet eine Grenze ab.
Key-Versionleer: 1Die Schlüsselversion kv, die in jeden Umschlag geht. Sie kommt aus der .env und steigt erst, wenn du im Konfigurator einen neuen Inhaltsschlüssel erzeugst. Leer heißt 1, damit der Wert auch aus der Umgebung kommen kann.
Write-Secret, Content-Keyaus der .env oder der UmgebungLiegen verschlüsselt in den Credentials von Node-RED und fehlen in jedem Export. Setz dafür credentialSecret in der settings.js. Den Einladungsschlüssel verwirft der Import.
Aus der UmgebungleerEin Präfix wie ANDON_: Was im Dialog leer ist, liest der View aus Umgebungsvariablen, mit denselben Namen wie in der .env des Konfigurators. Für ein Node-RED im Container, dessen Flow dann keine Schlüssel enthält.

Bei 429 wartet das Paket auf Retry-After, bei Netzfehlern und 5xx verdoppelt es die Pause, beginnend beim Intervall, bis auf fünf Minuten. Ein 401, 404, 400 oder 413 stoppt die Uploads bis zur nächsten Nachricht.

Ansicht entwerfen. Koppeln. Verwalten.

Im Konfigurator stellst du die Kacheln zusammen und siehst sie wie auf dem iPhone, geprüft gegen das Schema. Dann legst du die Ansicht an, koppelst dein iPhone oder iPad per QR-Code und schickst einen ersten Test. Auch die Geräte verwaltest du dort. Der Inhaltsschlüssel verlässt deinen Browser nie.