[{"data":1,"prerenderedAt":1773},["ShallowReactive",2],{"blog-en-/en/blog/industrial-iot-automation-with-n8n":3},{"id":4,"title":5,"body":6,"description":1757,"extension":1758,"meta":1759,"navigation":246,"path":1769,"seo":1770,"stem":1771,"__hash__":1772},"en_blog/en/blog/industrial-iot-automation-with-n8n.md","Industrial IoT Automation with n8n: No-Code Workflow Integration",{"type":7,"value":8,"toc":1714},"minimark",[9,14,31,45,49,54,59,92,96,194,198,209,213,217,424,428,463,467,471,474,478,483,520,525,531,535,648,652,725,729,806,810,813,816,820,826,830,933,937,1000,1004,1075,1079,1082,1085,1088,1094,1098,1156,1161,1245,1249,1339,1343,1410,1414,1418,1541,1545,1549,1603,1607,1612,1632,1636,1645,1667,1681,1685,1710],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17,18,22,23,26,27,30],"p",{},"In industrial facilities, managing data from dozens of sensors can become complex. Alerting, reporting, ERP system integration – all require separate development effort. ",[19,20,21],"strong",{},"n8n",", an open-source ",[19,24,25],{},"workflow automation"," platform, simplifies these processes with a visual ",[19,28,29],{},"no-code"," interface.",[15,32,33,34,39,40,44],{},"In this article, we examine how to automate data flows from our ",[35,36,38],"a",{"href":37},"/en/products/zma-data-acquisition","ZMA Data Acquisition"," and ",[35,41,43],{"href":42},"/en/products/gdt-digital-transmitter","GDT Digital Transmitter"," devices using n8n, without writing code.",[10,46,48],{"id":47},"what-is-n8n","What is n8n?",[15,50,51,53],{},[19,52,21],{}," (nodemation) is an automation platform that connects applications and services. The open-source alternative to Zapier/Make.",[55,56,58],"h3",{"id":57},"key-features","Key Features",[15,60,61,62,65,66,69,70,73,74,69,76,79,80,69,82,85,86,69,88,91],{},"✅ ",[19,63,64],{},"Open Source:"," Self-hosted, full control",[67,68],"br",{},"\n✅ ",[19,71,72],{},"Visual Interface:"," Workflow design with drag & drop",[67,75],{},[19,77,78],{},"300+ Integrations:"," MQTT, HTTP, Email, Slack, SAP, databases",[67,81],{},[19,83,84],{},"Code Support:"," JavaScript when needed",[67,87],{},[19,89,90],{},"Low Latency:"," Real-time triggers",[55,93,95],{"id":94},"n8n-vs-alternatives","n8n vs Alternatives",[97,98,99,117],"table",{},[100,101,102],"thead",{},[103,104,105,109,111,114],"tr",{},[106,107,108],"th",{},"Feature",[106,110,21],{},[106,112,113],{},"Zapier",[106,115,116],{},"Make (Integromat)",[118,119,120,136,149,164,178],"tbody",{},[103,121,122,128,131,134],{},[123,124,125],"td",{},[19,126,127],{},"Open Source",[123,129,130],{},"✅ Yes",[123,132,133],{},"❌ No",[123,135,133],{},[103,137,138,143,145,147],{},[123,139,140],{},[19,141,142],{},"Self-Hosted",[123,144,130],{},[123,146,133],{},[123,148,133],{},[103,150,151,156,159,161],{},[123,152,153],{},[19,154,155],{},"MQTT Support",[123,157,158],{},"✅ Native",[123,160,133],{},[123,162,163],{},"⚠️ Limited",[103,165,166,171,173,176],{},[123,167,168],{},[19,169,170],{},"Unlimited Workflows",[123,172,130],{},[123,174,175],{},"❌ Paid plans",[123,177,175],{},[103,179,180,185,188,191],{},[123,181,182],{},[19,183,184],{},"Cost (1000 ops/month)",[123,186,187],{},"Free",[123,189,190],{},"$19.99",[123,192,193],{},"$9.00",[10,195,197],{"id":196},"system-architecture","System Architecture",[199,200,205],"pre",{"className":201,"code":203,"language":204},[202],"language-text","┌───────────────────────────────────────────────────┐\n│                Factory Network                    │\n│                                                   │\n│  ┌─────────┐      MQTT       ┌──────────────┐   │\n│  │ ZMA/GDT │─────────────────►│              │   │\n│  │ Devices │                  │  MQTT Broker │   │\n│  └─────────┘                  │  (Mosquitto) │   │\n│                               └──────┬───────┘   │\n│                                      │            │\n│                               ┌──────▼───────┐   │\n│                               │     n8n      │   │\n│                               │  Automation  │   │\n│                               │   Server     │   │\n│                               └──┬─────┬─────┘   │\n└──────────────────────────────────┼─────┼─────────┘\n                                   │     │\n                    ┌──────────────┘     └─────────────┐\n                    │                                  │\n            ┌───────▼────────┐              ┌──────────▼────────┐\n            │  Email / Slack │              │   ERP / Database  │\n            │  Notifications │              │   (SAP, REST API) │\n            └────────────────┘              └───────────────────┘\n","text",[206,207,203],"code",{"__ignoreMap":208},"",[10,210,212],{"id":211},"n8n-installation-docker","n8n Installation (Docker)",[55,214,216],{"id":215},"docker-composeyml","docker-compose.yml",[199,218,222],{"className":219,"code":220,"language":221,"meta":208,"style":208},"language-yaml shiki shiki-themes github-light github-dark","version: '3.8'\n\nservices:\n  n8n:\n    image: n8nio/n8n:latest\n    container_name: n8n\n    restart: always\n    ports:\n      - '5678:5678'\n    environment:\n      - N8N_BASIC_AUTH_ACTIVE=true\n      - N8N_BASIC_AUTH_USER=admin\n      - N8N_BASIC_AUTH_PASSWORD=secure_password_123\n      - N8N_HOST=n8n.factory.local\n      - WEBHOOK_URL=http://n8n.factory.local:5678\n      - N8N_PROTOCOL=http\n      - NODE_ENV=production\n    volumes:\n      - n8n_data:/home/node/.n8n\n      - /var/run/docker.sock:/var/run/docker.sock\n\nvolumes:\n  n8n_data:\n","yaml",[206,223,224,241,248,257,265,276,287,298,306,315,323,331,339,347,355,363,371,379,387,395,403,408,416],{"__ignoreMap":208},[225,226,229,233,237],"span",{"class":227,"line":228},"line",1,[225,230,232],{"class":231},"s9eBZ","version",[225,234,236],{"class":235},"sVt8B",": ",[225,238,240],{"class":239},"sZZnC","'3.8'\n",[225,242,244],{"class":227,"line":243},2,[225,245,247],{"emptyLinePlaceholder":246},true,"\n",[225,249,251,254],{"class":227,"line":250},3,[225,252,253],{"class":231},"services",[225,255,256],{"class":235},":\n",[225,258,260,263],{"class":227,"line":259},4,[225,261,262],{"class":231},"  n8n",[225,264,256],{"class":235},[225,266,268,271,273],{"class":227,"line":267},5,[225,269,270],{"class":231},"    image",[225,272,236],{"class":235},[225,274,275],{"class":239},"n8nio/n8n:latest\n",[225,277,279,282,284],{"class":227,"line":278},6,[225,280,281],{"class":231},"    container_name",[225,283,236],{"class":235},[225,285,286],{"class":239},"n8n\n",[225,288,290,293,295],{"class":227,"line":289},7,[225,291,292],{"class":231},"    restart",[225,294,236],{"class":235},[225,296,297],{"class":239},"always\n",[225,299,301,304],{"class":227,"line":300},8,[225,302,303],{"class":231},"    ports",[225,305,256],{"class":235},[225,307,309,312],{"class":227,"line":308},9,[225,310,311],{"class":235},"      - ",[225,313,314],{"class":239},"'5678:5678'\n",[225,316,318,321],{"class":227,"line":317},10,[225,319,320],{"class":231},"    environment",[225,322,256],{"class":235},[225,324,326,328],{"class":227,"line":325},11,[225,327,311],{"class":235},[225,329,330],{"class":239},"N8N_BASIC_AUTH_ACTIVE=true\n",[225,332,334,336],{"class":227,"line":333},12,[225,335,311],{"class":235},[225,337,338],{"class":239},"N8N_BASIC_AUTH_USER=admin\n",[225,340,342,344],{"class":227,"line":341},13,[225,343,311],{"class":235},[225,345,346],{"class":239},"N8N_BASIC_AUTH_PASSWORD=secure_password_123\n",[225,348,350,352],{"class":227,"line":349},14,[225,351,311],{"class":235},[225,353,354],{"class":239},"N8N_HOST=n8n.factory.local\n",[225,356,358,360],{"class":227,"line":357},15,[225,359,311],{"class":235},[225,361,362],{"class":239},"WEBHOOK_URL=http://n8n.factory.local:5678\n",[225,364,366,368],{"class":227,"line":365},16,[225,367,311],{"class":235},[225,369,370],{"class":239},"N8N_PROTOCOL=http\n",[225,372,374,376],{"class":227,"line":373},17,[225,375,311],{"class":235},[225,377,378],{"class":239},"NODE_ENV=production\n",[225,380,382,385],{"class":227,"line":381},18,[225,383,384],{"class":231},"    volumes",[225,386,256],{"class":235},[225,388,390,392],{"class":227,"line":389},19,[225,391,311],{"class":235},[225,393,394],{"class":239},"n8n_data:/home/node/.n8n\n",[225,396,398,400],{"class":227,"line":397},20,[225,399,311],{"class":235},[225,401,402],{"class":239},"/var/run/docker.sock:/var/run/docker.sock\n",[225,404,406],{"class":227,"line":405},21,[225,407,247],{"emptyLinePlaceholder":246},[225,409,411,414],{"class":227,"line":410},22,[225,412,413],{"class":231},"volumes",[225,415,256],{"class":235},[225,417,419,422],{"class":227,"line":418},23,[225,420,421],{"class":231},"  n8n_data",[225,423,256],{"class":235},[55,425,427],{"id":426},"start-services","Start Services",[199,429,433],{"className":430,"code":431,"language":432,"meta":208,"style":208},"language-bash shiki shiki-themes github-light github-dark","docker-compose up -d\n\n# Access web interface\n# http://localhost:5678\n","bash",[206,434,435,448,452,458],{"__ignoreMap":208},[225,436,437,441,444],{"class":227,"line":228},[225,438,440],{"class":439},"sScJk","docker-compose",[225,442,443],{"class":239}," up",[225,445,447],{"class":446},"sj4cs"," -d\n",[225,449,450],{"class":227,"line":243},[225,451,247],{"emptyLinePlaceholder":246},[225,453,454],{"class":227,"line":250},[225,455,457],{"class":456},"sJ8bj","# Access web interface\n",[225,459,460],{"class":227,"line":259},[225,461,462],{"class":456},"# http://localhost:5678\n",[10,464,466],{"id":465},"workflow-1-tank-weight-alert-system","Workflow 1: Tank Weight Alert System",[55,468,470],{"id":469},"scenario","Scenario",[15,472,473],{},"Send email and Slack notification when milk tank weight exceeds 90% capacity.",[55,475,477],{"id":476},"n8n-workflow-configuration","n8n Workflow Configuration",[15,479,480],{},[19,481,482],{},"Nodes:",[484,485,486,496,502,508,514],"ol",{},[487,488,489,492,493],"li",{},[19,490,491],{},"MQTT Trigger"," → Listen to topic ",[206,494,495],{},"factory/tank/+/weight",[487,497,498,501],{},[19,499,500],{},"Function"," → Calculate fill percentage",[487,503,504,507],{},[19,505,506],{},"IF"," → Check if >90%",[487,509,510,513],{},[19,511,512],{},"Email"," → Send warning email",[487,515,516,519],{},[19,517,518],{},"Slack"," → Post to #production channel",[15,521,522],{},[19,523,524],{},"Visual Workflow:",[199,526,529],{"className":527,"code":528,"language":204},[202],"┌──────────────┐\n│ MQTT Trigger │\n│ Topic:       │\n│ factory/tank │\n│    /+/weight │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│   Function   │\n│ Calculate %  │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│      IF      │\n│ weight > 90% │\n└──┬───────┬───┘\n   │       │\n   │ YES   │ NO\n   │       └──► (End)\n   ▼\n┌──────────────┐\n│    Email     │\n│   To: ops@   │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│    Slack     │\n│ #production  │\n└──────────────┘\n",[206,530,528],{"__ignoreMap":208},[55,532,534],{"id":533},"mqtt-trigger-node-configuration","MQTT Trigger Node Configuration",[199,536,540],{"className":537,"code":538,"language":539,"meta":208,"style":208},"language-json shiki shiki-themes github-light github-dark","{\n  \"protocol\": \"mqtt\",\n  \"host\": \"192.168.1.10\",\n  \"port\": 1883,\n  \"topics\": \"factory/tank/+/weight\",\n  \"qos\": 1,\n  \"credentials\": {\n    \"username\": \"mqtt_user\",\n    \"password\": \"mqtt_password\"\n  }\n}\n","json",[206,541,542,547,560,572,584,596,608,616,628,638,643],{"__ignoreMap":208},[225,543,544],{"class":227,"line":228},[225,545,546],{"class":235},"{\n",[225,548,549,552,554,557],{"class":227,"line":243},[225,550,551],{"class":446},"  \"protocol\"",[225,553,236],{"class":235},[225,555,556],{"class":239},"\"mqtt\"",[225,558,559],{"class":235},",\n",[225,561,562,565,567,570],{"class":227,"line":250},[225,563,564],{"class":446},"  \"host\"",[225,566,236],{"class":235},[225,568,569],{"class":239},"\"192.168.1.10\"",[225,571,559],{"class":235},[225,573,574,577,579,582],{"class":227,"line":259},[225,575,576],{"class":446},"  \"port\"",[225,578,236],{"class":235},[225,580,581],{"class":446},"1883",[225,583,559],{"class":235},[225,585,586,589,591,594],{"class":227,"line":267},[225,587,588],{"class":446},"  \"topics\"",[225,590,236],{"class":235},[225,592,593],{"class":239},"\"factory/tank/+/weight\"",[225,595,559],{"class":235},[225,597,598,601,603,606],{"class":227,"line":278},[225,599,600],{"class":446},"  \"qos\"",[225,602,236],{"class":235},[225,604,605],{"class":446},"1",[225,607,559],{"class":235},[225,609,610,613],{"class":227,"line":289},[225,611,612],{"class":446},"  \"credentials\"",[225,614,615],{"class":235},": {\n",[225,617,618,621,623,626],{"class":227,"line":300},[225,619,620],{"class":446},"    \"username\"",[225,622,236],{"class":235},[225,624,625],{"class":239},"\"mqtt_user\"",[225,627,559],{"class":235},[225,629,630,633,635],{"class":227,"line":308},[225,631,632],{"class":446},"    \"password\"",[225,634,236],{"class":235},[225,636,637],{"class":239},"\"mqtt_password\"\n",[225,639,640],{"class":227,"line":317},[225,641,642],{"class":235},"  }\n",[225,644,645],{"class":227,"line":325},[225,646,647],{"class":235},"}\n",[55,649,651],{"id":650},"function-node-calculate-fill","Function Node (Calculate Fill %)",[199,653,657],{"className":654,"code":655,"language":656,"meta":208,"style":208},"language-javascript shiki shiki-themes github-light github-dark","// Received MQTT message structure:\n// { \"tank_id\": 1, \"weight\": 4520.5, \"capacity\": 5000 }\n\nconst tankData = items[0].json\n\nconst fillPercent = (tankData.weight / tankData.capacity) * 100\n\nreturn {\n  json: {\n    ...tankData,\n    fill_percent: fillPercent,\n    alert_level: fillPercent > 90 ? 'HIGH' : 'NORMAL',\n  },\n}\n","javascript",[206,658,659,664,669,673,678,682,687,691,696,701,706,711,716,721],{"__ignoreMap":208},[225,660,661],{"class":227,"line":228},[225,662,663],{},"// Received MQTT message structure:\n",[225,665,666],{"class":227,"line":243},[225,667,668],{},"// { \"tank_id\": 1, \"weight\": 4520.5, \"capacity\": 5000 }\n",[225,670,671],{"class":227,"line":250},[225,672,247],{"emptyLinePlaceholder":246},[225,674,675],{"class":227,"line":259},[225,676,677],{},"const tankData = items[0].json\n",[225,679,680],{"class":227,"line":267},[225,681,247],{"emptyLinePlaceholder":246},[225,683,684],{"class":227,"line":278},[225,685,686],{},"const fillPercent = (tankData.weight / tankData.capacity) * 100\n",[225,688,689],{"class":227,"line":289},[225,690,247],{"emptyLinePlaceholder":246},[225,692,693],{"class":227,"line":300},[225,694,695],{},"return {\n",[225,697,698],{"class":227,"line":308},[225,699,700],{},"  json: {\n",[225,702,703],{"class":227,"line":317},[225,704,705],{},"    ...tankData,\n",[225,707,708],{"class":227,"line":325},[225,709,710],{},"    fill_percent: fillPercent,\n",[225,712,713],{"class":227,"line":333},[225,714,715],{},"    alert_level: fillPercent > 90 ? 'HIGH' : 'NORMAL',\n",[225,717,718],{"class":227,"line":341},[225,719,720],{},"  },\n",[225,722,723],{"class":227,"line":349},[225,724,647],{},[55,726,728],{"id":727},"email-node-configuration","Email Node Configuration",[199,730,732],{"className":537,"code":731,"language":539,"meta":208,"style":208},"{\n  \"fromEmail\": \"alerts@factory.com\",\n  \"toEmail\": \"operations@factory.com\",\n  \"subject\": \"⚠️ Tank {{$json.tank_id}} Capacity Alert\",\n  \"text\": \"Tank {{$json.tank_id}} is {{$json.fill_percent}}% full ({{$json.weight}} kg / {{$json.capacity}} kg).\\n\\nAction required: Prepare for milk collection.\",\n  \"html\": \"\u003Ch2>Tank Capacity Alert\u003C/h2>\u003Cp>Tank \u003Cstrong>{{$json.tank_id}}\u003C/strong>\u003C/p>\u003Cp>Fill Level: \u003Cstrong style='color:red'>{{$json.fill_percent}}%\u003C/strong>\u003C/p>\"\n}\n",[206,733,734,738,750,762,774,792,802],{"__ignoreMap":208},[225,735,736],{"class":227,"line":228},[225,737,546],{"class":235},[225,739,740,743,745,748],{"class":227,"line":243},[225,741,742],{"class":446},"  \"fromEmail\"",[225,744,236],{"class":235},[225,746,747],{"class":239},"\"alerts@factory.com\"",[225,749,559],{"class":235},[225,751,752,755,757,760],{"class":227,"line":250},[225,753,754],{"class":446},"  \"toEmail\"",[225,756,236],{"class":235},[225,758,759],{"class":239},"\"operations@factory.com\"",[225,761,559],{"class":235},[225,763,764,767,769,772],{"class":227,"line":259},[225,765,766],{"class":446},"  \"subject\"",[225,768,236],{"class":235},[225,770,771],{"class":239},"\"⚠️ Tank {{$json.tank_id}} Capacity Alert\"",[225,773,559],{"class":235},[225,775,776,779,781,784,787,790],{"class":227,"line":267},[225,777,778],{"class":446},"  \"text\"",[225,780,236],{"class":235},[225,782,783],{"class":239},"\"Tank {{$json.tank_id}} is {{$json.fill_percent}}% full ({{$json.weight}} kg / {{$json.capacity}} kg).",[225,785,786],{"class":446},"\\n\\n",[225,788,789],{"class":239},"Action required: Prepare for milk collection.\"",[225,791,559],{"class":235},[225,793,794,797,799],{"class":227,"line":278},[225,795,796],{"class":446},"  \"html\"",[225,798,236],{"class":235},[225,800,801],{"class":239},"\"\u003Ch2>Tank Capacity Alert\u003C/h2>\u003Cp>Tank \u003Cstrong>{{$json.tank_id}}\u003C/strong>\u003C/p>\u003Cp>Fill Level: \u003Cstrong style='color:red'>{{$json.fill_percent}}%\u003C/strong>\u003C/p>\"\n",[225,803,804],{"class":227,"line":289},[225,805,647],{"class":235},[10,807,809],{"id":808},"workflow-2-daily-production-report","Workflow 2: Daily Production Report",[55,811,470],{"id":812},"scenario-1",[15,814,815],{},"Generate Excel report with yesterday's all tank data and email every morning at 08:00.",[55,817,819],{"id":818},"workflow","Workflow",[199,821,824],{"className":822,"code":823,"language":204},[202],"┌──────────────┐\n│   Schedule   │\n│ Cron: 0 8 ** │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│   HTTP Req   │\n│ GET /api/    │\n│ tank_data    │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│ Function     │\n│ Format data  │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│ Spreadsheet  │\n│ Create Excel │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│    Email     │\n│ + Attachment │\n└──────────────┘\n",[206,825,823],{"__ignoreMap":208},[55,827,829],{"id":828},"http-request-node-get-data","HTTP Request Node (Get Data)",[199,831,833],{"className":537,"code":832,"language":539,"meta":208,"style":208},"{\n  \"method\": \"GET\",\n  \"url\": \"http://api.factory.local/v1/tank_data\",\n  \"qs\": {\n    \"date\": \"{{$now.minus({days: 1}).toFormat('yyyy-MM-dd')}}\",\n    \"format\": \"json\"\n  },\n  \"authentication\": \"headerAuth\",\n  \"headers\": {\n    \"Authorization\": \"Bearer {{$credentials.apiToken}}\"\n  }\n}\n",[206,834,835,839,851,863,870,882,892,896,908,915,925,929],{"__ignoreMap":208},[225,836,837],{"class":227,"line":228},[225,838,546],{"class":235},[225,840,841,844,846,849],{"class":227,"line":243},[225,842,843],{"class":446},"  \"method\"",[225,845,236],{"class":235},[225,847,848],{"class":239},"\"GET\"",[225,850,559],{"class":235},[225,852,853,856,858,861],{"class":227,"line":250},[225,854,855],{"class":446},"  \"url\"",[225,857,236],{"class":235},[225,859,860],{"class":239},"\"http://api.factory.local/v1/tank_data\"",[225,862,559],{"class":235},[225,864,865,868],{"class":227,"line":259},[225,866,867],{"class":446},"  \"qs\"",[225,869,615],{"class":235},[225,871,872,875,877,880],{"class":227,"line":267},[225,873,874],{"class":446},"    \"date\"",[225,876,236],{"class":235},[225,878,879],{"class":239},"\"{{$now.minus({days: 1}).toFormat('yyyy-MM-dd')}}\"",[225,881,559],{"class":235},[225,883,884,887,889],{"class":227,"line":278},[225,885,886],{"class":446},"    \"format\"",[225,888,236],{"class":235},[225,890,891],{"class":239},"\"json\"\n",[225,893,894],{"class":227,"line":289},[225,895,720],{"class":235},[225,897,898,901,903,906],{"class":227,"line":300},[225,899,900],{"class":446},"  \"authentication\"",[225,902,236],{"class":235},[225,904,905],{"class":239},"\"headerAuth\"",[225,907,559],{"class":235},[225,909,910,913],{"class":227,"line":308},[225,911,912],{"class":446},"  \"headers\"",[225,914,615],{"class":235},[225,916,917,920,922],{"class":227,"line":317},[225,918,919],{"class":446},"    \"Authorization\"",[225,921,236],{"class":235},[225,923,924],{"class":239},"\"Bearer {{$credentials.apiToken}}\"\n",[225,926,927],{"class":227,"line":325},[225,928,642],{"class":235},[225,930,931],{"class":227,"line":333},[225,932,647],{"class":235},[55,934,936],{"id":935},"function-node-format-for-excel","Function Node (Format for Excel)",[199,938,940],{"className":654,"code":939,"language":656,"meta":208,"style":208},"// Transform API response to Excel-friendly format\nconst rawData = items[0].json.data\n\nconst formattedData = rawData.map(record => ({\n  'Tank ID': record.tank_id,\n  Timestamp: record.timestamp,\n  'Weight (kg)': record.weight,\n  'Fill %': Math.round(record.fill_percent),\n  Status: record.status,\n}))\n\nreturn formattedData.map(row => ({ json: row }))\n",[206,941,942,947,952,956,961,966,971,976,981,986,991,995],{"__ignoreMap":208},[225,943,944],{"class":227,"line":228},[225,945,946],{},"// Transform API response to Excel-friendly format\n",[225,948,949],{"class":227,"line":243},[225,950,951],{},"const rawData = items[0].json.data\n",[225,953,954],{"class":227,"line":250},[225,955,247],{"emptyLinePlaceholder":246},[225,957,958],{"class":227,"line":259},[225,959,960],{},"const formattedData = rawData.map(record => ({\n",[225,962,963],{"class":227,"line":267},[225,964,965],{},"  'Tank ID': record.tank_id,\n",[225,967,968],{"class":227,"line":278},[225,969,970],{},"  Timestamp: record.timestamp,\n",[225,972,973],{"class":227,"line":289},[225,974,975],{},"  'Weight (kg)': record.weight,\n",[225,977,978],{"class":227,"line":300},[225,979,980],{},"  'Fill %': Math.round(record.fill_percent),\n",[225,982,983],{"class":227,"line":308},[225,984,985],{},"  Status: record.status,\n",[225,987,988],{"class":227,"line":317},[225,989,990],{},"}))\n",[225,992,993],{"class":227,"line":325},[225,994,247],{"emptyLinePlaceholder":246},[225,996,997],{"class":227,"line":333},[225,998,999],{},"return formattedData.map(row => ({ json: row }))\n",[55,1001,1003],{"id":1002},"spreadsheet-node-configuration","Spreadsheet Node Configuration",[199,1005,1007],{"className":537,"code":1006,"language":539,"meta":208,"style":208},"{\n  \"operation\": \"toFile\",\n  \"fileFormat\": \"xlsx\",\n  \"fileName\": \"Daily_Production_Report_{{$now.toFormat('yyyy-MM-dd')}}.xlsx\",\n  \"sheetName\": \"Tank Data\",\n  \"headerRow\": true\n}\n",[206,1008,1009,1013,1025,1037,1049,1061,1071],{"__ignoreMap":208},[225,1010,1011],{"class":227,"line":228},[225,1012,546],{"class":235},[225,1014,1015,1018,1020,1023],{"class":227,"line":243},[225,1016,1017],{"class":446},"  \"operation\"",[225,1019,236],{"class":235},[225,1021,1022],{"class":239},"\"toFile\"",[225,1024,559],{"class":235},[225,1026,1027,1030,1032,1035],{"class":227,"line":250},[225,1028,1029],{"class":446},"  \"fileFormat\"",[225,1031,236],{"class":235},[225,1033,1034],{"class":239},"\"xlsx\"",[225,1036,559],{"class":235},[225,1038,1039,1042,1044,1047],{"class":227,"line":259},[225,1040,1041],{"class":446},"  \"fileName\"",[225,1043,236],{"class":235},[225,1045,1046],{"class":239},"\"Daily_Production_Report_{{$now.toFormat('yyyy-MM-dd')}}.xlsx\"",[225,1048,559],{"class":235},[225,1050,1051,1054,1056,1059],{"class":227,"line":267},[225,1052,1053],{"class":446},"  \"sheetName\"",[225,1055,236],{"class":235},[225,1057,1058],{"class":239},"\"Tank Data\"",[225,1060,559],{"class":235},[225,1062,1063,1066,1068],{"class":227,"line":278},[225,1064,1065],{"class":446},"  \"headerRow\"",[225,1067,236],{"class":235},[225,1069,1070],{"class":446},"true\n",[225,1072,1073],{"class":227,"line":289},[225,1074,647],{"class":235},[10,1076,1078],{"id":1077},"workflow-3-erp-system-integration","Workflow 3: ERP System Integration",[55,1080,470],{"id":1081},"scenario-2",[15,1083,1084],{},"When GDT weighing is complete, automatically create production record in SAP ERP system.",[55,1086,819],{"id":1087},"workflow-1",[199,1089,1092],{"className":1090,"code":1091,"language":204},[202],"┌──────────────┐\n│    Webhook   │\n│ /weighing-   │\n│  complete    │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│   Function   │\n│ Map to SAP   │\n│   format     │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│  HTTP Req    │\n│ POST SAP API │\n│ /production  │\n└──────┬───────┘\n       │\n       ▼\n┌──────────────┐\n│      IF      │\n│   Success?   │\n└──┬───────┬───┘\n   │       │\n  YES      NO\n   │       │\n   ▼       ▼\n┌─────┐ ┌─────┐\n│ OK  │ │Error│\n│ Log │ │Retry│\n└─────┘ └─────┘\n",[206,1093,1091],{"__ignoreMap":208},[55,1095,1097],{"id":1096},"webhook-trigger","Webhook Trigger",[199,1099,1101],{"className":537,"code":1100,"language":539,"meta":208,"style":208},"{\n  \"path\": \"weighing-complete\",\n  \"httpMethod\": \"POST\",\n  \"responseMode\": \"lastNode\",\n  \"authentication\": \"headerAuth\"\n}\n",[206,1102,1103,1107,1119,1131,1143,1152],{"__ignoreMap":208},[225,1104,1105],{"class":227,"line":228},[225,1106,546],{"class":235},[225,1108,1109,1112,1114,1117],{"class":227,"line":243},[225,1110,1111],{"class":446},"  \"path\"",[225,1113,236],{"class":235},[225,1115,1116],{"class":239},"\"weighing-complete\"",[225,1118,559],{"class":235},[225,1120,1121,1124,1126,1129],{"class":227,"line":250},[225,1122,1123],{"class":446},"  \"httpMethod\"",[225,1125,236],{"class":235},[225,1127,1128],{"class":239},"\"POST\"",[225,1130,559],{"class":235},[225,1132,1133,1136,1138,1141],{"class":227,"line":259},[225,1134,1135],{"class":446},"  \"responseMode\"",[225,1137,236],{"class":235},[225,1139,1140],{"class":239},"\"lastNode\"",[225,1142,559],{"class":235},[225,1144,1145,1147,1149],{"class":227,"line":267},[225,1146,900],{"class":446},[225,1148,236],{"class":235},[225,1150,1151],{"class":239},"\"headerAuth\"\n",[225,1153,1154],{"class":227,"line":278},[225,1155,647],{"class":235},[15,1157,1158],{},[19,1159,1160],{},"Example webhook call from HMI:",[199,1162,1164],{"className":430,"code":1163,"language":432,"meta":208,"style":208},"curl -X POST http://n8n.factory.local:5678/webhook/weighing-complete \\\n  -H \"Authorization: Bearer abc123xyz\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"batch_id\": \"MILK-2025-001\",\n    \"tank_id\": 1,\n    \"gross_weight\": 4850.5,\n    \"tare_weight\": 350.0,\n    \"net_weight\": 4500.5,\n    \"timestamp\": \"2025-12-29T14:30:00Z\"\n  }'\n",[206,1165,1166,1183,1193,1202,1210,1215,1220,1225,1230,1235,1240],{"__ignoreMap":208},[225,1167,1168,1171,1174,1177,1180],{"class":227,"line":228},[225,1169,1170],{"class":439},"curl",[225,1172,1173],{"class":446}," -X",[225,1175,1176],{"class":239}," POST",[225,1178,1179],{"class":239}," http://n8n.factory.local:5678/webhook/weighing-complete",[225,1181,1182],{"class":446}," \\\n",[225,1184,1185,1188,1191],{"class":227,"line":243},[225,1186,1187],{"class":446},"  -H",[225,1189,1190],{"class":239}," \"Authorization: Bearer abc123xyz\"",[225,1192,1182],{"class":446},[225,1194,1195,1197,1200],{"class":227,"line":250},[225,1196,1187],{"class":446},[225,1198,1199],{"class":239}," \"Content-Type: application/json\"",[225,1201,1182],{"class":446},[225,1203,1204,1207],{"class":227,"line":259},[225,1205,1206],{"class":446},"  -d",[225,1208,1209],{"class":239}," '{\n",[225,1211,1212],{"class":227,"line":267},[225,1213,1214],{"class":239},"    \"batch_id\": \"MILK-2025-001\",\n",[225,1216,1217],{"class":227,"line":278},[225,1218,1219],{"class":239},"    \"tank_id\": 1,\n",[225,1221,1222],{"class":227,"line":289},[225,1223,1224],{"class":239},"    \"gross_weight\": 4850.5,\n",[225,1226,1227],{"class":227,"line":300},[225,1228,1229],{"class":239},"    \"tare_weight\": 350.0,\n",[225,1231,1232],{"class":227,"line":308},[225,1233,1234],{"class":239},"    \"net_weight\": 4500.5,\n",[225,1236,1237],{"class":227,"line":317},[225,1238,1239],{"class":239},"    \"timestamp\": \"2025-12-29T14:30:00Z\"\n",[225,1241,1242],{"class":227,"line":325},[225,1243,1244],{"class":239},"  }'\n",[55,1246,1248],{"id":1247},"function-node-sap-format-mapping","Function Node (SAP Format Mapping)",[199,1250,1252],{"className":654,"code":1251,"language":656,"meta":208,"style":208},"// Map weighing data to SAP production order format\nconst data = items[0].json\n\nreturn {\n  json: {\n    ProductionOrder: {\n      OrderNumber: data.batch_id,\n      Material: 'MILK-RAW',\n      Quantity: data.net_weight,\n      QuantityUnit: 'KG',\n      Plant: '1000',\n      WorkCenter: 'WEIGHING-01',\n      StartDate: data.timestamp,\n      EndDate: data.timestamp,\n      Status: 'COMPLETED',\n    },\n  },\n}\n",[206,1253,1254,1259,1264,1268,1272,1276,1281,1286,1291,1296,1301,1306,1311,1316,1321,1326,1331,1335],{"__ignoreMap":208},[225,1255,1256],{"class":227,"line":228},[225,1257,1258],{},"// Map weighing data to SAP production order format\n",[225,1260,1261],{"class":227,"line":243},[225,1262,1263],{},"const data = items[0].json\n",[225,1265,1266],{"class":227,"line":250},[225,1267,247],{"emptyLinePlaceholder":246},[225,1269,1270],{"class":227,"line":259},[225,1271,695],{},[225,1273,1274],{"class":227,"line":267},[225,1275,700],{},[225,1277,1278],{"class":227,"line":278},[225,1279,1280],{},"    ProductionOrder: {\n",[225,1282,1283],{"class":227,"line":289},[225,1284,1285],{},"      OrderNumber: data.batch_id,\n",[225,1287,1288],{"class":227,"line":300},[225,1289,1290],{},"      Material: 'MILK-RAW',\n",[225,1292,1293],{"class":227,"line":308},[225,1294,1295],{},"      Quantity: data.net_weight,\n",[225,1297,1298],{"class":227,"line":317},[225,1299,1300],{},"      QuantityUnit: 'KG',\n",[225,1302,1303],{"class":227,"line":325},[225,1304,1305],{},"      Plant: '1000',\n",[225,1307,1308],{"class":227,"line":333},[225,1309,1310],{},"      WorkCenter: 'WEIGHING-01',\n",[225,1312,1313],{"class":227,"line":341},[225,1314,1315],{},"      StartDate: data.timestamp,\n",[225,1317,1318],{"class":227,"line":349},[225,1319,1320],{},"      EndDate: data.timestamp,\n",[225,1322,1323],{"class":227,"line":357},[225,1324,1325],{},"      Status: 'COMPLETED',\n",[225,1327,1328],{"class":227,"line":365},[225,1329,1330],{},"    },\n",[225,1332,1333],{"class":227,"line":373},[225,1334,720],{},[225,1336,1337],{"class":227,"line":381},[225,1338,647],{},[55,1340,1342],{"id":1341},"http-request-to-sap","HTTP Request to SAP",[199,1344,1346],{"className":537,"code":1345,"language":539,"meta":208,"style":208},"{\n  \"method\": \"POST\",\n  \"url\": \"https://sap.factory.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV/A_ProductionOrder\",\n  \"authentication\": \"oAuth2\",\n  \"bodyContentType\": \"json\",\n  \"body\": \"={{$json.ProductionOrder}}\"\n}\n",[206,1347,1348,1352,1362,1373,1384,1396,1406],{"__ignoreMap":208},[225,1349,1350],{"class":227,"line":228},[225,1351,546],{"class":235},[225,1353,1354,1356,1358,1360],{"class":227,"line":243},[225,1355,843],{"class":446},[225,1357,236],{"class":235},[225,1359,1128],{"class":239},[225,1361,559],{"class":235},[225,1363,1364,1366,1368,1371],{"class":227,"line":250},[225,1365,855],{"class":446},[225,1367,236],{"class":235},[225,1369,1370],{"class":239},"\"https://sap.factory.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV/A_ProductionOrder\"",[225,1372,559],{"class":235},[225,1374,1375,1377,1379,1382],{"class":227,"line":259},[225,1376,900],{"class":446},[225,1378,236],{"class":235},[225,1380,1381],{"class":239},"\"oAuth2\"",[225,1383,559],{"class":235},[225,1385,1386,1389,1391,1394],{"class":227,"line":267},[225,1387,1388],{"class":446},"  \"bodyContentType\"",[225,1390,236],{"class":235},[225,1392,1393],{"class":239},"\"json\"",[225,1395,559],{"class":235},[225,1397,1398,1401,1403],{"class":227,"line":278},[225,1399,1400],{"class":446},"  \"body\"",[225,1402,236],{"class":235},[225,1404,1405],{"class":239},"\"={{$json.ProductionOrder}}\"\n",[225,1407,1408],{"class":227,"line":289},[225,1409,647],{"class":235},[10,1411,1413],{"id":1412},"error-handling-and-retry-logic","Error Handling and Retry Logic",[55,1415,1417],{"id":1416},"retry-on-failure","Retry on Failure",[199,1419,1421],{"className":654,"code":1420,"language":656,"meta":208,"style":208},"// Error Handler Node\nconst MAX_RETRIES = 3\nconst currentRetry = $executionId.split('-').length - 1\n\nif (currentRetry \u003C MAX_RETRIES) {\n  // Exponential backoff\n  const waitTime = Math.pow(2, currentRetry) * 1000 // 1s, 2s, 4s\n\n  return {\n    json: {\n      retry: true,\n      wait_ms: waitTime,\n      attempt: currentRetry + 1,\n    },\n  }\n} else {\n  // Max retries exceeded, send alert\n  return {\n    json: {\n      retry: false,\n      error: 'Max retries exceeded',\n      notify_admin: true,\n    },\n  }\n}\n",[206,1422,1423,1428,1433,1438,1442,1447,1452,1457,1461,1466,1471,1476,1481,1486,1490,1494,1499,1504,1508,1512,1517,1522,1527,1531,1536],{"__ignoreMap":208},[225,1424,1425],{"class":227,"line":228},[225,1426,1427],{},"// Error Handler Node\n",[225,1429,1430],{"class":227,"line":243},[225,1431,1432],{},"const MAX_RETRIES = 3\n",[225,1434,1435],{"class":227,"line":250},[225,1436,1437],{},"const currentRetry = $executionId.split('-').length - 1\n",[225,1439,1440],{"class":227,"line":259},[225,1441,247],{"emptyLinePlaceholder":246},[225,1443,1444],{"class":227,"line":267},[225,1445,1446],{},"if (currentRetry \u003C MAX_RETRIES) {\n",[225,1448,1449],{"class":227,"line":278},[225,1450,1451],{},"  // Exponential backoff\n",[225,1453,1454],{"class":227,"line":289},[225,1455,1456],{},"  const waitTime = Math.pow(2, currentRetry) * 1000 // 1s, 2s, 4s\n",[225,1458,1459],{"class":227,"line":300},[225,1460,247],{"emptyLinePlaceholder":246},[225,1462,1463],{"class":227,"line":308},[225,1464,1465],{},"  return {\n",[225,1467,1468],{"class":227,"line":317},[225,1469,1470],{},"    json: {\n",[225,1472,1473],{"class":227,"line":325},[225,1474,1475],{},"      retry: true,\n",[225,1477,1478],{"class":227,"line":333},[225,1479,1480],{},"      wait_ms: waitTime,\n",[225,1482,1483],{"class":227,"line":341},[225,1484,1485],{},"      attempt: currentRetry + 1,\n",[225,1487,1488],{"class":227,"line":349},[225,1489,1330],{},[225,1491,1492],{"class":227,"line":357},[225,1493,642],{},[225,1495,1496],{"class":227,"line":365},[225,1497,1498],{},"} else {\n",[225,1500,1501],{"class":227,"line":373},[225,1502,1503],{},"  // Max retries exceeded, send alert\n",[225,1505,1506],{"class":227,"line":381},[225,1507,1465],{},[225,1509,1510],{"class":227,"line":389},[225,1511,1470],{},[225,1513,1514],{"class":227,"line":397},[225,1515,1516],{},"      retry: false,\n",[225,1518,1519],{"class":227,"line":405},[225,1520,1521],{},"      error: 'Max retries exceeded',\n",[225,1523,1524],{"class":227,"line":410},[225,1525,1526],{},"      notify_admin: true,\n",[225,1528,1529],{"class":227,"line":418},[225,1530,1330],{},[225,1532,1534],{"class":227,"line":1533},24,[225,1535,642],{},[225,1537,1539],{"class":227,"line":1538},25,[225,1540,647],{},[10,1542,1544],{"id":1543},"performance-and-scalability","Performance and Scalability",[55,1546,1548],{"id":1547},"n8n-resource-usage","n8n Resource Usage",[97,1550,1551,1561],{},[100,1552,1553],{},[103,1554,1555,1558],{},[106,1556,1557],{},"Metric",[106,1559,1560],{},"Value",[118,1562,1563,1573,1583,1593],{},[103,1564,1565,1570],{},[123,1566,1567],{},[19,1568,1569],{},"CPU",[123,1571,1572],{},"0.5-1 core (idle)",[103,1574,1575,1580],{},[123,1576,1577],{},[19,1578,1579],{},"RAM",[123,1581,1582],{},"512 MB (idle), 2 GB (active)",[103,1584,1585,1590],{},[123,1586,1587],{},[19,1588,1589],{},"Storage",[123,1591,1592],{},"~100 MB + workflow data",[103,1594,1595,1600],{},[123,1596,1597],{},[19,1598,1599],{},"Throughput",[123,1601,1602],{},"~100 workflows/second",[55,1604,1606],{"id":1605},"scaling-for-large-facilities","Scaling for Large Facilities",[15,1608,1609],{},[19,1610,1611],{},"For 100+ sensors:",[484,1613,1614,1620,1626],{},[487,1615,1616,1619],{},[19,1617,1618],{},"Queue-based processing"," (MQTT → Redis Queue → n8n)",[487,1621,1622,1625],{},[19,1623,1624],{},"Multiple n8n instances"," (Docker Swarm/Kubernetes)",[487,1627,1628,1631],{},[19,1629,1630],{},"Database for workflow results"," (PostgreSQL)",[10,1633,1635],{"id":1634},"conclusion","Conclusion",[15,1637,1638,1640,1641,1644],{},[19,1639,21],{}," enables rapid automation of complex data flows in industrial facilities ",[19,1642,1643],{},"without code",". Especially powerful for:",[15,1646,61,1647,1650,69,1652,1655,1656,69,1658,1661,1662,69,1664],{},[19,1648,1649],{},"MQTT to Email/Slack alerts",[67,1651],{},[19,1653,1654],{},"Automated reporting"," (Excel, PDF)",[67,1657],{},[19,1659,1660],{},"ERP system integration"," (SAP, Odoo)",[67,1663],{},[19,1665,1666],{},"Multi-system workflows",[15,1668,1669,1670,39,1673,1676,1677,1680],{},"Our ",[35,1671,1672],{"href":37},"ZMA",[35,1674,1675],{"href":42},"GDT"," devices can be easily integrated with n8n via ",[19,1678,1679],{},"Modbus → MQTT gateway"," for complete workflow automation.",[55,1682,1684],{"id":1683},"related-resources","Related Resources",[1686,1687,1688,1694,1700,1706],"ul",{},[487,1689,1690],{},[35,1691,1693],{"href":1692},"/en/blog/industrial-data-collection-with-aws-iot-core","Industrial Data Collection with AWS IoT Core",[487,1695,1696],{},[35,1697,1699],{"href":1698},"/en/blog/time-series-data-management-amazon-timestream","Time Series Data Management with Amazon Timestream",[487,1701,1702],{},[35,1703,1705],{"href":1704},"/en/solutions/cloud-iot-data-collection","Cloud & IoT Data Collection",[487,1707,1708],{},[35,1709,38],{"href":37},[1711,1712,1713],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":208,"searchDepth":243,"depth":243,"links":1715},[1716,1717,1721,1722,1726,1733,1740,1747,1750,1754],{"id":12,"depth":243,"text":13},{"id":47,"depth":243,"text":48,"children":1718},[1719,1720],{"id":57,"depth":250,"text":58},{"id":94,"depth":250,"text":95},{"id":196,"depth":243,"text":197},{"id":211,"depth":243,"text":212,"children":1723},[1724,1725],{"id":215,"depth":250,"text":216},{"id":426,"depth":250,"text":427},{"id":465,"depth":243,"text":466,"children":1727},[1728,1729,1730,1731,1732],{"id":469,"depth":250,"text":470},{"id":476,"depth":250,"text":477},{"id":533,"depth":250,"text":534},{"id":650,"depth":250,"text":651},{"id":727,"depth":250,"text":728},{"id":808,"depth":243,"text":809,"children":1734},[1735,1736,1737,1738,1739],{"id":812,"depth":250,"text":470},{"id":818,"depth":250,"text":819},{"id":828,"depth":250,"text":829},{"id":935,"depth":250,"text":936},{"id":1002,"depth":250,"text":1003},{"id":1077,"depth":243,"text":1078,"children":1741},[1742,1743,1744,1745,1746],{"id":1081,"depth":250,"text":470},{"id":1087,"depth":250,"text":819},{"id":1096,"depth":250,"text":1097},{"id":1247,"depth":250,"text":1248},{"id":1341,"depth":250,"text":1342},{"id":1412,"depth":243,"text":1413,"children":1748},[1749],{"id":1416,"depth":250,"text":1417},{"id":1543,"depth":243,"text":1544,"children":1751},[1752,1753],{"id":1547,"depth":250,"text":1548},{"id":1605,"depth":250,"text":1606},{"id":1634,"depth":243,"text":1635,"children":1755},[1756],{"id":1683,"depth":250,"text":1684},"Automating industrial data flows with n8n workflow automation: MQTT to email/Slack alerts, ERP integration, and automated reporting from ZMA and GDT devices.","md",{"date":1760,"author":1761,"readTime":317,"tags":1762},"2025-12-29","Amazeng Technical Team",[21,1763,1764,1765,1766,1767,1768],"Workflow Automation","MQTT","Industrial IoT","No-Code","Integration","ERP","/en/blog/industrial-iot-automation-with-n8n",{"title":5,"description":1757},"en/blog/industrial-iot-automation-with-n8n","JiXemAcXrnBvc7kd1R4Xaf2O_QDclassCI9P6ehKXng",1778229658750]