Mini-Tutorial: Werte der Suncalc-API über Node-Red und MQTT zum Dashboard hinzufügen

Über dieses Mini-Tutorial können Sie die Werte der Suncalc-API in das Dashboard einfügen, indem Sie einen HTTPS-Aufruf an die API https://api.sunrise-sunset.org/ tätigen, die ein JSON in diesem Format zurückgibt

Dazu müssen Sie den Flow der folgenden Nachricht in Node-RED importieren (er überschreitet 32.000 Zeichen)

Sie sollten normalerweise diesen Flow haben

Jeder „Funktions“-Knoten sendet den gewünschten Wert im Payload um 00:00 Uhr, aber auch x Minuten nach Mitternacht, was es ermöglicht, eine MQTT-Nachricht zum gewünschten Zeitpunkt zu erzeugen (z. B. wird der Wert „Sonnenaufgang“ hier um 00:01 Uhr und um 5:42 Uhr gesendet), um ihn in einer Szene zu verwenden, aber in diesem Fall muss er nach 00:01 Uhr bedingt sein

Sie müssen nur die Parameter des „MQTT“-Knotens anpassen, indem Sie auf den Knoten und dann auf den Stift im Bereich „Server“ klicken

et in dem Knoten „api.sunrise-sunset.org“ Ihre GPS-Koordinaten anpassen

Dann in Gladys in der Integration „MQTT“ ein Gerät wie folgt erstellen

und für jede gewünschte Funktion (Sonnenaufgang, Sonnenuntergang usw.) eine Funktion nach dem Muster „Sonnenaufgang“ hinzufügen

Dann im Dashboard die gewünschten Werte hinzufügen

Jetzt haben Sie die Suncalc-Elemente im Dashboard!

Jetzt können Sie, indem Sie eine Szene hier „Sonnenaufgang“ erstellen und die um 00:00 Uhr gesendete Nachricht filtern, eine Aktion beim Sonnenaufgang durchführen (die bereits in Gladys existiert), aber zusätzlich können Sie die Uhrzeit im „Funktions“-Knoten des „Sonnenaufgangs“ anpassen

Normalmodus

// berechnet die Verzögerung nach Mitternacht in Minuten, um die Nachricht zu senden
var delai = hours *60 + minutes + 1;
msg.delay = delai;

Modus 20 Minuten vorher

// berechnet die Verzögerung nach Mitternacht in Minuten, um die Nachricht zu senden
var delai = hours *60 + minutes + 1 - 20;
msg.delay = delai;

Modus 20 Minuten danach

// berechnet die Verzögerung nach Mitternacht in Minuten, um die Nachricht zu senden
var delai = hours *60 + minutes + 1 + 20;
msg.delay = delai;

Die Einfachheit von Gladys in Bezug auf Bedienung und Dashboard kombiniert mit dem Schweizer Taschenmesser Node-RED = ein Produkt, das an die spezifischen Bedürfnisse jedes Benutzers anpassbar ist! :wink:

Ich habe den Code geändert, weil die „delay“-Knoten in Millisekunden statt in Minuten waren… oops, mein Fehler :upside_down_face: :face_with_hand_over_mouth:! Und ich habe eine Funktion „Sendezeit“ hinzugefügt, um die Zeit zu verfolgen, zu der die Nachricht „Sonnenaufgang“ zum zweiten Mal gesendet wird (die erste um 00:01 Uhr). Man muss einfach duplizieren, um die anderen zu verfolgen.

[details=« Code des Flows »]

