การรับรู้ฟังก์ชันการรวมข้อมูลโดยใช้ Node-RED

BLP導線バナー


คำนำ

ขอบคุณสำหรับความช่วยเหลือของคุณ.
นี่คือบริษัท ซิมท็อปส์ จำกัด

ครั้งนี้บริษัท Panasonic FS Engineering Co., Ltd. ซึ่งเป็นตัวแทนของ i-Reporter ได้เขียนบทความเรื่อง "การสร้างฟังก์ชันการรวมข้อมูลโดยใช้ i-Reporter และ Node RED" ซึ่งอธิบายถึงเทคโนโลยีที่ทำให้การสร้างการรวมข้อมูลระหว่าง i-Reporter และระบบภายนอกง่ายขึ้น (ด้วยโค้ดน้อย)

*Node RED คืออะไร?
Node-RED เป็นเครื่องมือที่ช่วยให้คุณสร้างแอปพลิเคชันและระบบอัตโนมัติได้อย่างง่ายดายโดยไม่ต้องมีความรู้ด้านการเขียนโปรแกรม คุณสามารถเชื่อมต่อบล็อกที่เรียกว่า "โหนด" ในเบราว์เซอร์ของคุณเพื่อออกแบบการไหลของข้อมูลได้อย่างชัดเจน

หากคุณประสบปัญหาในการบูรณาการกับระบบภายนอกโดยใช้ ConMas Gateway เราหวังว่าคุณจะอ่านบทความนี้

สวัสดี

ยินดีที่ได้รู้จัก.
ชื่อฉันโคบะ จากบริษัท พานาโซนิค เอฟเอส เอ็นจิเนียริ่ง จำกัด ผู้จำหน่าย i-Reporter

เราสงสัยว่าเราจะสามารถทำให้การใช้ข้อมูลภาคสนามง่ายและราบรื่นขึ้นได้หรือไม่ ด้วยเหตุนี้ เราจึงคิดค้นวิธีการผสานรวมข้อมูลโดยใช้ i-Reporter และ Node-RED

เมื่อได้ลองใช้จริง ผมพบว่าการผสานรวมข้อมูลอัตโนมัติสามารถทำได้ด้วยการตั้งค่าง่ายๆ ซึ่งช่วยเพิ่มประสิทธิภาพการทำงานได้อย่างมาก ผมจึงอยากแบ่งปันวิธีการที่สะดวกสบายนี้ให้ทุกคนได้ทราบ จึงได้เขียนบทความเกี่ยวกับเรื่องนี้ขึ้นมา

หนังสือเล่มนี้จะเป็นประโยชน์อย่างแน่นอนสำหรับผู้ที่ต้องการใช้ข้อมูล i-Reporter ให้เกิดประโยชน์มากขึ้น หรือผู้ที่ต้องการบูรณาการระบบของตนอย่างยืดหยุ่นโดยใช้เครื่องมือแบบไม่ต้องเขียนโค้ด

โปรดอย่าลืมดูจนจบนะครับ!

ความเป็นมาของการก่อตั้งความร่วมมือนี้

ลูกค้ารายหนึ่งติดต่อเราเกี่ยวกับการใช้ i-Reporter เป็น UI สำหรับระบบภายในของพวกเขา เราได้แนะนำวิธีการผสานรวมระบบโดยใช้ Gateway และ Python ให้พวกเขาทราบ และพวกเขาก็เริ่มดำเนินการตรวจสอบต่อไป
อย่างไรก็ตาม การเปิดตัว i-Reporter ถูกเลื่อนออกไปด้วยเหตุผลดังต่อไปนี้:

เหตุผลที่ยกเลิกการนำ i-Reporter มาใช้

  1. ค่าใช้จ่ายในการเรียนรู้ Python
    ฉันไม่มีเวลาเรียนรู้ Python
  2. ความซับซ้อนเมื่อใช้ฟังก์ชัน Gateway
    จำเป็นต้องเขียนโค้ดโดยตรงในไฟล์หลายไฟล์ภายนอกเครื่องมือ ซึ่งทำให้การจัดการมีความซับซ้อนและการบำรุงรักษาทำได้ยาก
  3. การสร้าง SQL ที่ซับซ้อนเป็นภาระ
    เมื่อสร้าง SQL ที่ซับซ้อน จำเป็นต้องเขียนด้วย Python ซึ่งจะทำให้เวลาในการพัฒนาเพิ่มขึ้น
  4. จุดหมายปลายทางการเข้าถึงไม่ชัดเจน
    เป็นเรื่องยากที่จะทราบว่าจะเข้าถึงข้อมูลที่จำเป็นได้จากที่ใด จึงทำให้การบริหารจัดการทำได้ยาก
  5. ความสัมพันธ์ที่ไม่ชัดเจนระหว่างไฟล์ i-Reporter และ Python
    จุดหมายปลายทางการโทรจาก i-Reporter ไม่ได้เชื่อมโยงโดยตรงกับไฟล์ Python ซึ่งทำให้การทำงานมีภาระหนัก

