RSS Feed
Der Node ruft einen RSS- oder Atom-Feed ab, filtert bereits bekannte Einträge heraus und gibt jeden neuen Beitrag als einzelnes NewsObserved-Objekt aus. Er eignet sich für Nachrichten, Pressemitteilungen und Veranstaltungshinweise von Kommunen und Verbänden.
- Node-Typ
- rss-feed
- Paket
- @htag/node-red-contrib-hypertegrity-information
- Eingänge / Ausgänge
- 1 / 1
- Datenquelle
- Beliebiger öffentlicher RSS- oder Atom-Feed
Wofür Sie den Node verwenden
Viele Kommunen, Verwaltungen und Vereine veröffentlichen Neuigkeiten als RSS- oder Atom-Feed. Der RSS-Feed-Node bringt diese Beiträge in einen Node-RED-Flow, ohne dass Sie das Feed-Format selbst auswerten müssen. Jeder Beitrag wird nur einmal weitergegeben, auch wenn der Feed mehrmals täglich abgefragt wird.
Typische Einsatzfälle sind:
- Kommunale Nachrichten in einen NGSI-LD Context Broker übernehmen, damit Dashboards und Apps sie anzeigen können.
- Pressemitteilungen mehrerer Quellen in einem einheitlichen Datenmodell zusammenführen.
- Veranstaltungshinweise regelmäßig abfragen und nur neue Einträge weiterverarbeiten.
So funktioniert der Node
Auslösen
Eine eingehende Nachricht startet den Abruf. Der Node fragt den Feed nicht von selbst ab.
Abrufen und parsen
Der Feed wird geladen und in einzelne Einträge zerlegt. RSS und Atom werden gleichermaßen unterstützt.
Duplikate ausfiltern
Jeder Eintrag wird anhand seiner GUID mit einem gespeicherten Cache verglichen. Bekannte Einträge werden übersprungen.
Ausgeben
Jeder neue Eintrag verlässt den Node als eigene Nachricht mit einem flachen NewsObserved-Objekt.
Ergebnis: Ein Strom einzelner, noch nicht gesehener Beiträge, der direkt in den NGSI-LD Builder geführt werden kann.
Der Node ist bewusst triggerbasiert. Kombinieren Sie ihn mit einem Inject-Node, der in einem festen Intervall auslöst, zum Beispiel alle 15 Minuten. So behalten Sie die Kontrolle über die Abrufhäufigkeit und belasten den Feed-Anbieter nicht unnötig.
Konfiguration
Die Einstellungen finden Sie im Bearbeitungsdialog des Nodes auf der Registerkarte Einstellungen. Die Registerkarte Informationen enthält Hinweise zur Zeichenkodierung.
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Name | Text | leer | Anzeigename des Nodes im Flow. |
| RSS URL | Typed Input (str, msg, flow, global, env) | leer | Adresse des Feeds. Als Text können Sie Umgebungsvariablen in der Form ${NAME} einsetzen. |
| Cache Größe | Zahl (num, flow, global, env) | 100 | Anzahl der gemerkten GUIDs. Ältere Einträge fallen nach dem FIFO-Prinzip heraus und könnten erneut ausgegeben werden. |
| URL-Kodierung aktivieren | Kontrollkästchen | aktiv | Kodiert Titel und Beschreibung URL-konform und ersetzt Klammern. Emojis werden unabhängig von dieser Einstellung immer entfernt. |
Die Cache-Größe sollte größer sein als die Zahl der Einträge, die der Feed gleichzeitig ausliefert. Liefert ein Feed stets die letzten 50 Beiträge, sind 100 Einträge im Cache ein sinnvoller Wert.
Eingang
Der Eingang dient als Auslöser und als Steuerkanal. Eine beliebige Nachricht ohne Steuerbefehl startet den Abruf.
| Eigenschaft | Typ | Bedeutung |
|---|---|---|
msg.payload | beliebig | Löst den Abruf aus. Enthält der Payload einen der folgenden Steuerbefehle, wird nur der Cache bearbeitet und kein Feed abgerufen. |
msg.payload = "flush" | Text | Leert den gesamten GUID-Cache. Beim nächsten Abruf werden alle Einträge erneut ausgegeben. |
msg.payload = "flush_first" | Text | Entfernt den ältesten Eintrag aus dem Cache. |
msg.payload = "<GUID oder URL>" | Text | Entfernt genau diesen Eintrag aus dem Cache, damit der zugehörige Beitrag erneut ausgegeben wird. Erkannt werden Texte, die mit http beginnen, einen Schrägstrich enthalten oder länger als 10 Zeichen sind. |
msg.flushCache = true | Boolean | Leert den Cache und führt den Abruf anschließend trotzdem aus. |
msg.url | Text | Wird verwendet, wenn die RSS URL im Dialog auf den Typ msg mit dem Pfad url gesetzt ist. |
Ausgang
Für jeden neuen Beitrag sendet der Node eine eigene Nachricht. Der Payload ist ein flaches Objekt, das sich an das Smart Data Model NewsObserved anlehnt und ohne weitere Umformung an den NGSI-LD Builder übergeben werden kann.
{
"id": "https___www_beispielstadt_de_aktuelles_neues_rathaus",
"type": "NewsObserved",
"dateObserved": "2026-10-01T08:15:00.000Z",
"newsTitle": "Neues%20Rathaus%20er%C3%B6ffnet",
"newsIntro": "Die%20Stadt%20er%C3%B6ffnet%20...",
"publishedAt": "2026-09-30T14:00:00.000Z",
"newsUrl": "https://www.beispielstadt.de/aktuelles/neues-rathaus"
}
| Feld | Bedeutung |
|---|---|
id | Aus der GUID des Beitrags abgeleitet. Alle Zeichen außer Buchstaben und Ziffern werden durch _ ersetzt. |
type | Immer NewsObserved. |
dateObserved | Zeitpunkt des Abrufs im ISO-8601-Format. |
newsTitle | Titel des Beitrags, bereinigt und bei aktiver Kodierung URL-kodiert. |
newsIntro | Kurzbeschreibung oder Inhalt des Beitrags, ebenfalls bereinigt. |
publishedAt | Veröffentlichungsdatum aus dem Feed. Fehlt es, wird der Abrufzeitpunkt verwendet. |
newsUrl | Link zum vollständigen Beitrag. |
Bei aktiver URL-Kodierung sind Texte in der Datenbank kodiert abgelegt. Die Registerkarte Informationen im Node zeigt eine PostgreSQL-Funktion, mit der Sie die Texte bei Abfragen wieder dekodieren.
Beispiel-Flow
Das Paket bringt einen Beispiel-Flow mit. Sie importieren ihn in Node-RED über Menü → Importieren → Beispiele → @htag/node-red-contrib-hypertegrity-information → rss-feed.
Inject
Ein Inject-Node löst den Abruf manuell oder in einem festen Intervall aus.
RSS Feed
Der Node ruft den konfigurierten Feed ab und gibt neue Einträge einzeln aus.
Debug
Ein Debug-Node zeigt die NewsObserved-Objekte in der Seitenleiste an.
Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "RSS Feed", "disabled": false, "info": ""},
{"id": "inject1", "type": "inject", "z": "tab1", "name": "", "props": [{"p": "payload"}, {"p": "topic", "vt": "str"}], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 160, "y": 140, "wires": [["rss1"]]},
{"id": "rss1", "type": "rss-feed", "z": "tab1", "name": "St. Katharinen", "url": "https://www.st-katharinen.de/rss-news", "urlType": "str", "cacheSize": 100, "cacheSizeType": "num", "encodeTextMode": true, "x": 420, "y": 140, "wires": [["debug1"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "RSS Ausgabe", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 680, "y": 140, "wires": []}
]
Status und Fehler
| Anzeige | Bedeutung |
|---|---|
| Blauer Punkt „Cache geleert“ | Der Cache wurde über flush oder msg.flushCache zurückgesetzt. |
| Blauer Ring „Ältesten entfernt“ | Der älteste Cache-Eintrag wurde über flush_first entfernt. |
| Blauer Ring „Entfernt: …“ | Ein einzelner Eintrag wurde gezielt aus dem Cache entfernt. |
| Fehler „Keine RSS-URL aufgelöst“ | Die URL ist leer oder die referenzierte Kontextvariable existiert nicht. |
| Fehler „Fehler beim Abrufen oder Parsen“ | Der Feed ist nicht erreichbar oder kein gültiges RSS/Atom. Die Meldung enthält die Ursache. |
Fehler werden über node.error gemeldet und können mit einem Catch-Node abgefangen werden.
Hinweise
- Persistenter Kontext: Der GUID-Cache liegt im globalen Kontext unter dem Schlüssel
rss_guid_cache_<Node-ID>. Damit er einen Neustart von Node-RED übersteht, muss in der Dateisettings.jsein persistenter Kontextspeicher konfiguriert sein. Ohne diese Einstellung werden nach jedem Neustart alle Einträge erneut ausgegeben. - Abrufhäufigkeit: Wählen Sie das Intervall des Inject-Nodes mit Augenmaß. Für kommunale Nachrichtenfeeds reichen Intervalle von 15 bis 60 Minuten in der Regel aus.
- Personenbezogene Daten: Feeds können Namen von Autorinnen und Autoren oder Ansprechpersonen enthalten. Prüfen Sie vor der Weitergabe an einen Context Broker, ob diese Inhalte veröffentlicht werden dürfen.