@htag/node-red-contrib-hypertegrity-information 0.3.2

Hypertegrity NodeRED Information Nodes.

npm install @htag/node-red-contrib-hypertegrity-information

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>), default https://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 /inkar automatically; nodes saved for the gateway's former shared host api.service.hypertegrity.cloud are moved to the new host and from the apikey header to X-API-Key. Opening and saving the node stores the new form.
  • API key (credential store, ${ENV_VAR} is resolved) is sent in the header X-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 (and msg.config.extraHeaders if 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 with Retry-After are 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 guid and link (e.g. Atom entries) get an ID from the Atom id or 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.config is checked strictly: encodeTextMode accepts only true/false (also as text), cacheSize only integers ≥ 1 as number or numeric text. Other values (e.g. 1 or "yes" for encodeTextMode, true or [5] for cacheSize) 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/https instead of rss-parser's parseURL (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:// or https:// (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 to localhost. 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 in settings.js under hypertegrity.allowedHosts.
  • Character sets: the charset of 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 as publishedAt).
  • newsTitle/newsIntro: leading and trailing spaces and line breaks of the feed text are removed; Atom titles and summaries of type html/xhtml are output as plain text; newsIntro uses the text of content:encoded when the description is missing or contains only markup and never contains raw HTML.
  • newsUrl: relative links are resolved against the feed URL; a guid marked isPermaLink="false" is no longer used as link (newsUrl is 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 guid consisting 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

Node Info

Version: 0.3.2
Updated 1 week, 1 day ago
License: EUPL-1.2
Rating: not yet rated

Categories

Actions

Rate:

Downloads

11 in the last week

Nodes

  • rss-feed
  • inkar-service

Keywords

  • node-red
  • information
  • rss
  • atom
  • feeds
  • inkar
  • bbsr
  • regional statistics
  • hypertegrity