Hallo,
Hier möchte ich Ihnen zeigen, wie Sie in Gladys die Wetterwarnung von Meteo France je nach Ihrem Département anzeigen können.
Die Karten stammen von: https://public-api.meteofrance.fr
Das Endergebnis:
Zuerst müssen Sie ein Konto erstellen und einen API-Schlüssel auf der Website abrufen:
https://portail-api.meteofrance.fr/web/fr/
Hier ist der Node-Red-Fluss:
( Ein Catch All ist vorhanden, um Fehler abzufangen und per E-Mail zu versenden )
Hier ist der Fluss im JSON-Format zum Importieren in Ihren Node-Red:
[
{
"id": "a00c3f3cd891b014",
"type": "tab",
"label": "Flux - Wetterwarnung",
"disabled": false,
"info": "",
"env": []
},
{
"id": "e93503b1.48125",
"type": "http request",
"z": "a00c3f3cd891b014",
"name": "",
"method": "GET",
"ret": "obj",
"paytoqs": "ignore",
"url": "https://public-api.meteofrance.fr/public/DPVigilance/v1/cartevigilance/encours",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [
{
"keyType": "other",
"keyValue": "apikey",
"valueType": "other",
"valueValue": "aremplacer"
}
],
"x": 250,
"y": 780,
"wires": [
[
"d7e78e8a.b142d"
]
]
},
{
"id": "d7e78e8a.b142d",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Daten des Departements extrahieren",
"func": "var result = {\n details: {\n domain_max_color_id_today: msg.payload.product.periods[0].timelaps.domain_ids[63].max_color_id,\n domain_max_color_id_tomorrow: msg.payload.product.periods[1].timelaps.domain_ids[63].max_color_id,\n update_time: msg.payload.product.update_time\n },\n today: msg.payload.product.periods[0].timelaps.domain_ids[63].phenomenon_items.sort(function(a, b) { return a.phenomenon_id - b.phenomenon_id }),\n tomorrow: msg.payload.product.periods[1].timelaps.domain_ids[63].phenomenon_items.sort(function(a, b) { return a.phenomenon_id - b.phenomenon_id })\n};\n\nmsg.payload = result;\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 510,
"y": 780,
"wires": [
[
"765139f164b27104",
"2e8c0dbf61392f10",
"5311430ac329529a",
"f8dee65916cd81fd",
"4f34ac8f589740bf",
"b2c6e79083051293",
"3fe286c93a1868c1",
"21f9b08907f80164",
"a3277ab55636ee8d",
"4a1de7f5499804d4",
"d3d5649284b15e63",
"90475b38dffb2d44",
"6a165e40ca126eae",
"8ded2eea3075dbe6",
"d1ad6fe78c581801"
]
]
},
{
"id": "e78c09208c33d102",
"type": "cronplus",
"z": "a00c3f3cd891b014",
"name": "Cron",
"outputField": "payload",
"timeZone": "",
"storeName": "",
"commandResponseMsgOutput": "output1",
"defaultLocation": "",
"defaultLocationType": "default",
"outputs": 1,
"options": [
{
"name": "schedule1",
"topic": "topic1",
"payloadType": "default",
"payload": "",
"expressionType": "cron",
"expression": "0 * * * *",
"location": "",
"offset": "0",
"solarType": "all",
"solarEvents": "sunrise,sunset"
}
],
"x": 70,
"y": 780,
"wires": [
[
"e93503b1.48125"
]
]
},
{
"id": "765139f164b27104",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Extrahieren der Warnstufe des Departements für heute",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.details && json.details.domain_max_color_id_today !== undefined) {\n var domainMaxColorIdToday = json.details.domain_max_color_id_today;\n \n let levelNumber = '';\n switch (domainMaxColorIdToday) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n} else {\n // Wenn das JSON ungültig ist, eine Fehlermeldung zurückgeben\n node.error('Keine Werte');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 880,
"y": 400,
"wires": [
[
"3d49197f8d7f40e7"
]
]
},
{
"id": "2e8c0dbf61392f10",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Extrahieren der Warnstufe des Departements für morgen",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.details && json.details.domain_max_color_id_tomorrow !== undefined) {\n var domainMaxColorIdTomorrow = json.details.domain_max_color_id_tomorrow;\n\n let levelNumber = '';\n switch (domainMaxColorIdTomorrow) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n} else {\n // Wenn das JSON ungültig ist, eine Fehlermeldung zurückgeben\n node.error('Keine Werte');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 890,
"y": 460,
"wires": [
[
"6e3d0819638abd47"
]
]
},
{
"id": "5311430ac329529a",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Extrahieren des Aktualisierungsdatums der Warnstufe des Departements",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.details && json.details.update_time !== undefined) {\n var updateTime = json.details.update_time;\n\n // Umwandeln des update_time-Werts in das gewünschte Format\n var formattedUpdateTime = new Date(updateTime).toLocaleString('de-DE', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n\n // Erstellen einer neuen Nachricht mit dem formatierten update_time-Wert\n msg.payload = formattedUpdateTime;\n\n // Senden der geänderten Nachricht\n return msg;\n} else {\n // Wenn das JSON ungültig ist, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 900,
"y": 520,
"wires": [
[
"365325afee9a62cc"
]
]
},
{
"id": "f8dee65916cd81fd",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Extrahieren der Windwarnung für heute für das Departement",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.today) {\n // Element im Array \"today\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.today.find(item => item.phenomenon_id === \"1\");\n let levelNumber = '';\n\n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 930,
"y": 580,
"wires": [
[
"6f61d33cbc59185b"
]
]
},
{
"id": "4f34ac8f589740bf",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Windwarnung für morgen für das Département extrahieren",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.tomorrow) {\n // Element im Array \"tomorrow\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.tomorrow.find(item => item.phenomenon_id === \"1\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 940,
"y": 640,
"wires": [
[
"cf5ea98b3dfcd0b1"
]
]
},
{
"id": "b2c6e79083051293",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Regenwarnung für heute für das Département extrahieren",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.today) {\n // Element im Array \"today\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.today.find(item => item.phenomenon_id === \"2\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 940,
"y": 700,
"wires": [
[
"b382a4d0eece6e71"
]
]
},
{
"id": "3fe286c93a1868c1",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Regenwarnung für morgen für das Département extrahieren",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.tomorrow) {\n // Element im Array \"tomorrow\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.tomorrow.find(item => item.phenomenon_id === \"2\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 950,
"y": 760,
"wires": [
[
"1a10594d3e2331a9"
]
]
},
{
"id": "21f9b08907f80164",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Gewitterwarnung für heute für das Département extrahieren",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.today) {\n // Element im Array \"today\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.today.find(item => item.phenomenon_id === \"3\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4{ "id": "6a165e40ca126eae", "type": "function", "z": "a00c3f3cd891b014", "name": "Extrahiere die Schneewarnung für morgen für das Département", "func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.tomorrow) {\n // Suche nach dem Element im Array \"tomorrow\" wo \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.tomorrow.find(item => item.phenomenon_id === \"5\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden wurde oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 920, "y": 1060, "wires": [ [ "190d41532a7d053a" ] ] },,
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.tomorrow) {\n // Element im Array \"tomorrow\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.tomorrow.find(item => item.phenomenon_id === \"5\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden wurde oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 930,
"y": 1120,
"wires": [
[
"94caac6fd627a4b8"
]
]
},
{
"id": "8ded2eea3075dbe6",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Hitzewarnung für den Tag für das Département extrahieren",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.today) {\n // Element im Array \"today\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.today.find(item => item.phenomenon_id === \"6\");\n let levelNumber = '';\n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden wurde oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 930,
"y": 1180,
"wires": [
[
"178b6d246da2b081"
]
]
},
{
"id": "d1ad6fe78c581801",
"type": "function",
"z": "a00c3f3cd891b014",
"name": "Hitzewarnung für morgen für das Département extrahieren",
"func": "var json = msg.payload;\n\n// Überprüfen, ob das JSON gültig ist\nif (json && json.tomorrow) {\n // Element im Array \"tomorrow\" suchen, bei dem \"phenomenon_id\" gleich 1 ist\n var phenomenonItem = json.tomorrow.find(item => item.phenomenon_id === \"6\");\n let levelNumber = '';\n \n if (phenomenonItem && phenomenonItem.phenomenon_max_color_id !== undefined) {\n var phenomenonMaxColorId = phenomenonItem.phenomenon_max_color_id;\n switch (phenomenonMaxColorId) {\n case 1:\n levelNumber = 0\n break;\n case 2:\n levelNumber = 1\n break;\n case 3:\n levelNumber = 2\n break;\n default:\n levelNumber = 3\n break;\n }\n return {\n payload: levelNumber\n };\n } else {\n // Wenn phenomenon_id nicht gefunden wurde oder phenomenon_max_color_id undefiniert ist, eine Fehlermeldung zurückgeben\n levelNumber = 4\n return {\n payload: levelNumber\n };\n }\n} else {\n // Wenn das JSON ungültig ist oder Eigenschaften fehlen, eine Fehlermeldung zurückgeben\n node.error('Ungültiges JSON oder fehlende Eigenschaft');\n return null;\n}\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 940,
"y": 1240,
"wires": [
[
"a90b86c62c1e080c"
]
]
},
{
"id": "3d49197f8d7f40e7",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnung für das Département des Tages",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1290,
"y": 400,
"wires": []
},
{
"id": "6e3d0819638abd47",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnung für das Département von morgen",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1300,
"y": 460,
"wires": []
},
{
"id": "365325afee9a62cc",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnung für das Département Datum der Aktualisierung",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-date-maj/text",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1290,
"y": 520,
"wires": []
},
{
"id": "b382a4d0eece6e71",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnung für das Département Regen des Tages",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-pluie-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1360,
"y": 700,
"wires": []
},
{
"id": "1a10594d3e2331a9",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnung für das Département Regen des Tages",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-pluie-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1360,
"y": 760,
"wires": []
},
{
"id": "6f61d33cbc59185b",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnung für das Département Wind des Tages",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-vent-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1300,
"y": 580,
"wires": []
},
{
"id": "cf5ea98b3dfcd0b1",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Wind morgen",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-vent-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1350,
"y": 640,
"wires": []
},
{
"id": "500c995ef4d9dcf5",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Gewitter heute",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-orage-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1310,
"y": 820,
"wires": []
},
{
"id": "71b8ab19ebe50be0",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Gewitter morgen",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-orage-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1340,
"y": 880,
"wires": []
},
{
"id": "ebf6fe7dad24d598",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Hochwasser heute",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-inondation-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1360,
"y": 940,
"wires": []
},
{
"id": "02cca03af935dd58",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Hochwasser morgen",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-inondation-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1390,
"y": 1000,
"wires": []
},
{
"id": "190d41532a7d053a",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Schnee heute",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-neige-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1310,
"y": 1060,
"wires": []
},
{
"id": "94caac6fd627a4b8",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Schnee morgen",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-neige-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1320,
"y": 1120,
"wires": []
},
{
"id": "178b6d246da2b081",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Hitzewelle heute",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-canicule-today/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1330,
"y": 1180,
"wires": []
},
{
"id": "a90b86c62c1e080c",
"type": "mqtt out",
"z": "a00c3f3cd891b014",
"name": "Warnstufe Hitzewelle morgen",
"topic": "gladys/master/device/mqtt:vigilance-meteo/feature/mqtt:vigilance-departement-canicule-tomorrow/state",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "0ee77e0f90aa9681",
"x": 1370,
"y": 1240,
"wires": []
},
{
"id": "a8b9b28189313a53",
"type": "catch",
"z": "a00c3f3cd891b014",
"name": "Fehler",
"scope": null,
"uncaught": false,
"x": 70,
"y": 620,
"wires": [
[
"01d92082199d2fbb"
]
]
},
{
"id": "01d92082199d2fbb",
"type": "e-mail",
"z": "a00c3f3cd891b014",
"server": "monserveuremail",
"port": "465",
"authtype": "BASIC",
"saslformat": false,
"token": "oauth2Response.access_token",
"secure": true,
"tls": true,
"name": "aremplacer@monmail.fr",
"dname": "Mail",
"x": 250,
"y": 620,
"wires": []
},
{
"id": "0ee77e0f90aa9681",
"type": "mqtt-broker",
"name": "Gladys",
"broker": "mqtt://192.168.xx.xx",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"autoUnsubscribe": true,
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closeRetain": "false",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
}
]
Denken Sie daran, die Nummer Ihres Departements im Knoten „Daten des Departements extrahieren“ zu ändern
Und auch die IP-Adresse Ihres MQTT-Brokers
Und dann den API-Key im Knoten „HTTP-Anfrage“
Um die Nummer Ihres Departements abrufen zu können, ist das etwas kompliziert, aber ich hatte die Information auf dem HACF-Forum gefunden: (Im Tutorial ist der Wert für Rhône)
Man muss die domain_ids gegenüber Ihrem Departement nehmen und ersetzen:
domain_id (departement) domain_ids
01 97
02 98
03 65
04 66
05 67
06 68
07 69
08 70
09 71
10 0
11 1
12 2
13 3
14 4
15 5
16 6
17 7
18 8
19 9
21 10
22 11
23 12
24 13
25 14
26 15
27 16
28 17
29 18
30 19
31 20
32 21
33 22
34 23
35 24
36 25
37 26
38 27
39 28
40 29
41 30
42 31
43 32
44 33
45 34
46 35
47 36
48 37
49 38
50 39
51 40
52 41
53 42
54 43
55 44
56 45
57 46
58 47
59 48
60 49
61 50
62 51
63 52
64 53
65 54
66 55
67 56
68 57
69 63
70 58
71 59
72 60
73 61
74 62
75 73
76 74
77 75
78 76
79 77
80 78
81 79
82 80
83 81
84 82
85 83
86 84
87 85
88 86
89 87
90 88
91 89
92 92
93 93
94 94
95 95
99 96
0610 114
1110 121
1310 122
1410 105
1710 99
2210 104
2910 109
3010 108
3310 102
3410 107
3510 100
4010 101
4410 112
5010 118
5610 120
5910 64
6210 103
6410 106
6610 110
7610 111
8010 113
8310 117
8510 119
2A 72
2A10 115
2B 91
2B10 116
FRA 90
Die Werte, die zu ändern sind, wenn Sie nicht aus dem Rhône sind:
1. Erstellung des Wetterwarnungsgeräts in der MQTT-Integration:
Jetzt müssen Sie nur noch dies auf dem Dashboard anzeigen lassen ![]()
Und Sie können es auch in Ihren Szenen verwenden, wie Sie möchten ![]()
Changelog zu kommen:
- Keins (Ihre Kommentare
)
Edit 13/05/2024:
- Änderung der Funktionstypen in Risikostufen mit der Veröffentlichung der Version 4.41.0 von Gladys
Edit 15/05/2024:
- Änderung der Cron-Jobs