แนวทางแก้ไขที่เสนอ

  1. ฉันไม่มีเวลาเรียนรู้ Python
    → พิจารณาใช้เครื่องมือพัฒนาแบบไม่ต้องเขียนโค้ดหรือเขียนโค้ดน้อย
  2. ลดภาระการจัดการโค้ดเมื่อใช้ Gateway
    → เรากำลังมองหาวิธีโทรและกลับโดยตรงจาก i-Reporter
  3. ขจัดความสับสนในการเข้าถึง
    → ลดความซับซ้อนในการจัดการและรวบรวมข้อมูล และพิจารณาวิธีการเข้าถึงที่ใช้งานง่ายยิ่งขึ้น

คุณสมบัติของ Node-RED

  • การเขียนโปรแกรมเชิงภาพ
    มันให้ตัวแก้ไขการไหลที่ทำงานบนเว็บเบราว์เซอร์ ช่วยให้คุณสร้างเวิร์กโฟลว์ได้อย่างชัดเจนด้วยการลากและวางโหนด
  • รองรับ JavaScript
    การประมวลผลที่กำหนดเองสามารถนำไปปฏิบัติได้โดยการเขียนฟังก์ชัน JavaScript
  • รันไทม์ที่ใช้ Node.js
    มันมอบสภาพแวดล้อมที่มีน้ำหนักเบาและยืดหยุ่นที่สามารถทำงานได้บนอุปกรณ์หลากหลายชนิด
  • การจัดการการไหลของรูปแบบ JSON
    โฟลว์ที่คุณสร้างจะถูกบันทึกในรูปแบบ JSON ทำให้สามารถนำกลับมาใช้ซ้ำและแชร์ได้ง่าย
  • รองรับ MQTT/TLS
    ตั้งแต่เวอร์ชัน 0.14 เป็นต้นไป โหนด MQTT สามารถสร้างการเชื่อมต่อ TLS ได้ ช่วยให้การสื่อสารมีความปลอดภัยยิ่งขึ้น

Node-RED ถูกใช้กันอย่างแพร่หลายในด้าน IoT และระบบอัตโนมัติทางธุรกิจ เนื่องจากแม้แต่ผู้เริ่มต้นก็สามารถสร้างระบบโดยใช้ Node-RED ได้อย่างเป็นธรรมชาติ

[อ้างอิง] Node-RED (Wikipedia)

ตัวอย่างสภาพแวดล้อมการปฏิบัติการ

ตัวอย่างหน้าจอ

การไหลของโหนด-RED

ภาพการดำเนินการ

สรุป

ประโยชน์ของการใช้ Node-RED

1. ลดต้นทุนการศึกษา

Node-RED เป็นเครื่องมือพัฒนาแบบ low-code ที่ช่วยให้แม้แต่ผู้ที่มีความรู้ด้านการเขียนโปรแกรมเพียงเล็กน้อยก็สามารถสร้างโฟลว์ได้ค่อนข้างง่าย ทำให้สามารถพัฒนาระบบได้อย่างรวดเร็วในขณะที่ยังคงต้นทุนการเรียนรู้ที่ต่ำ

2. โครงสร้างไฟล์ที่เรียบง่าย

ช่วยขจัดความจำเป็น ในการเขียนสตริงการเชื่อมต่อ DB จัดการไฟล์ Action และสร้างไฟล์สคริปต์ ซึ่งจำเป็นก่อนหน้านี้ เนื่องจากการประมวลผลทั้งหมดเสร็จสิ้นภายใน Node-RED การกำหนดค่าไฟล์จึงง่ายขึ้นและการจัดการก็สะดวกยิ่งขึ้น

3. รองรับคำสั่ง SQL ที่ซับซ้อน

