Täglicher Wetterbericht mit OpenWeather API, Google Sheets und Gmail

Fortgeschritten

Dies ist ein Personal Productivity-Bereich Automatisierungsworkflow mit 7 Nodes. Hauptsächlich werden Html, Gmail, HttpRequest, GoogleSheets, ScheduleTrigger und andere Nodes verwendet. Täglicher Wetterbericht: OpenWeather API, Google Sheets und Gmail

Voraussetzungen
  • Google-Konto + Gmail API-Anmeldedaten
  • Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
  • Google Sheets API-Anmeldedaten
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "id": "ONGqVR4QHDYAI40u",
  "meta": {
    "instanceId": "14e4c77104722ab186539dfea5182e419aecc83d85963fe13f6de862c875ebfa",
    "templateCredsSetupCompleted": true
  },
  "name": "Daily Weather Reports with OpenWeather API, Google Sheets, and Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "5d9003c3-5608-4dc5-8b0b-ba712c0799d4",
      "name": "Notizzettel",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        340,
        40
      ],
      "parameters": {
        "width": 1220,
        "height": 260,
        "content": "## Daily Weather Reports with OpenWeather API, Google Sheets, and Gmail"
      },
      "typeVersion": 1
    },
    {
      "id": "0842de03-5376-4161-9581-25982d90467c",
      "name": "Notizzettel1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        340,
        320
      ],
      "parameters": {
        "width": 1220,
        "height": 400,
        "content": "## Node Breakdown & Descriptions:\n- The workflow starts with a Schedule Trigger node named \"Trigger Daily at 10 AM\", which runs every day at 10:00 AM IST to initiate the weather reporting process.\n\n- The next node, named \"Fetch Weather from OpenWeather\", is an HTTP Request node that fetches the latest weather data from the OpenWeather API using coordinates, API key, and metric units.\n\n- The workflow then proceeds to a Google Sheets node named \"Append Weather to Sheet\", which appends the fetched weather data into a predefined Google Sheet. The stored fields include: Country, Location Latitude, Location Longitude, Temperature (°C), Feels Like (°C), Min Temp (°C), Max Temp (°C), Humidity (%), Pressure (hPa), Sea Level (hPa), Ground Level (hPa), Visibility (m), Wind Speed (m/s), Wind Direction (°), Wind Gust (m/s), Cloudiness (%), Sunrise (UTC) (stored as UNIX timestamp or formatted date), Sunset (UTC) (stored as UNIX timestamp or formatted date),Date Time (UTC) (report generated time, in UNIX or formatted UTC), Each row in the sheet represents a daily weather snapshot with all key climate indicators.\n\n- After storing the data, the workflow uses a Set or Function node named \"Generate Weather Email HTML\", which creates a styled HTML email template by formatting the weather data into a visually readable format.\n\n- Finally, the Gmail node named \"Send Weather Update Email\" sends the formatted weather report to a predefined email list, with a subject line like “Daily Weather Report – {{ $now.toFormat('dd MMM yyyy') }}” and the generated HTML as the message body."
      },
      "typeVersion": 1
    },
    {
      "id": "babd8c14-906e-498d-a35c-5637e1378ce0",
      "name": "Wetter von OpenWeather abrufen",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Fetching the weather data",
      "position": [
        660,
        120
      ],
      "parameters": {
        "url": "https://api.openweathermap.org/data/2.5/weather?",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "lon",
              "value": ""
            },
            {
              "name": "lat",
              "value": ""
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "h1tx2g2jKOEWOqIr",
          "name": "Query Auth account 3"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.2
    },
    {
      "id": "fdddcafa-d579-4d13-b624-80c66d02d78c",
      "name": "Wetterdaten in Sheet anhängen",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        880,
        120
      ],
      "parameters": {
        "columns": {
          "value": {
            "Country": "={{ $json.sys.country }}",
            "Location": "={{ $json.coord }}",
            "Humidity (%)": "={{ $json.main.humidity }}",
            "Sunset (UTC)": "={{ $json.sys.sunset }}",
            "Sunrise (UTC)": "={{ $json.sys.sunrise }}",
            "Cloudiness (%)": "={{ $json.clouds.all }}",
            "Max Temp (°C)": "={{ $json.main.temp_max }}",
            "Min Temp (°C)": "={{ $json.main.temp_min }}",
            "Pressure (hPa)": "={{ $json.main.pressure }}",
            "Visibility (m)": "={{ $json.visibility }}",
            "Date Time (UTC)": "={{ $json.dt }}",
            "Sea Level (hPa)": "={{ $json.main.sea_level }}",
            "Wind Gust (m/s)": "={{ $json.wind.gust }}",
            "Feels Like (°C)": "={{ $json.main.feels_like }}",
            "Wind Speed (m/s)": "={{ $json.wind.speed }}",
            "Temperature (°C)": "={{ $json.main.temp }}",
            "Ground Level (hPa)": "={{ $json.main.grnd_level }}",
            "Wind Direction (°)": "={{ $json.wind.deg }}"
          },
          "schema": [
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Country",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Temperature (°C)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Temperature (°C)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Feels Like (°C)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Feels Like (°C)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Min Temp (°C)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Min Temp (°C)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Max Temp (°C)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Max Temp (°C)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Humidity (%)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Humidity (%)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pressure (hPa)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Pressure (hPa)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sea Level (hPa)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sea Level (hPa)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ground Level (hPa)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Ground Level (hPa)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Visibility (m)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Visibility (m)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Wind Speed (m/s)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Wind Speed (m/s)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Wind Direction (°)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Wind Direction (°)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Wind Gust (m/s)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Wind Gust (m/s)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Cloudiness (%)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Cloudiness (%)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sunrise (UTC)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sunrise (UTC)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sunset (UTC)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sunset (UTC)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date Time (UTC)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date Time (UTC)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Location"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 380635808,
          "cachedResultUrl": "",
          "cachedResultName": "weather_data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1cQ-TBf3-dqo7njDYzYpxpASYFvEp8lIzH7vpIqTLcwc",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "zkQXt1viHat7vaB3",
          "name": "Google Sheets account 6"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "d9eb272f-4c1e-42dc-a297-05d0a0848358",
      "name": "Wetter-E-Mail-HTML generieren",
      "type": "n8n-nodes-base.html",
      "position": [
        1120,
        120
      ],
      "parameters": {
        "html": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\" />\n  <title>Daily Weather Report</title>\n  <style>\n    .container {\n      background-color: #ffffff;\n      text-align: center;\n      padding: 24px;\n      border-radius: 12px;\n      font-family: Arial, sans-serif;\n      max-width: 650px;\n      margin: auto;\n      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n    }\n\n    h1 {\n      color: #ff6d5a;\n      font-size: 24px;\n      font-weight: bold;\n      padding: 8px;\n      margin-bottom: 0;\n    }\n\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      margin-top: 20px;\n    }\n\n    td {\n      padding: 10px;\n      text-align: left;\n      border-bottom: 1px solid #eee;\n    }\n\n    td:first-child {\n      font-weight: bold;\n      color: #555;\n      width: 40%;\n    }\n\n    p.footer {\n      font-size: 13px;\n      color: #999;\n      margin-top: 24px;\n    }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <h1>🌤️ Weather Report</h1>\n\n    <table>\n      <tr>\n        <td>📌 Coordinates</td>\n        <td>Lat: {{ $json[\"Location\"]?.lat }}, Lon: {{ $json[\"Location\"]?.lon }}</td>\n      </tr>\n      <tr>\n        <td>🌡️ Temperature</td>\n        <td>{{ $json[\"Temperature (°C)\"] }} °C (Feels like {{ $json[\"Feels Like (°C)\"] }} °C)</td>\n      </tr>\n      <tr>\n        <td>📉 Min / Max Temp</td>\n        <td>{{ $json[\"Min Temp (°C)\"] }} °C / {{ $json[\"Max Temp (°C)\"] }} °C</td>\n      </tr>\n      <tr>\n        <td>💧 Humidity</td>\n        <td>{{ $json[\"Humidity (%)\"] }}%</td>\n      </tr>\n      <tr>\n        <td>📈 Pressure</td>\n        <td>{{ $json[\"Pressure (hPa)\"] }} hPa (Sea: {{ $json[\"Sea Level (hPa)\"] }} hPa, Ground: {{ $json[\"Ground Level (hPa)\"] }} hPa)</td>\n      </tr>\n      <tr>\n        <td>👁️ Visibility</td>\n        <td>{{ $json[\"Visibility (m)\"] }} meters</td>\n      </tr>\n      <tr>\n        <td>🧭 Wind</td>\n        <td>\n          Speed: {{ $json[\"Wind Speed (m/s)\"] }} m/s<br/>\n          Direction: {{ $json[\"Wind Direction (°)\"] }}°<br/>\n          Gust: {{ $json[\"Wind Gust (m/s)\"] }} m/s\n        </td>\n      </tr>\n      <tr>\n        <td>☁️ Cloudiness</td>\n        <td>{{ $json[\"Cloudiness (%)\"] }}%</td>\n      </tr>\n      <tr>\n        <td>🌅 Sunrise (UTC)</td>\n        <td>{{ new Date($json[\"Sunrise (UTC)\"] * 1000).toUTCString() }}</td>\n      </tr>\n      <tr>\n        <td>🌇 Sunset (UTC)</td>\n        <td>{{ new Date($json[\"Sunset (UTC)\"] * 1000).toUTCString() }}</td>\n      </tr>\n      <tr>\n        <td>📆 Report Time (UTC)</td>\n        <td>{{ new Date($json[\"Date Time (UTC)\"] * 1000).toUTCString() }}</td>\n      </tr>\n    </table>\n\n    <p class=\"footer\">⛅ Auto-generated by n8n | {{ new Date().toUTCString() }}</p>\n  </div>\n</body>\n</html>\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "cced121e-190b-4026-aeea-54e32907af0d",
      "name": "Wetterupdate-E-Mail senden",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1360,
        120
      ],
      "webhookId": "1336d632-94ba-4231-bd2c-48dc8e118f75",
      "parameters": {
        "sendTo": "",
        "message": "={{ $json.html }}",
        "options": {},
        "subject": "Daily Weather Update"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "YqeBbKp4FvFiADc0",
          "name": "Gmail account 7"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7e0b458d-540e-479b-acd0-708cb9a888ec",
      "name": "Täglich um 10 Uhr auslösen",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        440,
        120
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 10
            }
          ]
        }
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "74976aa3-0dba-4e9a-a442-cf715fc38807",
  "connections": {
    "7e0b458d-540e-479b-acd0-708cb9a888ec": {
      "main": [
        [
          {
            "node": "babd8c14-906e-498d-a35c-5637e1378ce0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fdddcafa-d579-4d13-b624-80c66d02d78c": {
      "main": [
        [
          {
            "node": "d9eb272f-4c1e-42dc-a297-05d0a0848358",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d9eb272f-4c1e-42dc-a297-05d0a0848358": {
      "main": [
        [
          {
            "node": "cced121e-190b-4026-aeea-54e32907af0d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "babd8c14-906e-498d-a35c-5637e1378ce0": {
      "main": [
        [
          {
            "node": "fdddcafa-d579-4d13-b624-80c66d02d78c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Persönliche Produktivität

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes7
Kategorie1
Node-Typen6
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Autor
WeblineIndia

WeblineIndia

@weblineindia

A Leading Software Engineering, Consulting & Outsourcing Services Company in USA & India serving Clients Globally since 1999.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34