Thực hiện chức năng tích hợp dữ liệu bằng Node-RED

BLP導線バナー


Lời nói đầu

Cảm ơn sự giúp đỡ của bạn.
Đây là Công ty TNHH Simtops.

Lần này, Panasonic FS Engineering Co., Ltd., đại lý của i-Reporter, đã đóng góp một bài viết có tiêu đề "Thực hiện các chức năng tích hợp dữ liệu bằng i-Reporter và Node RED", bài viết mô tả một công nghệ giúp đơn giản hóa (mã thấp) quá trình xây dựng tích hợp giữa i-Reporter và các hệ thống bên ngoài.

*Node RED là gì?
Node-RED là một công cụ cho phép bạn tạo các ứng dụng và hệ thống tự động một cách trực quan mà không cần bất kỳ kiến thức lập trình nào. Bạn có thể kết nối các khối được gọi là "nút" trong trình duyệt để thiết kế trực quan luồng dữ liệu.

Nếu bạn gặp khó khăn khi tích hợp với các hệ thống bên ngoài bằng ConMas Gateway, chúng tôi hy vọng bạn sẽ đọc bài viết này.

Xin chào

Rất vui được gặp bạn.
Tôi tên là Koba đến từ Panasonic FS Engineering Co., Ltd., nhà phân phối của i-Reporter.

Chúng tôi tự hỏi liệu có thể giúp việc sử dụng dữ liệu thực địa trở nên dễ dàng và thuận tiện hơn hay không. Với suy nghĩ này, chúng tôi đã nghĩ ra phương pháp tích hợp dữ liệu bằng i-Reporter và Node-RED.

Khi thực sự thử nghiệm, tôi thấy việc tích hợp dữ liệu tự động có thể thực hiện được chỉ với các thiết lập đơn giản, giúp cải thiện đáng kể hiệu quả công việc. Tôi muốn chia sẻ phương pháp tiện lợi này với mọi người nên đã viết một bài viết về nó.

Cuốn sách này chắc chắn sẽ hữu ích cho những ai muốn sử dụng dữ liệu i-Reporter tốt hơn hoặc muốn tích hợp linh hoạt hệ thống của mình bằng các công cụ không cần mã.

Hãy nhớ xem đến hết nhé!

Bối cảnh thành lập sự hợp tác này

Một khách hàng đã liên hệ với chúng tôi về việc sử dụng i-Reporter làm giao diện người dùng (UI) cho hệ thống nội bộ của họ. Chúng tôi đã giới thiệu cho họ phương pháp tích hợp bằng Gateway và Python, và họ đã tiến hành điều tra.
Tuy nhiên, việc giới thiệu i-Reporter đã bị hoãn lại vì những lý do sau:

Lý do từ bỏ việc giới thiệu i-Reporter

  1. Chi phí học Python
    Tôi không có thời gian để học Python.
  2. Độ phức tạp khi sử dụng chức năng Gateway
    Cần phải viết mã trực tiếp vào nhiều tệp bên ngoài công cụ, khiến việc quản lý trở nên phức tạp và việc bảo trì trở nên khó khăn.
  3. Tạo SQL phức tạp là một gánh nặng
    Khi tạo SQL phức tạp, cần phải viết bằng Python, điều này làm tăng thời gian phát triển.
  4. Điểm truy cập không rõ ràng
    Thật khó để biết cách truy cập dữ liệu cần thiết ở đâu, khiến việc quản lý trở nên khó khăn.
  5. Mối quan hệ không rõ ràng giữa i-Reporter và các tệp Python
    Điểm đến của cuộc gọi từ i-Reporter không được liên kết trực tiếp đến tệp Python, điều này gây khó khăn cho hoạt động.

Giải pháp đề xuất

  1. Tôi không có thời gian để học Python
    → Cân nhắc sử dụng các công cụ phát triển không cần mã hoặc ít mã.
  2. Giảm gánh nặng quản lý mã khi sử dụng Gateway
    → Chúng tôi đang tìm cách gọi điện và trả lời trực tiếp từ i-Reporter.
  3. Loại bỏ sự nhầm lẫn về nơi truy cập
    → Đơn giản hóa việc quản lý và thu thập dữ liệu, đồng thời xem xét các phương pháp truy cập trực quan hơn.