เนื่องจากคุณสามารถเขียนคำสั่ง SQL ภายใน Node-RED ได้ คุณจึงสามารถดำเนินการข้อมูลที่ซับซ้อน เช่น การประมวลผลธุรกรรม การรวมภายนอกและภายใน SELECT, INSERT และ UPDATE ได้ด้วย

4. การเข้าถึงที่ชัดเจน

เนื่องจากที่อยู่ Gateway และที่อยู่ API ของ Node-RED ตรงกัน การเชื่อมต่อระบบจึงง่ายขึ้น ทำให้การทำงานและการจัดการสะดวกยิ่งขึ้น

5. ความสามารถในการปรับขนาดได้สูง

Node-RED เป็นเครื่องมือพัฒนาที่มีความสามารถในการขยายได้สูงซึ่งช่วยให้คุณสามารถใช้งานฟังก์ชันต่อไปนี้ได้อย่างง่ายดาย:

  • การอ่านและการเขียนไฟล์ CSV
  • การบูรณาการกับ Web API ของบริษัทอื่น
  • ส่งการแจ้งเตือนไปยังอีเมล์และแชท
  • การรับข้อมูล PLC

ด้วยวิธีนี้ การใช้ Node-RED จะช่วยปรับปรุงประสิทธิภาพการพัฒนาและสร้างระบบที่ยืดหยุ่นได้

จุดสำคัญในการใช้ Node-RED

1. สร้าง WebAPI ด้วย Node-RED

Node-RED ช่วยให้คุณ สร้าง Web API ได้อย่างง่ายดาย ด้วยโค้ดน้อย การออกแบบโฟลว์แบบ Visual ช่วยให้การพัฒนาเป็นไปอย่างราบรื่น

2. ค่าส่งคืนรูปแบบ JSON มีความสำคัญ

สิ่งสำคัญคือการเตรียมค่าที่ส่งกลับของ WebAPI ที่สร้างด้วย Node-RED ในรูปแบบ JSON ที่เหมาะสม สิ่งสำคัญคือการออกแบบโครงสร้างข้อมูลแบบรวมศูนย์เพื่อให้มั่นใจว่าการประมวลผลบนฝั่งไคลเอ็นต์จะราบรื่น

การจดจำสองประเด็นนี้ไว้จะช่วยให้คุณสร้างระบบที่มีประสิทธิภาพมากขึ้นได้

ข่าวอื่นๆสำหรับผู้อ่านของเรา:

หากคุณกำลังใช้บริการนี้อยู่แล้ว โปรด แบ่งปันข้อมูลเพิ่มเติม ที่คุณมี
เราจะขอบคุณมากหากคุณสามารถส่งความคิดเห็นและข้อเสนอแนะของคุณมาให้เรา

ตัวอย่างคำอธิบายการเชื่อมโยง i-Reporter

ตัวอย่างต่อไปนี้จะอธิบายรายการต่อไปนี้:
นอกจากนี้ โปรดดูเว็บไซต์แยกต่างหากเพื่อดูข้อมูลเกี่ยวกับวิธีการติดตั้ง Node-RED วิธีการเพิ่มโหนดที่จำเป็น และวิธีการใช้งาน Node-RED
นอกจากนี้ ในส่วนคำอธิบายโหนด คำอธิบายของโหนดที่เหมือนกับในตัวอย่างก่อนหน้านี้จะถูกละเว้น
กรุณาดูตัวอย่างก่อนหน้านี้

  • การแสดงข้อมูล PostgreSQL ใน i-Reporter
  • แสดงรหัส QR บน i-Reporter
  • การแสดงไฟล์ภาพ
  • กำหนดโฟกัส
  • ชุดตัวเลือกคลัสเตอร์แบบตัวเลือกเดียว

การแสดงข้อมูล PostgreSQL ใน i-Reporter

ภาพไหล

ภาพรวม

นี่คือตัวอย่างที่ดึงข้อมูล PostgreSQL และแสดงใน i-Reporter
ดึงข้อมูลจากตารางสินค้าคงคลังและแสดงบนหน้าจอ i-Reporter

โหนดที่จะใช้ (โหนดที่จะเพิ่ม)

ในตัวอย่างนี้ โหนด Node-RED ต่อไปนี้จะถูกเพิ่มเพื่อเข้าถึง PostgreSQL

  • node-red-contrib-re-postgres

การกำหนดค่าโหนด

http อินโหนด

