@htag/node-red-contrib-hypertegrity-information 0.3.2
Hypertegrity NodeRED Information Nodes.
Hypertegrity Node-RED Information Nodes
A collection of Node-RED nodes for retrieving news and information feeds.
📝 Introduction
This package provides nodes for fetching and parsing information from various external sources, such as RSS/Atom feeds.
Included Nodes
| Node | Description |
|---|---|
rss-feed |
Fetches and parses RSS/Atom feeds from any public URL |
inkar-service |
Fetches the BBSR INKAR regional statistics from the UDSP inkar-service and emits InkarIndicator, InkarSpatialUnit and InkarValues entities |
inkar-service configuration
New in 0.3.2. The node queries the UDSP inkar-service (published through the APISIX gateway) and maps
its plain snake_case JSON to the Smart Data Model entities on three outputs. The data is aggregated
official statistics without personal data. Example flows: examples/inkar-service.json (basic query,
complete pull via cursor paging, configuration by message).
- Base URL includes the service segment (platform convention
/api/v1/<service>), defaulthttps://inkar.data.service.hypertegrity.cloud/api/v1/inkar— the service's own host in front of the APISIX gateway. Nodes saved with a base URL ending in/api/v1(older versions) are extended by/inkarautomatically; nodes saved for the gateway's former shared hostapi.service.hypertegrity.cloudare moved to the new host and from theapikeyheader toX-API-Key. Opening and saving the node stores the new form. - API key (credential store,
${ENV_VAR}is resolved) is sent in the headerX-API-Key(key-auth of the APISIX gateway); every tenant environment has a key of its own. Header name, extra headers (JSON), the path of every resource and the page size per resource are set on the editor tab API (advanced) — an API move needs no code change. - Credentials stay with their origin: the stored API key and the editor's extra headers are only
sent to the origins of the editor configuration (base URL and absolute paths). A message that points
to another origin must bring its own
msg.config.apiKey(andmsg.config.extraHeadersif extra headers are configured), otherwise it fails before any request. Redirects are only followed within the origin of the request. - Values come via the cursor pagination
/werte/seiten(complete even for >100k rows), indicators and regions via offset paging; output is rate-limited (messages/second); HTTP 429 and 503 withRetry-Afterare retried up to three times.
Configuration by message
rss-feed
The node accepts an optional msg.config object (url, cacheSize, encodeTextMode) that overrides the settings for this message only. msg.url overrides the feed URL as well. Control commands: msg.payload = "flush", "flush_first", msg.flushCache = true and the new msg.removeGuid = "<guid>".
inkar-service
Every editor setting can be overridden for this message only in msg.config, with the names of the
editor fields: operation, the filters bereich, kuerzel, themenbereich, raumbezug,
kennziffer, kennzifferPraefix, kreisKennziffer, bundesland, regionName, jahr, jahrVon,
jahrBis, as well as baseUrl, authHeader, apiKey, extraHeaders, pathWerteSeiten,
pathIndikatoren, pathRegionen, pathRaumbezuege, pathBereiche, pathThemenbereiche,
pathStatus, pageSize, pageSizeWerte, pageSizeIndikatoren, pageSizeRegionen, messageFormat,
includeNullValues, maxRows, rate and requestTimeout. Values are checked strictly (texts for
filters and region codes, integers 1900–2100 for years, true/false for booleans, numbers or numeric
text for numbers); invalid values raise an error (Catch node) and nothing is fetched. msg.config is
removed from the outputs; only take it from trusted sources. The object form of msg.payload of
earlier versions (operation, snake_case filters, baseUrl, paths, pageSize, headers) still
works unchanged; msg.config takes precedence. msg.payload = "stop" cancels a running fetch.
Notes on upgrading to 0.3.2
- Feeds with more entries than the configured cache size are no longer sent completely on every fetch; the cache keeps at least as many entries as the feed delivers.
- Entries without
guidandlink(e.g. Atom entries) get an ID from the Atomidor a hash instead of an empty ID. - Fetch errors are reported once (Catch node) instead of twice.
- Warnings and errors show the text of the runtime language (English or German) with their details (variable name, status code, cause); earlier versions output only the message key (e.g.
error.fetchParse). msg.configis checked strictly:encodeTextModeaccepts onlytrue/false(also as text),cacheSizeonly integers ≥ 1 as number or numeric text. Other values (e.g.1or"yes"forencodeTextMode,trueor[5]forcacheSize) raise an error instead of being interpreted silently.- A running fetch is aborted when the node is stopped, redeployed or deleted; no outputs or status changes follow, and the cache of a deleted node is not created again.
- Every fetch uses its own feed parser, so a broken feed no longer affects how the next feed is parsed.
- The feed is fetched with Node's own
http/httpsinstead of rss-parser'sparseURL(request headers unchanged): a fetch is aborted after 60 s (the connection is closed), responses larger than 20 MB are aborted, a connection that breaks off in the middle of the body is reported at once, and bodies of redirects and error responses are read so that connections can be reused. - Feed URLs must start with
http://orhttps://(now also in upper case, e.g.HTTPS://) followed by a host; URLs without scheme or host (e.g.www.example.org/rss.xml,http:///feed) raise an error instead of connecting tolocalhost. A${VAR}in the configured URL that is not set raises an error naming the variable instead of fetching a mangled URL. - Redirects to private or local addresses (e.g.
127.0.0.1,10.0.0.0/8,169.254.169.254, also via DNS) are only followed to the host of the feed URL or to hosts listed insettings.jsunderhypertegrity.allowedHosts. - Character sets: the
charsetof the Content-Type header is also recognised when quoted, otherwise the encoding of the XML declaration is used; windows-1252, ISO-8859-15 and UTF-16 (UTF-16,UTF-16LE, byte order mark) are supported. ISO-8859-1 is read as windows-1252 like in browsers. - An invalid or indented Atom date (
published/updated) no longer makes the whole feed fail: indented dates are read, an invalid date only affects its own entry (it uses the other valid date or, as before for RSS items without a valid date, the retrieval time aspublishedAt). newsTitle/newsIntro: leading and trailing spaces and line breaks of the feed text are removed; Atom titles and summaries of typehtml/xhtmlare output as plain text;newsIntrouses the text ofcontent:encodedwhen the description is missing or contains only markup and never contains raw HTML.newsUrl: relative links are resolved against the feed URL; aguidmarkedisPermaLink="false"is no longer used as link (newsUrlis empty without a link). IDs and cache keys are unchanged.- Emojis are recognised by the Unicode property Extended_Pictographic (e.g. ⭐, 🆗, 1️⃣, ⬆️ are now removed as well), text symbols such as ⌀, ✓, ★, ☐ are kept.
- A
guidconsisting of whitespace only counts as missing (the link is used as key), so such items no longer collide. - Keys that the current feed still contains are no longer evicted from the cache (rolling feeds sent items twice); messages of one node are processed one after the other, so parallel triggers no longer send items twice.
Installation
Install via the Node-RED Palette Manager or using npm:
npm install @htag/node-red-contrib-hypertegrity-information
🌍 About the Project / Über das Projekt
📍 Über dieses Projekt / About this Project
DE: Dieses Open Source Projekt ist im Rahmen der Förderung Modellprojekte Smart Cities entstanden und wurde durch die Initiative des Projekts Südwestcluster ermöglicht.
EN: This open source project was created as part of the Smart City Pilot Projects (Modellprojekte Smart Cities) funding and was made possible by the initiative of the Südwestcluster project.
💡 Hintergrund / Background
DE: Die Entwicklung wurde durch öffentliche Gelder im Kontext der Förderung Modellprojekte Smart Cities unterstützt. Dadurch können wir diese Lösung der gesamten Community als Open Source zur Verfügung stellen.
EN: The development was supported by public funds in the context of the Smart City Pilot Projects (Modellprojekte Smart Cities) funding. This allows us to make this solution available to the entire community as open source.
🌐 Open Source Philosophie / Open Source Philosophy
DE: Wir unterstützen aktiv die OSS-Community und fördern kollaborative Entwicklung. Durch die Veröffentlichung als Open Source profitieren alle Beteiligten:
- Community: Freier Zugang zu moderner Smart City Technologie
- Transparenz: Nachvollziehbare und überprüfbare Lösungen
- Innovation: Gemeinsame Weiterentwicklung durch verschiedene Akteure
- Nachhaltigkeit: Langfristige Verfügbarkeit und Wartbarkeit
EN: We actively support the OSS community and promote collaborative development. Releasing it as open source benefits everyone involved:
- Community: Free access to modern Smart City technology
- Transparency: Traceable and verifiable solutions
- Innovation: Collaborative development by various actors
- Sustainability: Long-term availability and maintainability
🙏 Danksagung / Acknowledgements
DE: Ein besonderer Dank gilt der Förderung Modellprojekte Smart Cities für die finanzielle Unterstützung sowie dem Projekt Südwestcluster für die Initiative und Koordination:
- Eifelkreis Bitburg-Prüm
- Stadt Kaiserslautern
- Landkreis Kusel
- Stadt und Verbandsgemeinde Linz am Rhein
- Landkreis Mayen-Koblenz
- Landkreis St. Wendel
EN: Special thanks goes to the Smart City Pilot Projects (Modellprojekte Smart Cities) funding for financial support and the Südwestcluster project for the initiative and coordination:
- Eifelkreis Bitburg-Prüm
- City of Kaiserslautern
- District of Kusel
- City and Collective Municipality of Linz am Rhein
- District of Mayen-Koblenz
- District of St. Wendel
📜 License & Contact / Lizenz & Kontakt
© 2026 HYPERTEGRITY AG. Alle Rechte vorbehalten. / All rights reserved.
⚖️ License Compatibility / Lizenz-Kompatibilität
DE: Details zur Lizenzierung und zu den Nutzungsrechten finden Sie in der beigefügten LICENSE Datei.
EN: Details on licensing and usage rights can be found in the attached LICENSE file.
📧 Contact / Kontakt: [email protected] 🌐 Website: www.hypertegrity.de