Các tính năng của Node-RED

  • Lập trình trực quan
    Nó cung cấp trình soạn thảo luồng chạy trên trình duyệt web, cho phép bạn xây dựng quy trình làm việc trực quan bằng cách kéo và thả các nút.
  • Hỗ trợ JavaScript
    Có thể thực hiện xử lý tùy chỉnh bằng cách viết các hàm JavaScript.
  • Thời gian chạy dựa trên Node.js
    Nó cung cấp một môi trường nhẹ và linh hoạt có thể chạy trên nhiều thiết bị khác nhau.
  • Quản lý luồng định dạng JSON
    Các luồng bạn tạo sẽ được lưu ở định dạng JSON, giúp bạn dễ dàng sử dụng lại và chia sẻ.
  • Hỗ trợ MQTT/TLS
    Bắt đầu từ phiên bản 0.14, các nút MQTT có thể thiết lập kết nối TLS, cho phép giao tiếp an toàn hơn.

Node-RED được sử dụng rộng rãi trong lĩnh vực IoT và tự động hóa doanh nghiệp vì ngay cả người mới bắt đầu cũng có thể xây dựng hệ thống một cách trực quan bằng cách sử dụng nó.

[Tham khảo] Node-RED (Wikipedia)

Môi trường hoạt động mẫu

Màn hình mẫu

Luồng Node-RED

Hình ảnh hoạt động

bản tóm tắt

Lợi ích của việc sử dụng Node-RED

1. Giảm chi phí giáo dục

Node-RED là một công cụ phát triển mã nguồn thấp cho phép ngay cả những người có ít kiến thức lập trình cũng có thể tạo luồng tương đối dễ dàng, giúp phát triển hệ thống nhanh chóng trong khi vẫn giữ chi phí học tập ở mức thấp.

2. Cấu trúc tập tin đơn giản

Nó loại bỏ nhu cầu phải viết chuỗi kết nối DB, quản lý tệp Hành động và tạo tệp tập lệnh, vốn là những việc trước đây bắt buộc. Vì mọi quá trình xử lý đều được hoàn tất trong Node-RED nên việc cấu hình tệp được đơn giản hóa và việc quản lý cũng dễ dàng hơn.

3. Hỗ trợ các câu lệnh SQL phức tạp

Vì bạn có thể viết các câu lệnh SQL trong Node-RED, bạn cũng có thể thực hiện các thao tác dữ liệu phức tạp như xử lý giao dịch, nối ngoài và nối trong, SELECT, INSERT và UPDATE.

4. Truy cập rõ ràng

Vì địa chỉ Gateway và địa chỉ API Node-RED khớp nhau nên các kết nối hệ thống được đơn giản hóa, giúp vận hành và quản lý dễ dàng hơn.

5. Khả năng mở rộng cao

Node-RED là một công cụ phát triển có khả năng mở rộng cao cho phép bạn dễ dàng triển khai các chức năng sau:

  • Đọc và ghi tệp CSV
  • Tích hợp với API Web của các công ty khác
  • Gửi thông báo đến email và trò chuyện
  • Thu thập dữ liệu PLC

Theo cách này, bằng cách sử dụng Node-RED, có thể cải thiện hiệu quả phát triển và xây dựng các hệ thống linh hoạt.

Những điểm chính khi sử dụng Node-RED

1. Tạo WebAPI với Node-RED

Node-RED cho phép bạn dễ dàng tạo API Web với mã nguồn thấp. Thiết kế luồng trực quan cho phép phát triển trực quan.

2. Giá trị trả về định dạng JSON rất quan trọng

Điều quan trọng là chuẩn bị các giá trị trả về của WebAPI được tạo bằng Node-RED theo định dạng JSON phù hợp. Điều quan trọng là phải thiết kế một cấu trúc dữ liệu thống nhất để đảm bảo xử lý mượt mà ở phía máy khách.

Bằng cách ghi nhớ hai điểm này, bạn có thể xây dựng một hệ thống hiệu quả hơn.

Tin tức khác dành cho độc giả của chúng tôi:

Nếu bạn đang sử dụng dịch vụ này, vui lòng chia sẻ thêm thông tin bạn có.
Chúng tôi cũng sẽ rất biết ơn nếu bạn gửi cho chúng tôi ý kiến và phản hồi của bạn.