วิธีการ: ใช้วิธีการเดียวกันกับ i-Reporte
URL: ระบุจุดสิ้นสุด URL
ชื่อ : ระบุชื่อที่เข้าใจง่ายเหมือนความคิดเห็น

โหนดเทมเพลต

กรอกคำสั่ง SQL เพื่อเข้าถึงฐานข้อมูล
ชื่อ : ระบุชื่อที่เข้าใจง่ายเหมือนความคิดเห็น
คุณสมบัติ: ชื่อตัวแปรที่จะกำหนดเนื้อหาเทมเพลต
ตัวแปรที่โหนด postgres ถัดไปร้องขอคือ msg.payload
ดังนั้นให้กำหนดให้กับ msg.payload
รูปแบบ: ระบุเทมเพลตหนวด
รูปแบบผลลัพธ์: ระบุข้อความธรรมดา

โหนด postgres

ชื่อ: ระบุความคิดเห็นสำหรับโหนด Postgres
Sewver: ระบุชื่อที่คุณตั้งให้กับข้อมูลการเชื่อมต่อฐานข้อมูลด้านล่าง
รับผลลัพธ์ของแบบสอบถามหรือไม่: หากคุณต้องการใช้ข้อมูลที่ดึงมาในโฟลว์ถัดไป
ทำเครื่องหมายในช่อง

ชื่อ: ตั้งชื่อข้อมูลการเชื่อมต่อฐานข้อมูล
โฮสต์: ระบุชื่อเซิร์ฟเวอร์และที่อยู่ IP
ฐานข้อมูล: ระบุชื่อฐานข้อมูล
ชื่อผู้ใช้ : ระบุชื่อผู้ใช้
รหัสผ่าน : ระบุรหัสผ่าน

โหนดเทมเพลต

สร้างสตริงเพื่อส่งคืนข้อมูลที่ได้รับไปยังคลัสเตอร์ i-Reporter
สร้างข้อมูลในรูปแบบ JSON นี้

โหนดตอบสนอง http

นี่คือโหนดที่จับคู่กับ http ใน
ใช้ค่าเริ่มต้น

การตั้งค่า i-Reporter

ไฟล์ต้นฉบับ

[
    {
        "id": "e5093ff27efd600e",
        "type": "http in",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "データ取得",
        "url": "/Get-Data",
        "method": "get",
        "upload": false,
        "swaggerDoc": "",
        "x": 280,
        "y": 4220,
        "wires": [
            [
                "a016c039f0157d8f"
            ]
        ]
    },
    {
        "id": "a016c039f0157d8f",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "SQL",
        "field": "payload",
        "fieldType": "msg",
        "format": "sql",
        "syntax": "mustache",
        "template": "SELECT\n    id\n    , part_no\n    , part_no\n    , part_nam\n    , stock_cnt\nFROM\n    stddb.t_inventory\nORDER BY stock_cnt ASC\nLIMIT 5\n",
        "output": "str",
        "x": 690,
        "y": 4220,
        "wires": [
            [
                "4cc5f7592a8bf6ff"
            ]
        ]
    },
    {
        "id": "4cc5f7592a8bf6ff",
        "type": "postgres",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "postgresdb": "1429ffd5a6603e33",
        "name": "",
        "output": true,
        "perrow": false,
        "rowspermsg": "1",
        "return_on_error": false,
        "limit_queries": "0",
        "limit_by": "payload",
        "limit_value": "1",
        "limit_drop_intermediate": false,
        "limit_drop_if_in_queue": false,
        "outputs": true,
        "x": 880,
        "y": 4220,
        "wires": [
            [
                "85397862ed216455"
            ]
        ]
    },
    {
        "id": "85397862ed216455",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\n    \"result\": {\n        \"code\": 0,\n        \"description\": \"Success!!!\"\n    },\n    \"apply\": [\n        {\n            \"sheet\": 1,\n            \"cluster\": 2,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.0.id}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 3,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.0.part_no}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 4,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.0.part_nam}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 5,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.0.stock_cnt}}}\"\n        },\n\n        {\n            \"sheet\": 1,\n            \"cluster\": 7,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.1.id}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 8,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.1.part_no}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 9,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.1.part_nam}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 10,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.1.stock_cnt}}}\"\n        },\n\n        {\n            \"sheet\": 1,\n            \"cluster\": 11,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.2.id}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 12,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.2.part_no}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 13,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.2.part_nam}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 14,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.2.stock_cnt}}}\"\n        },\n\n        {\n            \"sheet\": 1,\n            \"cluster\": 15,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.3.id}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 16,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.3.part_no}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 17,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.3.part_nam}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 18,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.3.stock_cnt}}}\"\n        },\n\n        {\n            \"sheet\": 1,\n            \"cluster\": 19,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.4.id}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 20,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.4.part_no}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 21,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.4.part_nam}}}\"\n        },\n        {\n            \"sheet\": 1,\n            \"cluster\": 22,\n            \"type\": \"string\",\n            \"value\": \"{{{payload.4.stock_cnt}}}\"\n        }\n\n    ]\n}",
        "output": "str",
        "x": 1300,
        "y": 4220,
        "wires": [
            [
                "9d7dfb43e876a634"
            ]
        ]
    },
    {
        "id": "9d7dfb43e876a634",
        "type": "http response",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 1450,
        "y": 4220,
        "wires": []
    },
    {
        "id": "1429ffd5a6603e33",
        "type": "postgresdb",
        "cfgname": "Localhost",
        "hostname": "localhost",
        "port": "5432",
        "db": "postgres",
        "ssl": false
    }
]

