Service Météorologique National Analyse IA
Ceci est unPersonal Productivity, AI Summarizationworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme Set, Code, Merge, Filter, Webhook. Analyse météorologique générée par IA basée sur les alertes du NWS, les images radar et Home Assistant
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API OpenAI
Nœuds utilisés (20)
Catégorie
{
"id": "kJfDku2rYe5QZdCO",
"meta": {
"instanceId": "99d73f46ce25facbb6a315b9049061902fa3a045876ce7aa2b16534051157fdd",
"templateCredsSetupCompleted": true
},
"name": "National Weather Service AI Analysis",
"tags": [],
"nodes": [
{
"id": "a72e2042-fd53-46b4-b366-c522ef3044ab",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-32,
16
],
"webhookId": "b74e13cd-ad2f-4ef1-8350-ff6b915e5485",
"parameters": {
"path": "b74e13cd-ad2f-4ef1-8350-ff6b915e5485",
"options": {},
"httpMethod": "POST",
"responseData": "allEntries",
"responseMode": "lastNode"
},
"typeVersion": 2
},
{
"id": "31d8e7b5-c47a-42af-abb0-02f9c2482201",
"name": "Obtenir les alertes NWS",
"type": "n8n-nodes-base.httpRequest",
"position": [
192,
16
],
"parameters": {
"url": "https://api.weather.gov/alerts",
"options": {
"response": {
"response": {
"fullResponse": true,
"responseFormat": "json"
}
}
},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "status",
"value": "actual"
},
{
"name": "point",
"value": "={{ $json.body.latitude }},{{ $json.body.longitude }}"
}
]
}
},
"typeVersion": 4.2,
"alwaysOutputData": false
},
{
"id": "b1938edb-79be-4399-a815-dc90ffd1f240",
"name": "Séparer",
"type": "n8n-nodes-base.splitOut",
"position": [
384,
16
],
"parameters": {
"options": {},
"fieldToSplitOut": "body.features"
},
"typeVersion": 1
},
{
"id": "bc5b7d6c-e2ad-43ab-aad1-d947799243e5",
"name": "Supprimer les champs non pertinents",
"type": "n8n-nodes-base.set",
"position": [
576,
16
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c1e43be8-8b6c-4eb6-a344-251473f78dbf",
"name": "id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "26551b00-b7a6-43e6-85d2-23921e5b9c75",
"name": "properties.areaDesc",
"type": "string",
"value": "={{ $json.properties.areaDesc }}"
},
{
"id": "d4a19262-2c9e-4b45-bb79-9aa97da77e69",
"name": "properties.effective",
"type": "string",
"value": "={{ $json.properties.effective }}"
},
{
"id": "40fdf9b8-e594-405c-88cc-6e8a80fcfa60",
"name": "properties.expires",
"type": "string",
"value": "={{ $json.properties.expires }}"
},
{
"id": "715541f6-bcdf-4152-9427-dba110a4ee9e",
"name": "properties.severity",
"type": "string",
"value": "={{ $json.properties.severity }}"
},
{
"id": "b4851577-2d71-4ab6-bd8c-e6bf3db412f1",
"name": "properties.certainty",
"type": "string",
"value": "={{ $json.properties.certainty }}"
},
{
"id": "43aba50b-4e09-4e26-8ded-328c1ead3469",
"name": "properties.status",
"type": "string",
"value": "={{ $json.properties.status }}"
},
{
"id": "aab46fc5-e6c3-45c6-b12f-da4d11d82b25",
"name": "properties.headline",
"type": "string",
"value": "={{ $json.properties.headline }}"
},
{
"id": "ab826652-b359-4047-a1fa-4da9797a54d2",
"name": "properties.description",
"type": "string",
"value": "={{ $json.properties.description }}"
},
{
"id": "e0ffea55-c055-44d2-952f-5785e7c7d3c2",
"name": "properties.instruction",
"type": "string",
"value": "={{ $json.properties.instruction }}"
},
{
"id": "205b4373-515c-40d9-8d02-e2a5e3ddc7f4",
"name": "properties.parameters.NWSheadline",
"type": "array",
"value": "={{ $json.properties.parameters.NWSheadline }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e0ce90cb-a447-4b5c-a3e7-6ea2ccfa4efe",
"name": "Filtrer par sévérité",
"type": "n8n-nodes-base.filter",
"position": [
960,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "7dde0a87-93ff-482b-9c53-d13a191f982b",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.properties.severity }}",
"rightValue": "Moderate"
},
{
"id": "28ed779f-d676-4619-bff4-12877b696415",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.properties.severity }}",
"rightValue": "Severe"
},
{
"id": "a28503c7-f468-4cbf-800e-edfa05d405ce",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.properties.severity }}",
"rightValue": "Extreme"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "e5272333-90a2-4bfa-969f-0cd6e2d50ad8",
"name": "Filtrer par efficacité",
"type": "n8n-nodes-base.filter",
"position": [
1152,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "f99f25cf-d59b-4739-be7f-269ecb07f76f",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ new Date($json.properties.effective).getTime() <= new Date().getTime() }}",
"rightValue": "true"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "4b05f80a-b851-4286-9618-86dd11600faa",
"name": "Filtrer par statut",
"type": "n8n-nodes-base.filter",
"position": [
768,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2b51bbc7-927f-40a5-b43b-d12e23b6ea5c",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.properties.status }}",
"rightValue": "Actual"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "fe639674-9bfe-4344-b4dc-3141f90cbf9f",
"name": "Récupérer la boucle radar Weather.gov",
"type": "n8n-nodes-base.httpRequest",
"position": [
576,
608
],
"parameters": {
"url": "https://radar.weather.gov/ridge/standard/KAMX_loop.gif",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "7a966d42-eae1-4aaf-ad35-2dff15b62e68",
"name": "Filtrer par expiration",
"type": "n8n-nodes-base.filter",
"position": [
1344,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "f99f25cf-d59b-4739-be7f-269ecb07f76f",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ new Date($json.properties.expires).getTime() >= new Date().getTime() }}",
"rightValue": "true"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "a071bf45-dd82-41d0-9130-3c8ef6891ded",
"name": "Analyser l'image radar",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
960,
496
],
"parameters": {
"text": "=This is the latest weather radar animation for the monitored area. The AI should analyze precipitation patterns, storm intensity, and movement.\n\nA local weather sensor reports precipitation type: {{ $json.state }}. This sensor takes precedence over radar-based assumptions when determining real-time weather conditions.\n\nDark greens, yellows, and reds indicate stronger precipitation. If storms are present, assess their movement and potential impact on the area. When describing weather, use cautious language like \"it is likely raining\" rather than making definitive statements unless radar data is conclusive.\n\nConsider storm progression over time and estimate when precipitation may begin or end based on timestamps in the radar animation.\n\nProvide a clear, concise summary of current conditions based on the radar and local weather sensor input.",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"resource": "image",
"inputType": "base64",
"operation": "analyze"
},
"credentials": {
"openAiApi": {
"id": "bDmccS2kILl6lfr2",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "ac0ae58a-1c40-421d-ad53-9f2e560319df",
"name": "Mapper la réponse JSON",
"type": "n8n-nodes-base.set",
"position": [
1152,
496
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ad4a9a05-20b8-4eda-a477-344d385b4a1e",
"name": "radar_summary",
"type": "string",
"value": "={{ $json.content }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4bea6742-c424-4250-9d1d-74b4cd46cff4",
"name": "Obtenir les précipitations locales",
"type": "n8n-nodes-base.homeAssistant",
"position": [
576,
416
],
"parameters": {
"entityId": "sensor.local_weather_precipitation_type",
"resource": "state"
},
"credentials": {
"homeAssistantApi": {
"id": "nhKk0HXRsf8saByq",
"name": "Home Assistant account"
}
},
"typeVersion": 1
},
{
"id": "a7d3e335-a2ae-459d-829f-f0047f7c1cbb",
"name": "Fusionner JSON avec l'image",
"type": "n8n-nodes-base.merge",
"position": [
768,
496
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "72fe8625-4631-4912-9db7-7ca721638431",
"name": "Fusionner l'analyse radar avec les données NWS",
"type": "n8n-nodes-base.merge",
"position": [
1344,
272
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "dd7f1b53-dba0-4532-98e3-bfcc9c0a8681",
"name": "Modèle de chat OpenAI",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1536,
464
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "bDmccS2kILl6lfr2",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "90f46158-41ed-4811-baa6-efac8beff957",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
384,
256
],
"parameters": {
"jsCode": "let idx = 0\nlet alerts = []\n\nfor (const item of $input.all()) {\n for (const alert of item.json.alerts) {\n idx++\n\n let template = `Alert ${idx}:\n **Headline:** ${alert.properties.headline}\n **Severity:** ${alert.properties.severity}\n **Description:** ${alert.properties.description}\n **Instructions:** ${alert.properties.instruction}\n`\n\n alerts.push(template)\n }\n\n item.json = { nws_alerts: alerts.join('\\n\\n'), nws_alerts_count: alerts.length }\n}\n\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "bceccd50-f2f3-4ff4-b378-6030c8b680cd",
"name": "Agréger",
"type": "n8n-nodes-base.aggregate",
"position": [
192,
256
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "alerts"
},
"typeVersion": 1
},
{
"id": "642995c2-a4f4-43a4-bc58-ed2faebe1426",
"name": "Générer un résumé",
"type": "@n8n/n8n-nodes-langchain.chainSummarization",
"position": [
1536,
272
],
"parameters": {
"options": {
"summarizationMethodAndPrompts": {
"values": {
"prompt": "=It is critically important to limit your response to 255 characters or less, including spaces.\n\nAI Weather Assistant Alert: A new weather alert has been issued for this location. Summarize the alert details concisely. Include only essential information, such as severe conditions, timing, and affected areas.\n\nThe number of active weather alerts is: {{ $json.nws_alerts_count }}.\n\n# Reviewing all Moderate and Severe alerts:\n\n{{ $json.nws_alerts }}\n\n# Radar Analysis:\n\n{{ $json.radar_summary }}\n",
"summarizationMethod": "stuff"
}
}
},
"operationMode": "nodeInputBinary"
},
"typeVersion": 2.1
},
{
"id": "73e4af91-061d-44a7-a3aa-f8efad62e8c9",
"name": "Mapper JSON vers la réponse",
"type": "n8n-nodes-base.set",
"position": [
1920,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e290b262-1443-43ce-8761-1131cbc2cce2",
"name": "summary",
"type": "string",
"value": "={{ $json.output.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "25f096aa-457e-4e9e-8394-e0054dc7ed55",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-640,
-32
],
"parameters": {
"width": 544,
"height": 832,
"content": "# Overview\n\nThis n8n template demonstrates how you can generate an AI-produced weather analysis of your local radar loop and home assistant precipitation sensor(s) to keep your family informed of National Weather Service Alerts.\n\nWith as crazy as things have been lately in the open world, how will you and your family know when a severe or extreme alert impacts your area?\n\n## How it Works\n\n- This workflow is triggered by a webhook with takes a latitude and longitude json payload to identify the area for monitoring.\n- Then, it fetches the National Weather Service Alerts and filters them down to alerts which are currently active and their severity.\n- Next, it fetches the local precipitation value from your Home Assistant instance (a value like \"Light Rain\" or \"No Rain\", etc) coupled with your respective weather.gov radar loop image.\n- It then submits this data to OpenAI and produces an output regarding the image analysis.\n- Finally, it takes this analysis and uses OpenAI to again generate a short summary.\n\n## How to Use\n\n- Import the workflow into your n8n instance\n- Update the credentials in the problematic nodes\n- Make sure you adjust the radar loop image that is being used\n\n## Requirements\n\n- A Home Assistant Instance (you could remove this data if you wanted)\n- An OpenAI account for LLM and image analysis\n"
},
"typeVersion": 1
}
],
"active": true,
"pinData": {
"Webhook": [
{
"json": {
"body": {
"latitude": 0,
"longitude": 0
}
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "77f65303-990f-4463-bc6a-0949b7cb9cf6",
"connections": {
"90f46158-41ed-4811-baa6-efac8beff957": {
"main": [
[
{
"node": "4bea6742-c424-4250-9d1d-74b4cd46cff4",
"type": "main",
"index": 0
},
{
"node": "fe639674-9bfe-4344-b4dc-3141f90cbf9f",
"type": "main",
"index": 0
},
{
"node": "72fe8625-4631-4912-9db7-7ca721638431",
"type": "main",
"index": 0
}
]
]
},
"a72e2042-fd53-46b4-b366-c522ef3044ab": {
"main": [
[
{
"node": "31d8e7b5-c47a-42af-abb0-02f9c2482201",
"type": "main",
"index": 0
}
]
]
},
"bceccd50-f2f3-4ff4-b378-6030c8b680cd": {
"main": [
[
{
"node": "90f46158-41ed-4811-baa6-efac8beff957",
"type": "main",
"index": 0
}
]
]
},
"b1938edb-79be-4399-a815-dc90ffd1f240": {
"main": [
[
{
"node": "bc5b7d6c-e2ad-43ab-aad1-d947799243e5",
"type": "main",
"index": 0
}
]
]
},
"31d8e7b5-c47a-42af-abb0-02f9c2482201": {
"main": [
[
{
"node": "b1938edb-79be-4399-a815-dc90ffd1f240",
"type": "main",
"index": 0
}
]
]
},
"4b05f80a-b851-4286-9618-86dd11600faa": {
"main": [
[
{
"node": "e0ce90cb-a447-4b5c-a3e7-6ea2ccfa4efe",
"type": "main",
"index": 0
}
]
]
},
"7a966d42-eae1-4aaf-ad35-2dff15b62e68": {
"main": [
[
{
"node": "bceccd50-f2f3-4ff4-b378-6030c8b680cd",
"type": "main",
"index": 0
}
]
]
},
"ac0ae58a-1c40-421d-ad53-9f2e560319df": {
"main": [
[
{
"node": "72fe8625-4631-4912-9db7-7ca721638431",
"type": "main",
"index": 1
}
]
]
},
"dd7f1b53-dba0-4532-98e3-bfcc9c0a8681": {
"ai_languageModel": [
[
{
"node": "642995c2-a4f4-43a4-bc58-ed2faebe1426",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"e0ce90cb-a447-4b5c-a3e7-6ea2ccfa4efe": {
"main": [
[
{
"node": "e5272333-90a2-4bfa-969f-0cd6e2d50ad8",
"type": "main",
"index": 0
}
]
]
},
"642995c2-a4f4-43a4-bc58-ed2faebe1426": {
"main": [
[
{
"node": "73e4af91-061d-44a7-a3aa-f8efad62e8c9",
"type": "main",
"index": 0
}
]
]
},
"a071bf45-dd82-41d0-9130-3c8ef6891ded": {
"main": [
[
{
"node": "ac0ae58a-1c40-421d-ad53-9f2e560319df",
"type": "main",
"index": 0
}
]
]
},
"e5272333-90a2-4bfa-969f-0cd6e2d50ad8": {
"main": [
[
{
"node": "7a966d42-eae1-4aaf-ad35-2dff15b62e68",
"type": "main",
"index": 0
}
]
]
},
"73e4af91-061d-44a7-a3aa-f8efad62e8c9": {
"main": [
[]
]
},
"a7d3e335-a2ae-459d-829f-f0047f7c1cbb": {
"main": [
[
{
"node": "a071bf45-dd82-41d0-9130-3c8ef6891ded",
"type": "main",
"index": 0
}
]
]
},
"bc5b7d6c-e2ad-43ab-aad1-d947799243e5": {
"main": [
[
{
"node": "4b05f80a-b851-4286-9618-86dd11600faa",
"type": "main",
"index": 0
}
]
]
},
"fe639674-9bfe-4344-b4dc-3141f90cbf9f": {
"main": [
[
{
"node": "a7d3e335-a2ae-459d-829f-f0047f7c1cbb",
"type": "main",
"index": 1
}
]
]
},
"4bea6742-c424-4250-9d1d-74b4cd46cff4": {
"main": [
[
{
"node": "a7d3e335-a2ae-459d-829f-f0047f7c1cbb",
"type": "main",
"index": 0
}
]
]
},
"72fe8625-4631-4912-9db7-7ca721638431": {
"main": [
[
{
"node": "642995c2-a4f4-43a4-bc58-ed2faebe1426",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Productivité personnelle, Résumé IA
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Carl Danley
@carldanleyPartager ce workflow