Mẫu giải thích liên kết i-Reporter

Mẫu sau đây sẽ giải thích những mục sau:
Ngoài ra, vui lòng tham khảo trang web riêng để biết thông tin về cách cài đặt Node-RED, cách thêm các nút cần thiết và cách vận hành Node-RED.
Ngoài ra, trong phần mô tả nút, phần giải thích về các nút giống với các nút trong mẫu trước đã bị bỏ qua.
Vui lòng tham khảo mẫu trước.

  • Hiển thị dữ liệu PostgreSQL trong i-Reporter
  • Hiển thị mã QR trên i-Reporter
  • Hiển thị các tập tin hình ảnh
  • Đặt tiêu điểm
  • Một tập hợp các tùy chọn cụm lựa chọn đơn

Hiển thị dữ liệu PostgreSQL trong i-Reporter

Hình ảnh dòng chảy

Tổng quan

Đây là một ví dụ lấy dữ liệu PostgreSQL và hiển thị trong i-Reporter.
Lấy dữ liệu từ bảng kiểm kê và hiển thị trên màn hình i-Reporter.

Nút sẽ được sử dụng (nút sẽ được thêm vào)

Trong mẫu này, các nút Node-RED sau được thêm vào để truy cập PostgreSQL.

  • node-red-contrib-re-postgres

Cấu hình nút

http nút

Phương pháp: Sử dụng cùng phương pháp như i-Reporte
URL: Chỉ định điểm cuối của URL.
Tên: Nhập tên dễ hiểu để bình luận.

nút mẫu

Nhập câu lệnh SQL để truy cập cơ sở dữ liệu.
Tên: Nhập tên dễ hiểu để bình luận.
Thuộc tính: Tên biến mà nội dung mẫu sẽ được gán vào.
Biến mà nút postgres tiếp theo đang yêu cầu là msg.payload
Vì vậy, hãy gán nó cho msg.payload
Định dạng: Chỉ định mẫu Ria mép
Định dạng đầu ra: Chỉ định văn bản thuần túy

nút postgres

Tên: Chỉ định một bình luận cho nút Postgres
Sewver: Chỉ định tên bạn đã đặt cho thông tin kết nối cơ sở dữ liệu bên dưới.
Nhận đầu ra truy vấn?: Nếu bạn muốn sử dụng dữ liệu đã truy xuất trong luồng tiếp theo,
Đánh dấu vào ô

Tên: Đặt tên cho thông tin kết nối cơ sở dữ liệu
Máy chủ: Chỉ định tên máy chủ và địa chỉ IP.
Cơ sở dữ liệu: Chỉ định tên cơ sở dữ liệu.
Tên người dùng: Chỉ định tên người dùng
Mật khẩu: Chỉ định mật khẩu

nút mẫu

Tạo một chuỗi để trả về dữ liệu đã thu thập được cho cụm i-Reporter.
Tạo dữ liệu theo định dạng JSON này

nút phản hồi http

Đây là một nút được ghép nối với http trong
Sử dụng mặc định

Cài đặt i-Reporter

Tệp nguồn

[
    {
        "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
    }
]

Hiển thị mã QR trên i-Reporter

Hình ảnh dòng chảy

Tổng quan

Chuỗi ký tự được nhập vào Cụm 1 sẽ được chuyển đổi thành mã QR và hiển thị trên màn hình i-Reporter.

Nút sẽ được sử dụng (nút sẽ được thêm vào)

  • node-red-contrib-image-tools

Cấu hình nút

http nút

Nút tạo mã vạch

Văn bản: Chỉ định chuỗi ký tự sẽ được sử dụng làm mã QR.
Lần này, chuỗi sẽ được kế thừa từ i-Reporter dưới dạng một biến có tên là id.
Các biến được kế thừa sẽ được nhập vào biến theo dạng msg.payload.id
Loại: Vì lần này chúng ta sẽ chuyển đổi thành mã QR nên hãy chọn Mã QR.

Nút hình ảnh

Chuyển đổi sang định dạng Base64
Đầu ra: Đặt base64

nút mẫu

Tạo dữ liệu theo định dạng này

Cài đặt i-Reporter

Tệp nguồn