แสดงรหัส QR บน i-Reporter

ภาพไหล

ภาพรวม

สตริงที่ป้อนในคลัสเตอร์ 1 จะถูกแปลงเป็นรหัส QR และแสดงบนหน้าจอ i-Reporter

โหนดที่จะใช้ (โหนดที่จะเพิ่ม)

  • node-red-contrib-image-tools

การกำหนดค่าโหนด

http อินโหนด

โหนดเครื่องกำเนิดบาร์โค้ด

ข้อความ: ระบุสตริงที่จะใช้เป็นรหัส QR
ครั้งนี้สตริงจะได้รับการสืบทอดจาก i-Reporter เป็นตัวแปรที่เรียกว่า id
ตัวแปรที่สืบทอดจะถูกป้อนลงในตัวแปรในรูปแบบ msg.payload.id
ประเภท: เนื่องจากเราจะแปลงเป็นรหัส QR ในครั้งนี้ ให้เลือกรหัส QR

โหนดภาพ

แปลงเป็นรูปแบบ Base64
เอาท์พุต: ตั้งค่า base64

โหนดเทมเพลต

สร้างข้อมูลในรูปแบบนี้

การตั้งค่า i-Reporter

ไฟล์ต้นฉบับ

[
    {
        "id": "e9a3130d5919b122",
        "type": "http in",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "QR作成",
        "url": "/Make-QR",
        "method": "get",
        "upload": false,
        "swaggerDoc": "",
        "x": 290,
        "y": 4480,
        "wires": [
            [
                "659cc17a2ce81dd4"
            ]
        ]
    },
    {
        "id": "659cc17a2ce81dd4",
        "type": "Barcode Generator",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "data": "payload.id",
        "dataType": "msg",
        "barcode": "qrcode",
        "barcodeType": "barcode",
        "options": "",
        "optionsType": "ui",
        "sendProperty": "payload",
        "props": [],
        "x": 710,
        "y": 4480,
        "wires": [
            [
                "613466464d37465f"
            ]
        ]
    },
    {
        "id": "613466464d37465f",
        "type": "jimp-image",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "data": "payload",
        "dataType": "msg",
        "ret": "b64",
        "parameter1": "",
        "parameter1Type": "msg",
        "parameter2": "",
        "parameter2Type": "msg",
        "parameter3": "",
        "parameter3Type": "msg",
        "parameter4": "",
        "parameter4Type": "msg",
        "parameter5": "",
        "parameter5Type": "msg",
        "parameter6": "",
        "parameter6Type": "msg",
        "parameter7": "",
        "parameter7Type": "msg",
        "parameter8": "",
        "parameter8Type": "msg",
        "sendProperty": "payload",
        "sendPropertyType": "msg",
        "parameterCount": 0,
        "jimpFunction": "none",
        "selectedJimpFunction": {
            "name": "none",
            "fn": "none",
            "description": "Just loads the image.",
            "parameters": []
        },
        "x": 890,
        "y": 4480,
        "wires": [
            [
                "de0adf2b1d2ed0a6"
            ]
        ]
    },
    {
        "id": "de0adf2b1d2ed0a6",
        "type": "change",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "data:image/png;base64,",
                "fromt": "str",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1100,
        "y": 4480,
        "wires": [
            [
                "66027e96639dfcd1"
            ]
        ]
    },
    {
        "id": "66027e96639dfcd1",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\n    \"result\": {\n        \"code\": 0,\n        \"description\": \"Success!!!\"\n    },\n    \"apply\": [\n        {\n            \"sheet\": 1,\n            \"cluster\": 32,\n            \"type\": \"image\",\n            \"value\":\"{{{payload}}}\"\n        }\n    ]\n}",
        "output": "str",
        "x": 1300,
        "y": 4480,
        "wires": [
            [
                "0ba54da75fb7fd64"
            ]
        ]
    },
    {
        "id": "0ba54da75fb7fd64",
        "type": "http response",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 1450,
        "y": 4480,
        "wires": []
    }
]
 

