Gezeiten der Nordsee
Node-RED

Gezeiten der Nordsee

Abfrage der Gezeiten / Tide über die API des BSH.
A flow by JoeHess

Download flow

Flow Details

Das Bundesamt für Seeschifffahrt und Hydrographie (BSH) stellt eine API zur Verfügung, mit der sich die nächsten Gezeiten abfragen lassen.

Im Flow wurde der Standort Büsum übernommen. Sollte ein anderer Standort gewünscht sein, muss die API entsprechend angepasst werden. Siehe hierzu: https://wasserstand-nordsee.bsh.de/data/map.json. Dort muss die „bshnr” ausgetauscht werden.

Mittels der Icons werden Hoch- und Niedrigwasser angezeigt.

Alle 10 Minuten wird abgefragt und an Awtrix gesendet.

Natürlich müsst ihr noch eure richtige Awtrix-IP setzen.

Es werden die ICONS 19480 sowie 19481 verwendet.

[ { "id": "953ddfa3daa2b330", "type": "http request", "z": "8e38f7e60c11d07a", "name": "", "method": "GET", "ret": "obj", "paytoqs": "ignore", "url": "https://wasserstand-nordsee.bsh.de/data/DE__505P.json", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 310, "y": 380, "wires": [ [ "7980e6a3bc5b7045" ] ] }, { "id": "c35e4a64440425d9", "type": "inject", "z": "8e38f7e60c11d07a", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "600", "crontab": "", "once": true, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 90, "y": 380, "wires": [ [ "953ddfa3daa2b330" ] ] }, { "id": "7980e6a3bc5b7045", "type": "function", "z": "8e38f7e60c11d07a", "name": "function 2", "func": "let tideData = msg.payload.hwnw_forecast.data;\n\n// Funktion zur Umwandlung in lokale Zeit (Europe/Berlin)\nfunction getLocalTime(utcString) {\n let isoString = utcString.replace(' ', 'T');\n if (!isoString.endsWith('Z') && !isoString.includes('+')) {\n isoString += 'Z';\n }\n let date = new Date(isoString);\n // Nur Uhrzeit, im deutschen Format\n return date.toLocaleTimeString(\"de-DE\", { timeZone: \"Europe/Berlin\", hour: '2-digit', minute: '2-digit' });\n}\n\n// Array für die beiden Payloads\nlet payloads = [];\n\nfor (let i = 0; i < 2; i++) {\n let event = tideData[i];\n let icon = event.event === \"HW\" ? 19481 : 19480;\n let text = getLocalTime(event.timestamp);\n\n payloads.push({\n \"icon\": icon,\n \"text\": text,\n \"lifetime\": 305\n });\n}\n\n// Wenn du beide nacheinander senden willst, kannst du sie als array ausgeben oder einzeln weiterverarbeiten\n// Hier als array:\nmsg.payload = payloads;\nreturn msg;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 380, "wires": [ [ "7eaa8bbb418a0b21" ] ] }, { "id": "7eaa8bbb418a0b21", "type": "http request", "z": "8e38f7e60c11d07a", "name": "AwtrixUlanzi/tide", "method": "POST", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.178.78/api/custom?name=tide", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [ { "keyType": "Content-Type", "keyValue": "", "valueType": "other", "valueValue": "application/json" } ], "x": 760, "y": 380, "wires": [ [] ], "icon": "font-awesome/fa-align-left" } ]
-- Flow first published on June 16, 2025, last updated on June 16, 2025 at 11:52.