[
    {
        "id": "7ff8481b0e530218",
        "type": "tab",
        "label": "Suncalc API",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "467565bd915a2a8d",
        "type": "group",
        "z": "7ff8481b0e530218",
        "name": "Suncalc API",
        "style": {
            "stroke": "#000000",
            "fill": "#e3f3d3",
            "label": true
        },
        "nodes": [
            "eae0976220b585b3",
            "5dda4437af0bff5e",
            "9ed546b6886bbafa",
            "f6ea59633d3bb98b",
            "e5be0b9d45a8b6c2",
            "38e643d99efa7a95",
            "846f914fd081c13f",
            "152afaf0fdc6be38",
            "59307f7f63590e5d",
            "838df80a9f965a6d",
            "a4397d1a98150a4d",
            "5d1de6bc5497c087",
            "c2b15889e9096be1",
            "b8a6dca76c04f480",
            "3a99ad9a2f752241",
            "3ea4979d2eaf146b",
            "901f952626786b11",
            "1d040814b1befb3a",
            "8f7e50836226d1ee",
            "8c49858b8bbfe11c",
            "9e462a3d9f69bee0",
            "048c1578dc7d13d5",
            "bee1fb0b9897f334",
            "3dd556977ebeb003",
            "17d36d7e51f3c5aa",
            "89002c75327e8e5f",
            "2e8b434a55627e7a",
            "21097eb9222e6af0",
            "e389303bb28be230"
        ],
        "x": 54,
        "y": 79,
        "w": 1312,
        "h": 722
    },
    {
        "id": "eae0976220b585b3",
        "type": "inject",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "00 00 * * *",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 170,
        "y": 400,
        "wires": [
            [
                "5dda4437af0bff5e"
            ]
        ]
    },
    {
        "id": "5dda4437af0bff5e",
        "type": "http request",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "api.sunrise-sunset.org",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://api.sunrise-sunset.org/json?lat={42.555}&lng={2.833}&date=today",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 220,
        "y": 460,
        "wires": [
            [
                "9ed546b6886bbafa",
                "38e643d99efa7a95",
                "846f914fd081c13f",
                "152afaf0fdc6be38",
                "59307f7f63590e5d",
                "838df80a9f965a6d",
                "a4397d1a98150a4d",
                "5d1de6bc5497c087",
                "c2b15889e9096be1",
                "b8a6dca76c04f480",
                "3a99ad9a2f752241"
            ]
        ]
    },
    {
        "id": "9ed546b6886bbafa",
        "type": "debug",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 470,
        "y": 460,
        "wires": []
    },
    {
        "id": "f6ea59633d3bb98b",
        "type": "debug",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "debug 3",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "msg",
        "x": 700,
        "y": 120,
        "wires": []
    },
    {
        "id": "e5be0b9d45a8b6c2",
        "type": "mqtt out",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "Publish au broker Mqtt IP Gladys:1883",
        "topic": "",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "f4ab211ed11dc81c",
        "x": 1190,
        "y": 460,
        "wires": []
    },
    {
        "id": "38e643d99efa7a95",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "sunrise",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:sunrise/text\";\n\n// Zeit als AM/PM-Format\nvar timeString = msg.results.sunrise;\n\n// Zeit in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit in 24-Stunden-Format umwandeln\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// Zeit im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = (hours * 60) + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 460,
        "y": 160,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "f6ea59633d3bb98b",
                "3ea4979d2eaf146b",
                "2e8b434a55627e7a"
            ]
        ]
    },
    {
        "id": "846f914fd081c13f",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "sunset",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:sunset/text\";\n\n\n// Zeit als AM/PM-Format\nvar timeString =msg.results.sunset;\n\n// Zeit in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit in 24-Stunden-Format umwandeln\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// Zeit im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 450,
        "y": 220,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "901f952626786b11"
            ]
        ]
    },
    {
        "id": "152afaf0fdc6be38",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "solar_noon",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:solar_noon/text\";\n\n\n// Zeit als AM/PM-Format\nvar timeString =msg.results.solar_noon;\n\n// Zeit in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit in 24-Stunden-Format umwandeln\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ",? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 470,
        "y": 280,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "1d040814b1befb3a"
            ]
        ]
    },
    {
        "id": "59307f7f63590e5d",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "day_length",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:day_length/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString =msg.results.day_length;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 470,
        "y": 340,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "8f7e50836226d1ee"
            ]
        ]
    },
    {
        "id": "838df80a9f965a6d",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "civil_twilight_begin",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:civil_twilight_begin/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString = msg.results.civil_twilight_begin;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 490,
        "y": 400,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "8c49858b8bbfe11c"
            ]
        ]
    },
    {
        "id": "a4397d1a98150a4d",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "civil_twilight_end",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:civil_twilight_end/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString = msg.results.civil_twilight_end;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours * 60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 480,
        "y": 520,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "17d36d7e51f3c5aa"
            ]
        ]
    },
    {
        "id": "5d1de6bc5497c087",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "nautical_twilight_begin",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:nautical_twilight_begin/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString =msg.results.nautical_twilight_begin;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 500,
        "y": 580,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "3dd556977ebeb003"
            ]
        ]
    },
    {
        "id": "c2b15889e9096be1",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "nautical_twilight_end",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:nautical_twilight_end/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString =msg.results.nautical_twilight_end;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10 ? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Verzögerung nach Mitternacht in Minuten berechnen, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 500,
        "y": 640,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "bee1fb0b9897f334"
            ]
        ]
    },
    {
        "id": "b8a6dca76c04f480",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "astronomical_twilight_begin",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:astronomical_twilight_begin/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString = msg.results.astronomical_twilight_begin;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Null vor Zahlen, falls nötig\nhours = hours < 10? \"0\" + hours : hours;\nminutes = minutes < 10 ? \"0\" + minutes : minutes;\n\n// Zeit im 24-Stunden-Format anzeigen\nvar formattedTime = hours + \":\" + minutes;\n\n// im 24-Stunden-Format senden\nmsg.payload = formattedTime;\n\n// Berechnet die Verzögerung nach Mitternacht in Minuten, um die Nachricht zu senden\nvar delai = hours *60 + minutes + 1;\nmsg.delay = delai;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 520,
        "y": 700,
        "wires": [
            [
                "e5be0b9d45a8b6c2",
                "048c1578dc7d13d5"
            ]
        ]
    },
    {
        "id": "3a99ad9a2f752241",
        "type": "function",
        "z": "7ff8481b0e530218",
        "g": "467565bd915a2a8d",
        "name": "astronomical_twilight_end",
        "func": "var topic = msg.topic;\nvar msg = msg.payload;\n\nmsg.topic = \"gladys/master/device/mqtt:suncalc/feature/mqtt:astronomical_twilight_end/text\";\n\n// Zeitstring im AM/PM-Format\nvar timeString =msg.results.astronomical_twilight_end;\n\n// Zeitstring in Date-Objekt umwandeln\nvar date = new Date(\"2000-01-01 \" + timeString);\n\n// Zeit im 24-Stunden-Format formatieren\nvar hours = date.getHours();\nvar minutes = date.getMinutes();\n\n// Füge eine Null vor der Zahl hinzu, falls nötig\nhours = hours < 10