การแสดงไฟล์ภาพ

ภาพไหล

ภาพรวม

ไฟล์รูปภาพที่เลือกในคลัสเตอร์ 37 จะถูกเรียกและแสดงบนหน้าจอ i-Reporter

โหนดที่จะใช้ (โหนดที่จะเพิ่ม)

เพิ่มโหนด Node-RED ต่อไปนี้เพื่อดึงข้อมูลภาพและแปลงเป็นรูปแบบ Base64

  • node-red-contrib-image-tools

การกำหนดค่าโหนด

http อินโหนด

ไฟล์ Resd

ระบุชื่อไฟล์จาก i-Reporter ในตัวแปร Msg.payload.fl
โหลดไฟล์นี้

การตั้งค่า i-Reporter

ไฟล์ต้นฉบับ

[
    {
        "id": "2a05cf56bd260e0a",
        "type": "http in",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "画像読込",
        "url": "/Make-picture",
        "method": "get",
        "upload": false,
        "swaggerDoc": "",
        "x": 300,
        "y": 4600,
        "wires": [
            [
                "7dcccd963194b66e"
            ]
        ]
    },
    {
        "id": "7dcccd963194b66e",
        "type": "file in",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "filename": "payload.fl",
        "filenameType": "msg",
        "format": "",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 720,
        "y": 4600,
        "wires": [
            [
                "83fddd4210b2173b"
            ]
        ]
    },
    {
        "id": "83fddd4210b2173b",
        "type": "jimp-image",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "data": "payload",
        "dataType": "msg",
        "ret": "b64",
        "parameter1": "",
        "parameter1Type": "msg",
        "parameter2": "",
        "parameter2Type": "msg",
        "parameter3": "",
        "parameter3Type": "msg",
        "parameter4": "",
        "parameter4Type": "msg",
        "parameter5": "",
        "parameter5Type": "msg",
        "parameter6": "",
        "parameter6Type": "msg",
        "parameter7": "",
        "parameter7Type": "msg",
        "parameter8": "",
        "parameter8Type": "msg",
        "sendProperty": "payload",
        "sendPropertyType": "msg",
        "parameterCount": 0,
        "jimpFunction": "none",
        "selectedJimpFunction": {
            "name": "none",
            "fn": "none",
            "description": "Just loads the image.",
            "parameters": []
        },
        "x": 890,
        "y": 4600,
        "wires": [
            [
                "ac767862aee316a1"
            ]
        ]
    },
    {
        "id": "ac767862aee316a1",
        "type": "change",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "data:image/png;base64,",
                "fromt": "str",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1100,
        "y": 4600,
        "wires": [
            [
                "4c8d32ffa9bc11ee"
            ]
        ]
    },
    {
        "id": "4c8d32ffa9bc11ee",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\n    \"result\": {\n        \"code\": 0,\n        \"description\": \"Success!!!\"\n    },\n    \"apply\": [\n    {\n        \"sheet\": 1,\n        \"cluster\": 34,\n        \"type\": \"image\",\n        \"value\":\"{{{payload}}}\"\n    }\n    ]\n}",
        "output": "str",
        "x": 1300,
        "y": 4600,
        "wires": [
            [
                "5c1d265fe120ddfa"
            ]
        ]
    },
    {
        "id": "5c1d265fe120ddfa",
        "type": "http response",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 1450,
        "y": 4600,
        "wires": []
    }
]

กำหนดโฟกัส

ภาพไหล

ภาพรวม

ย้ายโฟกัสไปที่หมายเลขคลัสเตอร์ที่ระบุในคลัสเตอร์ 35
การตั้งค่าโฟกัสไปที่คลัสเตอร์การดำเนินการจะดำเนินการนั้น