[
    {
        "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": []
    }
]
 

Hiển thị các tập tin hình ảnh

Hình ảnh dòng chảy

Tổng quan

Tệp hình ảnh được chọn trong cụm 37 sẽ được gọi lên và hiển thị trên màn hình i-Reporter.

Nút sẽ được sử dụng (nút sẽ được thêm vào)

Thêm các nút Node-RED sau để lấy dữ liệu hình ảnh và chuyển đổi sang định dạng Base64.

  • node-red-contrib-image-tools

Cấu hình nút

http nút

Tệp Resd

Chỉ định tên tệp từ i-Reporter trong biến Msg.payload.fl
Tải tập tin này

Cài đặt i-Reporter

Tệp nguồn

[
    {
        "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": []
    }
]

Đặt tiêu điểm

Hình ảnh dòng chảy

Tổng quan

Di chuyển tiêu điểm đến số cụm được chỉ định trong cụm 35.
Đặt tiêu điểm vào một cụm hành động sẽ thực hiện hành động đó.

Phương pháp này cho phép bạn tự động chuyển trọng tâm sau khi nhập một số dữ liệu nhất định, đảm bảo quy trình làm việc diễn ra suôn sẻ.

Nút sẽ được sử dụng (nút sẽ được thêm vào)

Không có nút nào để thêm

Cấu hình nút

http nút

nút mẫu

Cài đặt i-Reporter

Tệp nguồn

[
    {
        "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": []
    }
]

Một tập hợp các tùy chọn cụm lựa chọn đơn

Hình ảnh dòng chảy

Tổng quan

Lấy dữ liệu từ cơ sở dữ liệu bên ngoài và đặt nó thành các lựa chọn trong một cụm lựa chọn duy nhất.

Nút sẽ được sử dụng (nút sẽ được thêm vào)

Thêm nút Node-RED sau để truy cập PostgreSQL.

  • node-red-contrib-re-postgres

Cấu hình nút

http nút

nút mẫu

Vì lần này chúng ta đang truy cập cơ sở dữ liệu nên chúng ta sẽ tạo một chuỗi trả về trong biến có tên là msg.base_data.
Masu

Thay đổi nút

Dữ liệu trong biến msg.payload lấy từ cơ sở dữ liệu bên ngoài
Gán cho msg.base_data.appy.0.selectitems
Sau đó đưa msg.base_data trở lại msg.payload

nút json

Nút này chuyển đổi đối tượng JSON trong msg.payload thành chuỗi JSON.

Cài đặt i-Reporter

Tệp nguồn

[
    {
        "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
    }
]

Bạn nghĩ sao? Tôi hy vọng bài viết này hữu ích với bạn.
Cảm ơn bạn rất nhiều vì đã đọc đến hết.
Nếu bạn có bất kỳ thắc mắc nào, vui lòng liên hệ với chúng tôi theo địa chỉ bên dưới.
Chúng tôi mong nhận được phản hồi từ bạn.

Về phiên bản
i-Reporter: 5.2.24021
Cổng: 2.1.230600
▼Ghi chú
- Chúng tôi không chịu trách nhiệm cho bất kỳ thiệt hại nào gây ra bởi các hệ thống được xây dựng dựa trên nội dung của bài viết này.
- Xin lưu ý rằng Simtops Co., Ltd. sẽ không cung cấp hỗ trợ phát triển, kỹ thuật hoặc hỗ trợ liên quan đến nội dung của bài viết này.
-Do những thay đổi trong thông số kỹ thuật của ConMas Gateway, chức năng tích hợp này có thể không khả dụng.

Tác giả/Liên hệ:
Công ty TNHH Kỹ thuật Panasonic FS

Thông tin liên lạc

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

*Mọi thắc mắc vui lòng liên hệ theo địa chỉ email trên.
*Xin lưu ý rằng do tình hình kinh doanh, việc trả lời có thể bị chậm trễ.
*Vui lòng không hỏi thăm thông tin từ nhân viên bán hàng.

Hơn 4.000 công ty đã áp dụng!
Thị phần số 1 trong các ứng dụng không cần giấy tờ

Bạn có thể di chuyển trực tiếp từ các biểu mẫu Excel quen thuộc
Hệ thống điện tử cho các tài liệu tại chỗ

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