インテリジェントフィーダー:BMKG 天気に基づく自動給餌システム

中級

これはEngineering, Multimodal AI分野の自動化ワークフローで、13個のノードを含みます。主にIf, Set, Code, Merge, Telegramなどのノードを使用。 スマートフィードフィーダー:BMKGの天気とTelegram通知に基づく自動給餌システム

前提条件
  • Telegram Bot Token
  • ターゲットAPIの認証情報が必要な場合あり
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "ZWdJS9zTlAfcE8QW",
  "meta": {
    "instanceId": "b14f5dd921befc4584084cc386aea593f73c7c2b00b50933075d7967a4d1c502"
  },
  "name": "🐟 Smart Fish Feeder: BMKG Weather-Based Automated Feeding System",
  "tags": [],
  "nodes": [
    {
      "id": "da547149-76e6-455a-970c-3bbe3aa4c0be",
      "name": "Cron ジョブ: 05:30 & 16:30 WIB",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        528,
        304
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c024b1c2-5fc5-42f8-9f41-5de6c9a39a82",
      "name": "Config",
      "type": "n8n-nodes-base.set",
      "position": [
        720,
        304
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "locationName",
              "name": "locationName",
              "type": "string",
              "value": "Main Pond"
            },
            {
              "id": "lat",
              "name": "lat",
              "type": "string",
              "value": "-6.2000"
            },
            {
              "id": "lon",
              "name": "lon",
              "type": "string",
              "value": "106.8166"
            },
            {
              "id": "bmkgUrlTemplate",
              "name": "bmkgUrlTemplate",
              "type": "string",
              "value": "https://api.bmkg.go.id/publik/prakiraan-weather?adm4={{ADM4}}"
            },
            {
              "id": "bmkgApiKey",
              "name": "bmkgApiKey",
              "type": "string",
              "value": "{{PLACEHOLDER}}"
            },
            {
              "id": "telegramBotToken",
              "name": "telegramBotToken",
              "type": "string",
              "value": "{{PLACEHOLDER}}"
            },
            {
              "id": "telegramChatId",
              "name": "telegramChatId",
              "type": "string",
              "value": "{{PLACEHOLDER}}"
            },
            {
              "id": "esp8266WebhookUrl",
              "name": "esp8266WebhookUrl",
              "type": "string",
              "value": "{{PLACEHOLDER}}"
            },
            {
              "id": "adm4",
              "name": "adm4",
              "type": "string",
              "value": "31.71.03.1001"
            },
            {
              "id": "thresholdProb",
              "name": "thresholdProb",
              "type": "string",
              "value": "60"
            },
            {
              "id": "reducePercent",
              "name": "reducePercent",
              "type": "string",
              "value": "-20"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e72ef26d-d37a-4d33-a485-cbbb2352554a",
      "name": "Build Forecast URL",
      "type": "n8n-nodes-base.code",
      "position": [
        896,
        304
      ],
      "parameters": {
        "jsCode": "// Build BMKG API URL with error handling\ntry {\n  const adm4 = $input.item(0).json.adm4;\n  const urlTemplate = $input.item(0).json.bmkgUrlTemplate;\n  \n  if (!adm4 || !urlTemplate) {\n    throw new Error('Missing required parameters: adm4 or urlTemplate');\n  }\n  \n  const url = urlTemplate.replace('{{ADM4}}', adm4);\n  \n  return {\n    json: { \n      url,\n      timestamp: new Date().toISOString(),\n      location: $input.item(0).json.locationName\n    }\n  };\n} catch (error) {\n  return {\n    json: {\n      error: error.message,\n      url: 'https://api.bmkg.go.id/publik/prakiraan-weather?adm4=31.71.03.1001'\n    }\n  };\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "1e132997-bd59-4dce-b2c8-4b60d92aa1ea",
      "name": "HTTP: Forecast BMKG",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1072,
        304
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {
          "timeout": 30000,
          "response": {
            "response": {
              "neverError": true
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f37bd636-4f38-4300-8909-f16cd91f7423",
      "name": "Parse & Score Weather (6-12h)",
      "type": "n8n-nodes-base.code",
      "position": [
        1280,
        304
      ],
      "parameters": {
        "jsCode": "// Enhanced weather parsing with better error handling\ntry {\n  const data = $input.item(0).json;\n  const configData = $('Config').item(0).json;\n  \n  let rain_hours = 0, rain_prob_max6h = 0, rain_prob_avg12h = 0;\n  let items = [];\n  \n  // Handle different API response structures\n  if (data.data && Array.isArray(data.data)) {\n    items = data.data;\n  } else if (data.lokasi && data.lokasi[0] && data.lokasi[0].weather) {\n    items = data.lokasi[0].weather;\n  } else if (Array.isArray(data)) {\n    items = data;\n  }\n  \n  let rain_count = 0, rain_sum = 0, max6h = 0, total = 0;\n  let weather_conditions = [];\n  \n  // Process weather data for next 12 hours (4 periods of 3 hours)\n  for (let i = 0; i < Math.min(items.length, 4); i++) {\n    const item = items[i];\n    let rainProb = 0;\n    \n    // Extract rain probability from different possible fields\n    if (item.hu) rainProb = parseFloat(item.hu) || 0;\n    if (item.rain_prob) rainProb = parseFloat(item.rain_prob) || 0;\n    if (item.weather && item.weather.toLowerCase().includes('rain')) rainProb = 80;\n    if (item.weather_desc && item.weather_desc.toLowerCase().includes('rain')) rainProb = 75;\n    \n    // Estimate probability from weather description\n    if (item.weather_desc) {\n      const desc = item.weather_desc.toLowerCase();\n      if (desc.includes('heavy rain') || desc.includes('thunderstorm')) rainProb = Math.max(rainProb, 85);\n      else if (desc.includes('rain') && desc.includes('thunder')) rainProb = Math.max(rainProb, 80);\n      else if (desc.includes('rain')) rainProb = Math.max(rainProb, 70);\n      else if (desc.includes('clouds') && desc.includes('thick')) rainProb = Math.max(rainProb, 40);\n    }\n    \n    rain_sum += rainProb;\n    if (i < 2 && rainProb > max6h) max6h = rainProb; // First 6 hours (2 periods)\n    if (rainProb > 0) rain_count++;\n    total++;\n    \n    weather_conditions.push({\n      period: i + 1,\n      time: item.local_datetime || item.weatherTime || `Period ${i + 1}`,\n      rain_prob: rainProb,\n      weather: item.weather_desc || item.weather || 'N/A',\n      temp: item.t || item.tempC || 'N/A'\n    });\n  }\n  \n  if (total > 0) {\n    rain_prob_avg12h = Math.round(rain_sum / total);\n    rain_prob_max6h = max6h;\n  }\n  \n  const final_rain_prob = Math.max(rain_prob_avg12h, rain_prob_max6h);\n  const threshold = parseInt(configData.thresholdProb) || 60;\n  const feed_ratio = final_rain_prob >= threshold \n    ? parseInt(configData.reducePercent) || -20\n    : 0;\n  \n  return {\n    json: {\n      rain_prob: final_rain_prob,\n      rain_prob_max6h: rain_prob_max6h,\n      rain_prob_avg12h: rain_prob_avg12h,\n      feed_ratio: feed_ratio,\n      weather_conditions: weather_conditions,\n      analysis_time: new Date().toLocaleString('id-ID', { timeZone: 'Asia/Jakarta' }),\n      location: configData.locationName\n    }\n  };\n  \n} catch (error) {\n  return {\n    json: {\n      error: error.message,\n      rain_prob: 0,\n      rain_prob_max6h: 0,\n      rain_prob_avg12h: 0,\n      feed_ratio: 0,\n      weather_conditions: [],\n      analysis_time: new Date().toLocaleString('id-ID', { timeZone: 'Asia/Jakarta' })\n    }\n  };\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "381e3f06-03ee-4c8c-a2d3-d60798c2ccb7",
      "name": "条件分岐: High Rain Probability",
      "type": "n8n-nodes-base.if",
      "position": [
        1472,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "rain_condition",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.rain_prob }}",
              "rightValue": "={{ $('Config').item(0).json.thresholdProb }}"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "a089a86b-fe8e-44b9-8c5e-677018c53b97",
      "name": "設定: Reduce Feed 20%",
      "type": "n8n-nodes-base.set",
      "position": [
        1680,
        224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "note",
              "name": "note",
              "type": "string",
              "value": "🌧️ WARNING: High rain probability ({{ $('Parse & Score Weather (6-12h)').item(0).json.rain_prob }}%)\\n\\n📉 Reduce feed by 20%\\n⚡ Turn on aerator (15-20 menit/jam)\\n🔍 Check DO & observe fish appetite\\n🐟 Monitor fish health"
            },
            {
              "id": "feed_ratio",
              "name": "feed_ratio",
              "type": "number",
              "value": "={{ $('Parse & Score Weather (6-12h)').item(0).json.feed_ratio }}"
            },
            {
              "id": "action_type",
              "name": "action_type",
              "type": "string",
              "value": "reduce_feed"
            },
            {
              "id": "esp8266_command",
              "name": "esp8266_command",
              "type": "string",
              "value": "FEED_REDUCE_20"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "fb16bf68-b431-417f-9443-3bbb2cdd2f2f",
      "name": "設定: Normal Feed 0%",
      "type": "n8n-nodes-base.set",
      "position": [
        1680,
        384
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "note",
              "name": "note",
              "type": "string",
              "value": "☀️ Weather is relatively safe ({{ $('Parse & Score Weather (6-12h)').item(0).json.rain_prob }}%)\\n\\n🐟 Normal feed - no reduction\\n✅ Continue monitoring water quality\\n📊 Monitor pond parameters routinely"
            },
            {
              "id": "feed_ratio",
              "name": "feed_ratio",
              "type": "number",
              "value": 0
            },
            {
              "id": "action_type",
              "name": "action_type",
              "type": "string",
              "value": "normal_feed"
            },
            {
              "id": "esp8266_command",
              "name": "esp8266_command",
              "type": "string",
              "value": "FEED_NORMAL"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "33f96e3a-8a4b-4260-93d8-75b803fe1d76",
      "name": "マージ Branches",
      "type": "n8n-nodes-base.merge",
      "position": [
        1920,
        304
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "typeVersion": 2.1
    },
    {
      "id": "74cacc40-b5b7-4939-949c-eaeabef1223f",
      "name": "ESP8266 Fish Feeder Control",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2128,
        304
      ],
      "parameters": {
        "url": "={{ $('Config').item(0).json.esp8266WebhookUrl }}",
        "method": "POST",
        "options": {
          "timeout": 10000
        },
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "command",
              "value": "={{ $json.esp8266_command }}"
            },
            {
              "name": "feed_ratio",
              "value": "={{ $json.feed_ratio }}"
            },
            {
              "name": "rain_prob",
              "value": "={{ $('Parse & Score Weather (6-12h)').item(0).json.rain_prob }}"
            },
            {
              "name": "timestamp",
              "value": "={{ new Date().toISOString() }}"
            },
            {
              "name": "location",
              "value": "={{ $('Config').item(0).json.locationName }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "User-Agent",
              "value": "n8n-bmkg-feeder/1.0"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8cf99c87-530a-4180-b0f6-4bd53043f07e",
      "name": "Telegram: Send Report",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2352,
        304
      ],
      "webhookId": "bc9aff86-c2b7-429a-ba93-0c6bcee94c3d",
      "parameters": {
        "text": "=🐟 **{{ $('Config').item(0).json.locationName }}** - **Automatic Feeding Schedule**\n\n📅 **Time**: {{ new Date().toLocaleString('id-ID', { timeZone: 'Asia/Jakarta' }) }}\n\n🌤️ **BMKG Weather Analysis:**\n• 12-hour rain probability: **{{ $('Parse & Score Weather (6-12h)').item(0).json.rain_prob }}%**\n• 6-hour rain probability: **{{ $('Parse & Score Weather (6-12h)').item(0).json.rain_prob_max6h }}%**\n• 12-hour average: **{{ $('Parse & Score Weather (6-12h)').item(0).json.rain_prob_avg12h }}%**\n\n🎯 **Feeding Decision:**\n• Feed ratio: **{{ $json.feed_ratio }}%**\n• ESP8266 Status: {{ $('ESP8266 Fish Feeder Control').item(0).json ? '✅ Sent' : '❌ Failed' }}\n\n{{ $json.note }}\n\n---\n*Powered by BMKG API + ESP8266 + n8n*\n*Next feeding: {{ new Date(Date.now() + (new Date().getHours() < 12 ? (16 - new Date().getHours()) * 3600000 : (29 - new Date().getHours()) * 3600000)).toLocaleString('id-ID', { timeZone: 'Asia/Jakarta' }) }}*",
        "chatId": "={{ $('Config').item(0).json.telegramChatId }}",
        "additionalFields": {
          "parse_mode": "Markdown",
          "disable_notification": false
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "5UNbimarOaH1QxRo",
          "name": "Telegram account 2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8cb2be2c-6718-4d50-a896-fe472f037e22",
      "name": "Activity Logger",
      "type": "n8n-nodes-base.code",
      "position": [
        2576,
        304
      ],
      "parameters": {
        "jsCode": "// Log activity and prepare summary\nconst weatherData = $('Parse & Score Weather (6-12h)').item(0).json;\nconst feedData = $input.item(0).json;\nconst configData = $('Config').item(0).json;\nconst esp8266Response = $('ESP8266 Fish Feeder Control').item(0).json;\n\nconst logEntry = {\n  timestamp: new Date().toISOString(),\n  location: configData.locationName,\n  rain_probability: weatherData.rain_prob,\n  feed_ratio: feedData.feed_ratio,\n  action_type: feedData.action_type,\n  esp8266_status: esp8266Response ? 'success' : 'failed',\n  weather_summary: weatherData.weather_conditions?.slice(0, 2) || [],\n  bmkg_analysis_time: weatherData.analysis_time\n};\n\nreturn {\n  json: logEntry\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "901a9809-bdc3-4616-a17a-5abf5f465902",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 464,
        "height": 5312,
        "content": "# 📝 N8N WORKFLOW INSTALLATION GUIDE - AUTOMATIC FISH FEEDER\n\n## 🚀 STEP 1: INITIAL SETUP\n\n### 1️⃣ Install n8n\n```bash\n# Via NPM (Easiest method)\nnpm install -g n8n\n\n# Via Docker (Recommended for production)  \ndocker run -it --rm --name n8n -p 5678:5678 n8nio/n8n\n```\n\n### 2️⃣ Run n8n\n```bash\n# Start n8n\nn8n start\n\n# Open browser: http://localhost:5678\n```\n\n---\n\n## 🔧 STEP 2: CREDENTIALS CONFIGURATION\n\n### 📱 Setup Telegram Bot\n1. Chat with @BotFather on Telegram\n2. Type `/newbot` \n3. Follow instructions, save the TOKEN\n4. In n8n: Settings → Credentials → Add → Telegram\n5. Enter Bot Token\n\n### 🌤️ Setup BMKG API (Optional)\n- BMKG API is usually free without API key\n- If key required, register at portal.bmkg.go.id\n\n---\n\n## 📥 STEP 3: IMPORT WORKFLOW\n\n### Method 1: Import JSON\n1. Copy entire workflow JSON \n2. In n8n: Menu → Import from File\n3. Paste JSON → Import\n\n### Method 2: Via File Upload\n1. Save JSON as .json file\n2. Drag & drop to n8n workspace\n3. Click Import\n\n---\n\n## ⚙️ STEP 4: WORKFLOW CONFIGURATION\n\n### 🏠 Edit \"Config\" Node\n```\nlocationName: \"Main Pond\" (change according to your pond)\nlat: \"-6.2000\" (latitude coordinates of location)\nlon: \"106.8166\" (longitude coordinates of location)\nadm4: \"31.71.03.1001\" (BMKG area code)\nthresholdProb: \"60\" (rain threshold %, default 60%)\nreducePercent: \"-20\" (feed reduction %, default -20%)\n```\n\n### 📱 Setup Telegram Node\n1. Click \"Telegram: Send Report\" node\n2. Select the credential you created\n3. Fill Chat ID:\n   - Forward message to @userinfobot\n   - Copy the Chat ID that appears\n\n### 🔗 Setup ESP8266 Webhook\n1. Edit esp8266WebhookUrl in Config node\n2. Format: `http://ESP8266_IP/webhook` \n3. Example: `http://192.168.1.100/webhook`\n\n---\n\n## 📡 STEP 5: ESP8266 CONFIGURATION\n\n### Arduino Code Setup\n```cpp\n// Add to ESP8266 Arduino code\n#include <ESP8266WebServer.h>\nESP8266WebServer server(80);\n\nvoid setup() {\n  // Setup WiFi connection\n  // Setup servo, LCD, sensors\n  // Setup webhook endpoint\n  server.on(\"/webhook\", HTTP_POST, handleWebhook);\n  server.begin();\n}\n\nvoid handleWebhook() {\n  String command = server.arg(\"command\");\n  if(command == \"FEED_NORMAL\") {\n    // Normal feed 100%\n    feedFish(100);\n  }\n  else if(command == \"FEED_REDUCE_20\") {\n    // Feed reduced by 20%\n    feedFish(80);  \n  }\n  server.send(200, \"application/json\", \"{\\\"status\\\":\\\"ok\\\"}\");\n}\n```\n\nOr check here: https://github.com/TegarDev9/fish-feed-esp8266.git\n\n---\n\n## ⏰ STEP 6: SET AUTOMATIC SCHEDULE\n\n### Configure Cron Node\n1. Click \"Cron: 05:30 & 16:30 WIB\" node\n2. Set timezone: \"Asia/Jakarta\"\n3. Set time: 05:30 and 16:30 (or as desired)\n\n---\n\n## ✅ STEP 7: TESTING & ACTIVATION\n\n### 🧪 Manual Test\n1. Click first node (Cron)\n2. Select \"Execute Node\" \n3. View results in each node\n4. Make sure there are no red errors\n\n### 🔍 Check Connections\n- ✅ BMKG API response OK\n- ✅ ESP8266 webhook response 200\n- ✅ Telegram message sent\n\n### 🚀 Activate Workflow\n1. Click \"Active\" toggle at top right\n2. Workflow will run automatically on schedule\n\n---\n\n## 🛠️ COMMON TROUBLESHOOTING\n\n### ❌ Error \"Node not found\"\n**Solution:** Update n8n to latest version\n```bash\nnpm update -g n8n\n```\n\n### ❌ Telegram error \"Unauthorized\"\n**Solution:** \n- Check Bot Token is correct\n- Ensure Chat ID is valid\n- Bot already started with /start\n\n### ❌ ESP8266 not responding\n**Solution:**\n- Check ESP8266 IP address\n- Ensure ESP8266 and n8n are on same network  \n- Manual test: `curl -X POST http://IP/webhook`\n\n### ❌ BMKG API timeout\n**Solution:**\n- Check internet connection\n- Change timeout from 30000 to 60000ms\n- Use valid ADM4\n\n---\n\n## 📊 MONITORING & LOGS\n\n### 📈 View Execution History\n1. Menu → Executions\n2. View status of each run\n3. Click for error details\n\n### 📱 Telegram Notifications  \nAutomatic message format:\n```\n🐟 Main Pond - Automatic Feed Schedule\n📅 Time: 17/09/2025 17:30:00\n🌤️ BMKG Weather Analysis:\n• Rain prob. 12 hours: 45%\n🎯 Feed Decision:\n• Feed ratio: 100%\n• ESP8266 Status: ✅ Sent\n```\n\n---\n\n## 🔄 UPDATE & MAINTENANCE\n\n### Update Workflow\n1. Export old workflow (backup)\n2. Import new workflow \n3. Copy old credentials\n4. Test before activation\n\n### Backup Credentials\n1. Settings → Export\n2. Save backup file\n3. Include credentials: YES\n\n---\n\n## 📞 TECHNICAL SUPPORT\n\n### Log Error Checking\n```bash\n# Check n8n logs\ndocker logs n8n\n\n# Or if installed via npm\n~/.n8n/logs/n8n.log\n```\n\n### Performance Tips\n- Use Docker for stability\n- Set sufficient memory limit\n- Monitor disk space for logs"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b4a60651-e4ef-4bfd-813c-919f7a46d219",
  "connections": {
    "c024b1c2-5fc5-42f8-9f41-5de6c9a39a82": {
      "main": [
        [
          {
            "node": "e72ef26d-d37a-4d33-a485-cbbb2352554a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Branches": {
      "main": [
        [
          {
            "node": "74cacc40-b5b7-4939-949c-eaeabef1223f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e72ef26d-d37a-4d33-a485-cbbb2352554a": {
      "main": [
        [
          {
            "node": "1e132997-bd59-4dce-b2c8-4b60d92aa1ea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1e132997-bd59-4dce-b2c8-4b60d92aa1ea": {
      "main": [
        [
          {
            "node": "f37bd636-4f38-4300-8909-f16cd91f7423",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set: Normal Feed 0%": {
      "main": [
        [
          {
            "node": "Merge Branches",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Set: Reduce Feed 20%": {
      "main": [
        [
          {
            "node": "Merge Branches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8cf99c87-530a-4180-b0f6-4bd53043f07e": {
      "main": [
        [
          {
            "node": "8cb2be2c-6718-4d50-a896-fe472f037e22",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cron: 05:30 & 16:30 WIB": {
      "main": [
        [
          {
            "node": "c024b1c2-5fc5-42f8-9f41-5de6c9a39a82",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF: High Rain Probability": {
      "main": [
        [
          {
            "node": "Set: Reduce Feed 20%",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set: Normal Feed 0%",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "74cacc40-b5b7-4939-949c-eaeabef1223f": {
      "main": [
        [
          {
            "node": "8cf99c87-530a-4180-b0f6-4bd53043f07e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f37bd636-4f38-4300-8909-f16cd91f7423": {
      "main": [
        [
          {
            "node": "IF: High Rain Probability",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

中級 - エンジニアリング, マルチモーダルAI

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
中級
ノード数13
カテゴリー2
ノードタイプ8
難易度説明

経験者向け、6-15ノードの中程度の複雑さのワークフロー

作成者
Tegar karunia ilham

Tegar karunia ilham

@tegarkaruniailham

Helping business owners & marketers automate their processes with n8n. Specialist in custom workflows, API integrations, and template development. 📈 100+ successful automation projects 🔧 Premium n8n templates available 💡 Free consultation for custom automation Book a consultation for your business digital transformation!"

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34