วิธีการนี้ช่วยให้คุณ เปลี่ยนโฟกัสโดยอัตโนมัติหลังจากป้อนข้อมูลบางอย่าง ช่วยให้เวิร์กโฟลว์ราบรื่น

โหนดที่จะใช้ (โหนดที่จะเพิ่ม)

ไม่มีโหนดที่จะเพิ่ม

การกำหนดค่าโหนด

http อินโหนด

โหนดเทมเพลต

การตั้งค่า i-Reporter

ไฟล์ต้นฉบับ

[
    {
        "id": "bce3b44ea5fd7c32",
        "type": "http in",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "フォーカスセット",
        "url": "/Set-focus",
        "method": "get",
        "upload": false,
        "swaggerDoc": "",
        "x": 330,
        "y": 4840,
        "wires": [
            [
                "f7e7778f83b25cae"
            ]
        ]
    },
    {
        "id": "f7e7778f83b25cae",
        "type": "change",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.clid",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1080,
        "y": 4840,
        "wires": [
            [
                "68c4e54ba5fc454e"
            ]
        ]
    },
    {
        "id": "68c4e54ba5fc454e",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\n    \"result\": {\n        \"code\": 0,\n        \"description\": \"Success!!!\"\n    },\n    \"apply\": [\n        {\n            \"sheet\":1,\n            \"cluster\":{{{payload}}},\n            \"type\":\"SetFocus\",\n            \"value\": \"\"\n        }\n    ]\n\n}",
        "output": "str",
        "x": 1300,
        "y": 4840,
        "wires": [
            [
                "92a9e28385c334b8"
            ]
        ]
    },
    {
        "id": "92a9e28385c334b8",
        "type": "http response",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 1450,
        "y": 4840,
        "wires": []
    }
]

ชุดตัวเลือกคลัสเตอร์แบบตัวเลือกเดียว

ภาพไหล

ภาพรวม

ดึงข้อมูลจากฐานข้อมูลภายนอกและตั้งค่าเป็นตัวเลือกในคลัสเตอร์แบบตัวเลือกเดียว

โหนดที่จะใช้ (โหนดที่จะเพิ่ม)

เพิ่มโหนด Node-RED ต่อไปนี้เพื่อเข้าถึง PostgreSQL

  • node-red-contrib-re-postgres

การกำหนดค่าโหนด

http อินโหนด

โหนดเทมเพลต

เนื่องจากเราเข้าถึงฐานข้อมูลในครั้งนี้ เราจะสร้างสตริงส่งคืนในตัวแปรที่เรียกว่า msg.base_data
มาสุ

เปลี่ยนโหนด

ข้อมูลในตัวแปร msg.payload ที่ได้รับจากฐานข้อมูลภายนอก
กำหนดให้กับ msg.base_data.appy.0.selectitems
จากนั้นใส่ msg.base_data กลับเข้าไปใน msg.payload

โหนด JSON

โหนดนี้จะแปลงวัตถุ JSON ใน msg.payload ให้เป็นสตริง JSON

การตั้งค่า i-Reporter

ไฟล์ต้นฉบับ

[
    {
        "id": "2ea56ea0b25a0857",
        "type": "http in",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "単一選択クラスタ選択肢取得",
        "url": "/Get-tnam",
        "method": "get",
        "upload": false,
        "swaggerDoc": "",
        "x": 360,
        "y": 4900,
        "wires": [
            [
                "2fa4f08a98cd25fd"
            ]
        ]
    },
    {
        "id": "2fa4f08a98cd25fd",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "ベースJSON",
        "field": "base_data",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\n    \"result\": {\n        \"code\": 0,\n        \"description\": \"Success!!!\"\n    },\n    \"apply\": [\n        {\n            \"item\": \"list1\",\n            \"sheet\": {{{payload.sheet}}},\n            \"cluster\": {{{payload.cluster}}},\n            \"type\": \"SetItemsToSelect\",\n            \"value\": \"\"\n            \n        }\n    ]\n}",
        "output": "json",
        "x": 590,
        "y": 4900,
        "wires": [
            [
                "c1b53a7404b91999"
            ]
        ]
    },
    {
        "id": "c1b53a7404b91999",
        "type": "template",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "SQL",
        "field": "payload",
        "fieldType": "msg",
        "format": "sql",
        "syntax": "mustache",
        "template": "SELECT\n      player_nam AS item\n    , player_nam AS label\n    , false AS selected\nFROM\n    stddb.t_player\nWHERE\n    tema_nam={{{payload.tnam}}}",
        "output": "str",
        "x": 750,
        "y": 4900,
        "wires": [
            [
                "243b5892a658a184"
            ]
        ]
    },
    {
        "id": "243b5892a658a184",
        "type": "postgres",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "postgresdb": "1429ffd5a6603e33",
        "name": "",
        "output": true,
        "perrow": false,
        "rowspermsg": "1",
        "return_on_error": false,
        "limit_queries": "0",
        "limit_by": "payload",
        "limit_value": "1",
        "limit_drop_intermediate": false,
        "limit_drop_if_in_queue": false,
        "outputs": true,
        "x": 900,
        "y": 4900,
        "wires": [
            [
                "4cbadf09c151a876"
            ]
        ]
    },
    {
        "id": "4cbadf09c151a876",
        "type": "change",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "データOBJ追加",
        "rules": [
            {
                "t": "set",
                "p": "base_data.apply.0.selectItems",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "base_data",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1080,
        "y": 4900,
        "wires": [
            [
                "48f412aaa05f34b6"
            ]
        ]
    },
    {
        "id": "48f412aaa05f34b6",
        "type": "json",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "property": "payload",
        "action": "str",
        "pretty": false,
        "x": 1290,
        "y": 4900,
        "wires": [
            [
                "c7f2de45cf870ec8"
            ]
        ]
    },
    {
        "id": "c7f2de45cf870ec8",
        "type": "http response",
        "z": "3b9d424424fa37f2",
        "g": "beaca7f0903c3bfb",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 1450,
        "y": 4900,
        "wires": []
    },
    {
        "id": "1429ffd5a6603e33",
        "type": "postgresdb",
        "cfgname": "Localhost",
        "hostname": "localhost",
        "port": "5432",
        "db": "postgres",
        "ssl": false
    }
]

คุณคิดอย่างไร? ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับคุณบ้าง
ขอบคุณมากที่อ่านจนจบ
หากคุณมีคำถามใดๆ โปรดติดต่อเราตามที่อยู่ด้านล่างนี้
เรารอคอยที่จะได้ยินจากคุณ

เกี่ยวกับเวอร์ชัน
i-Reporter: 5.2.24021
เกตเวย์: 2.1.230600
▼หมายเหตุ
- เราจะไม่รับผิดชอบต่อความเสียหายใดๆ ที่เกิดจากระบบที่สร้างขึ้นจากเนื้อหาบทความนี้
- โปรดทราบว่าบริษัท ซิมท็อปส์ จำกัด จะไม่ให้การสนับสนุนด้านการพัฒนา ความช่วยเหลือด้านเทคนิค หรือการสนับสนุนใดๆ เกี่ยวกับเนื้อหาบทความนี้
-เนื่องจากมีการเปลี่ยนแปลงในข้อกำหนดของ ConMas Gateway ฟังก์ชันการรวมนี้อาจใช้ไม่ได้อีกต่อไป

ผู้เขียน/ติดต่อ:
บริษัท พานาโซนิค เอฟเอส เอ็นจิเนียริ่ง จำกัด

ข้อมูลการติดต่อ

https://www.panasonic.com/jp/company/pfseg.html
パナソニックFSエンジニアリング株式会社 ソリューション統轄部 IoTソリューション部
担当:大塚 篤 / 村瀬 達也
TEL:03-6714-4521 / 03-6714-4535
メールアドレス:pfseginfo@ml.jp.panasonic.com

*หากต้องการสอบถามข้อมูล กรุณาติดต่อตามอีเมล์ด้านบน
*โปรดทราบว่าเนื่องด้วยสถานการณ์ทางธุรกิจ การตอบกลับอาจล่าช้า
*กรุณางดสอบถามจากตัวแทนขาย

มีบริษัทมากกว่า 4,000 แห่ง ที่นำไปใช้แล้ว!
ส่วนแบ่ง อันดับ 1 ในแอปไร้กระดาษ

คุณสามารถย้ายข้อมูลจากแบบฟอร์ม Excel ที่คุ้นเคยได้โดยตรง
ระบบอิเล็กทรอนิกส์สำหรับเอกสารหน้างาน

3分で分かる資料ダウンロード 現場帳票のデジタル化相談してみる