diff --git a/directory.json b/directory.json index baea4b3..c9ac80f 100644 --- a/directory.json +++ b/directory.json @@ -692,7 +692,7 @@ } ] }, - { + { "title": "HTTP API", "path": "api/api", "collapsed": true, @@ -715,7 +715,7 @@ } ] }, - { + { "title": "运维指南", "path": "admin/introduction", "url": "", @@ -744,17 +744,22 @@ "path": "release_history/release_history" } ], - "en": [ + "en": [ { - "title": "产品概览", + "title": "Product Overview", "path": "./", + "collapsed": true, "children": [ { - "title": "数采插件列表", + "title": "Architecture", + "path": "introduction/architecture" + }, + { + "title": "List of Data Collection Plugins", "path": "introduction/plugin-list/plugin-list" }, { - "title": "许可证政策", + "title": "Licensing Policy", "path": "introduction/license/license-policy" } ] @@ -769,7 +774,7 @@ "collapsed": true, "children": [ { - "title": "使用 .tar.gz 包安装", + "title": "Installation with .tar.gz Package", "path": "installation/tar.gz" }, { @@ -777,13 +782,13 @@ "path": "installation/docker" }, { - "title": "申请和安装许可证", + "title": "Application and Installation License", "path": "installation/license_setting" } ] }, { - "title": "数据采集", + "title": "Data Collection", "path": "configuration/introduction", "collapsed": true, "children": [ @@ -1156,17 +1161,17 @@ ] }, { - "title": "连接南向设备", + "title": "Connecting Southbound Equipment", "path": "configuration/groups-tags/groups-tags", "collapsed": true, "children": [ { - "title": "基于模板配置", + "title": "Template-based Configuration", "path": "configuration/templates/templates", "url": "https://raw.githubusercontent.com/emqx/neuron-docs/master/en_US/configuration/templates/templates.md" }, { - "title": "批量点位配置", + "title": "Batch Tag Configuration", "path": "configuration/import-export/import-export", "url": "https://raw.githubusercontent.com/emqx/neuron-docs/master/en_US/configuration/import-export/import-export.md" } @@ -1255,25 +1260,26 @@ ] }, { - "title": "订阅南向数据", + "title": "Subscribe to Southbound Data", "path": "configuration/subscription" }, { - "title": "管理插件模块", + "title": "Managing Plug-in Modules", "path": "configuration/ecp_edge_plugin" }, { - "title": "数据监控", + "title": "Data Monitoring", "path": "admin/monitoring" } ] }, { - "title": "数据流处理", + "title": "Data Stream Processing", "path": "streaming-processing/overview", + "collapsed": true, "children": [ { - "title": "数据源", + "title": "Data Sources", "path": "streaming-processing/source", "collapsed": true, "children": [ @@ -1326,24 +1332,24 @@ ] }, { - "title": "规则管理", + "title": "Rule Management", "path": "streaming-processing/rules" }, { - "title": "规则管道", + "title": "Rules Pipeline", "path": "streaming-processing/rule_pipeline" }, { - "title": "数据汇(Sink)", + "title": "Sink", "path": "streaming-processing/sink/sink", "collapsed": true, "children": [ { - "title": "数据模版", + "title": "Data Templates", "path": "streaming-processing/sink/data_template" }, { - "title": "内置插件", + "title": "Built-in Plugins", "children": [ { "title": "MQTT Sink", @@ -1366,11 +1372,11 @@ "path": "streaming-processing/sink/redis" }, { - "title": "文件 Sink", + "title": "File Sink", "path": "streaming-processing/sink/file" }, { - "title": "内存 Sink", + "title": "Memory Sink", "path": "streaming-processing/sink/memory" }, { @@ -1384,7 +1390,7 @@ ] }, { - "title": "预定义插件", + "title": "Predefined Plugins", "children": [ { "title": "SQL Sink", @@ -1419,24 +1425,48 @@ ] }, { - "title": "扩展", + "title": "Extensions", "path": "streaming-processing/extension", "children":[ { - "title": "外部服务", + "title": "External Services", "path": "streaming-processing/external_func" } ] }, { - "title": "配置管理", + "title": "Configuration Management", "path": "streaming-processing/config" } ] }, - { + { + "title": "HTTP API", + "path": "api/api", + "collapsed": true, + "children": [ + { + "title": "JWT Authentication", + "path": "api/jwt" + }, + { + "title": "Description of data types for data collection functions", + "path": "api/data-type" + }, + { + "title": "Description of the data collection function error code", + "path": "api/error-code" + }, + { + "title": "API Documentation", + "path": "https://docs.emqx.com/en/neuronex/latest/api/api-docs.html" + } + ] + }, + { "title": "Operations Guide", "path": "admin/introduction", + "collapsed": true, "children": [ { "title": "Configuration Management", @@ -1447,14 +1477,14 @@ "path": "admin/log-management" }, { - "title": "修改密码", + "title": "Change Password", "path": "admin/password" } ] - }, - { - "title": "发版历史", + }, + { + "title": "Publishing History", "path": "release_history/release_history" - } + } ] } \ No newline at end of file diff --git a/en_US/api/api.md b/en_US/api/api.md new file mode 100644 index 0000000..2dedc7f --- /dev/null +++ b/en_US/api/api.md @@ -0,0 +1,16 @@ +# HTTP API + +NeuronEX provides management and monitoring REST APIs that conform to the OpenAPI (Swagger) 3.1 specification. + +Once the NeuronEX service is started, you can access http://localhost:8085/api-docs/index.html to view the API documentation. You can also try executing some of the APIs directly in the Swagger UI. + +This section will guide you on how to get started with the NeuronEX REST API quickly. + +[JWT authentication:](./jwt.md) The API uses JWT authentication to ensure secure communication and authentication between IIoT platforms or monitoring applications and NeuronEX devices. This enhances the overall security of the system. + +[Data type description:](./data-type.md) To ensure that data is represented and interpreted clearly and consistently, the API describes the data types used. This facilitates seamless integration and analysis of data in IIoT platforms or monitoring applications. + +[Data collection function error code description:](./error-code.md) The API includes comprehensive error code descriptions that provide information about the nature and cause of the errors encountered. This helps with effective troubleshooting and issue resolution. + +[API documentation:](https://docs.emqx.com/en/neuronex/latest/api/api-docs.html) Includes the relevant APIs for system, data collection, and data statistics functions. + diff --git a/en_US/api/data-type.md b/en_US/api/data-type.md new file mode 100644 index 0000000..6419c5f --- /dev/null +++ b/en_US/api/data-type.md @@ -0,0 +1,116 @@ +# Data collection function data types + +## Concepts + +### Node + +In NeuronEX, each node can connect to a device or a northbound application. + +* In the device node, you can add and manage device tags. +* In the northbound node, you can select the data groups that you need to subscribe to. + +### Group + +You can create multiple data groups under each node to categorize tags. For example, if a device is connected to multiple temperature sensors and multiple humidity sensors, you can create two data groups, temperature and humidity to categorize the collected tags. NeuronEX uploads the collected data to the northbound application by group. + +### Tag + +You can create multiple collection tags under each group. For example, if a temperature sensor collects multiple temperature values, each temperature value is a tag. + +### Plugin + +In NeuronEX, each plugin corresponds to an implementation of a protocol. For example, one Modbus TCP protocol corresponds to one plugin, and the MQTT protocol corresponds to one plugin. + +## Data types + +* INT8 = 1 +* UINT8 = 2 +* INT16 = 3 +* UINT16 = 4 +* INT32 = 5 +* UINT32 = 6 +* INT64 = 7 +* UINT64 = 8 +* FLOAT = 9 +* DOUBLE = 10 +* BIT = 11 +* BOOL = 12 +* STRING = 13 +* BYTES = 14 +* ERROR = 15 +* WORD = 16 +* DWORD = 17 +* LWORD = 18 + +## Serial port + +### Baud rate + +* 115200 = 0 +* 57600 = 1 +* 38400 = 2 +* 19200 = 3 +* 9600 = 4 +* 4800 = 5 +* 2400 = 6 +* 1800 = 7 +* 1200 = 8 +* 600 = 9 + +### Parity + +* NONE = 0 +* ODD = 1 +* EVEN = 2 +* MARK = 3 +* SPACE = 4 + +### Stop bit + +* Stop_1 = 0 +* Stop_2 = 1 + +### Data bits + +* Data_5 = 0 +* Data_6 = 1 +* Data_7 = 2 +* Data_8 = 3 + +## Tag attributes + +* READ = 0x01 + +* WRITE = 0x02 + +* SUBSCRIBE = 0x04 + +## Node + +### Node type + +* DRIVER = 1 +* APP = 2 + +### Node control + +* START = 0 +* STOP = 1 + +### Node status + +* INIT = 1 +* READY = 2 +* RUNNING = 3 +* STOPPED = 4 + +### Node connection status + +* DISCONNECTED = 0 +* CONNECTED = 1 + +## Plugin type + +* STATIC = 0 +* SYSTEM = 1 +* CUSTOM = 2 diff --git a/en_US/api/error-code.md b/en_US/api/error-code.md new file mode 100644 index 0000000..e09d945 --- /dev/null +++ b/en_US/api/error-code.md @@ -0,0 +1,181 @@ +# Error codes + +This document describes the error codes that the data collection function will respond with when calling HTTP API and MQTT API. + +## API request error codes + +* 1000 Common error +* 1001 Internal error +* 1002 Invalid request body +* 1003 Invalid request param +* 1004 Missing token +* 1005 Token decoding error +* 1006 Token expired +* 1007 Token validation error +* 1008 Invalid token +* 1009 Username or password error +* 1010 Server busy +* 1011 File not found +* 1012 Password length too short or too long +* 1013 Password repeated +* 1014 Command execution failed +* 1015 IP address is invalid +* 1016 IP address is already in use +* 1017 Username is invalid +* 1018 Password is invalid + +## Add/delete/update node/tag/plugin/group error codes + +* 2002 Node already exists +* 2003 Node does not exist +* 2004 Node settings are invalid +* 2005 Node settings not found +* 2006 Node is not ready +* 2007 Node is running +* 2008 Node is not running +* 2009 Node is stopped +* 2010 Node name is too long +* 2011 Node is not allowed to be deleted +* 2012 Node is not allowed to be subscribed +* 2013 Node is not allowed to be updated +* 2014 Node does not support graph +* 2015 Node name is not allowed to be empty + +* 2101 Group is already subscribed +* 2102 Group is not subscribed +* 2103 Group is not allowed +* 2104 Group already exists +* 2105 Group parameters are invalid +* 2106 Group does not exist +* 2107 Group name is too long + +* 2201 Tag does not exist +* 2202 Tag name conflict +* 2203 Tag attributes are not supported +* 2204 Tag type is not supported +* 2205 Tag address format is invalid +* 2206 Tag name is too long +* 2207 Tag address is too long +* 2208 Tag description is too long +* 2209 Tag precision is invalid +* 2210 Tag already exists + +* 2301 Library not found +* 2302 Library information is invalid +* 2303 Library name conflict +* 2304 Library open failed +* 2305 Library module is invalid +* 2306 System library is not allowed to be deleted +* 2307 Plugin is not allowed to be instantiated +* 2308 Plugin does not support this architecture + +* 2400 License not found +* 2401 License is invalid +* 2402 License is expired +* 2403 License does not enable the plugin +* 2404 Reached the maximum number of nodes authorized by the license +* 2405 Reached the maximum number of points authorized by the license +* 2406 Hardware does not match the license +* 2407 License detects an abnormal clock +* 2408 License module is invalid + +* 2500 Template already exists +* 2501 Template does not exist +* 2502 Template name is too long + +## Common plugin error codes + +* 3000 Plugin read failed +* 3001 Plugin write failed +* 3002 Plugin is not connected +* 3003 Plugin tag is not allowed to read +* 3004 Plugin tag is not allowed to write +* 3007 Plugin tag type mismatch +* 3008 Plugin tag value is invalid +* 3009 Plugin protocol parsing failed +* 3010 Plugin is not running +* 3011 Plugin tag is not ready +* 3012 Plugin message disorder +* 3013 Plugin name is too long +* 3014 Plugin does not exist +* 3015 Plugin device is not responding +* 3016 Plugin does not support template +* 3017 Plugin does not support writing points + +## FILE error codes + +* 4100 String is too long +* 4101 Failed to open file +* 4102 Failed to read file +* 4103 Failed to write file + +## OPCUA error codes + +* 10001 opcua tag does not exist +* 10002 opcua connection configuration error +* 10003 opcua access timeout +* 10004 opcua tag is not readable +* 10005 opcua tag is not writable +* 10006 opcua tag is not supported + +## S7COMM error codes + +* 10101 Hardware error +* 10103 Object has no access permission +* 10105 Invalid address +* 10106 Data type is not supported +* 10107 Data types are inconsistent +* 10110 Object does not exist +* 10150 COTP connection disconnected +* 10151 S7 connection disconnected +* 10152 No value +* 10153 Value length is too short + +## KNX error codes + +* 10200 Device does not exist + +## NONA11 error codes + +* 10400 Invalid address + +## FINS error codes + +* 10500 fins connection disconnected +* 10501 fins error +* 10502 Local node error +* 10503 Target node error +* 10504 Controller error +* 10505 Service is not supported +* 10506 Routing table error +* 10507 Command format error +* 10508 Parameter error +* 10509 Cannot read +* 10510 Cannot write +* 10511 Current mode cannot be executed +* 10512 Unit does not exist +* 10513 Cannot start/stop +* 10514 Unit error +* 10515 Command error +* 10516 Access permission error +* 10517 Abort + +## FOCAS error codes + +* 10600 focas error + +## EtherNet/IP error codes + +* 10701 10744 EtherNet/IP error +* 10797 EtherNet/IP has no CIP connection +* 10798 EtherNet/IP data type mismatch +* 10799 EtherNet/IP is not registered session + +## Profinet IO error codes + +* 10800 Profinet IO is not recognized +* 10801 Profinet IO is not connected +* 10802 Profinet IO is not ready +* 10803 Profinet IO parameters are not ready +* 10804 Profinet IO does not have write permission +* 10805 Profinet IO is waiting for HELLO response \ No newline at end of file diff --git a/en_US/api/jwt.md b/en_US/api/jwt.md new file mode 100644 index 0000000..f778441 --- /dev/null +++ b/en_US/api/jwt.md @@ -0,0 +1,75 @@ +# Custom JWT + +To call APIs in NeuronEX, you need to first call the login interface to generate a JWT, and then call other interfaces to validate the JWT. The default JWT expires after one hour, and you can generate your own JWT to customize the expiration time. + +When a user requests a RESTful API, please enter the **Token** in the http request header in the following format: + +```go +Authorization: Bearer + XXXXXXXXXXXXXXX +``` + +If the **Token** is correct, NeuronEX will return the result; otherwise, it will return the `401` code. + +## What is JWT? + +JWT is an open standard (RFC 7519) for securely transmitting information. The JWT structure consists of three parts: header (Header), payload (Payload), and signature (Signature). + +NeuronEX first checks the subdirectories **etc** of the NeuronEX installation directory to see if the **iss** field contains a corresponding .pem or .pub file. Then, it checks the fields inside the file for validation. The JWT structure required in NeuronEX is as follows: + +```json +header +{ + "alg": "RS256", + "typ": "JWT" +} + +payload +{ + "iss": "username", + "iat": "1679622798", + "exp": "1679626398", + "aud": "neuron", + "bodyEncode": "0" +} +``` + +### Header + +* Token type (typ): JWT +* Algorithm used (alg): RS256 + +### Payload + +* Issuer (iss): Define it yourself according to your needs, but make sure it is consistent with the name of the public key file generated. For example, if iss is neuron, you need to generate the neuron.pem public key file. +* Issued at (iat): Issue time +* Expiration time (exp): Issue expiration time +* Audience (aud): NeuronEX, cannot be modified + +## Generate public and private keys + +Before signing the JWT, you need to generate a pair of public and private keys, and put the generated public key public.pem in the subdirectories of the NeuronEX installation directory **etc**. NeuronEX automatically loads files in **certs** and decodes them using the public key. + +:::tip +The default installation path for Docker and deb/rpm packages is `/opt/neuron`. + +The public key file name must be consistent with the issuer in the JWT. +::: + +Use the OpenSSL command-line tool to generate RSA keys: + +```bash +# Generate private key +$ openssl genrsa -out private.key 2048 +# Generate public key +$ openssl rsa -in private.key -out public.pem -pubout +``` + +## How to generate JWT? + +Use the [JWT official website](https://jwt.io/) tool to generate. In Decoded, fill in: + +* Algorithm: RS256 +* Header: Header +* Payload: Payload +* Verify Signature: Fill in the public and private keys `-----BEGIN PUBLIC KEY-----` and `-----BEGIN RSA PRIVATE KEY-----`. \ No newline at end of file diff --git a/en_US/api/plugin-setting.md b/en_US/api/plugin-setting.md new file mode 100644 index 0000000..1a30785 --- /dev/null +++ b/en_US/api/plugin-setting.md @@ -0,0 +1,338 @@ +# Plugin Configuration + +## MQTT + +```json +{ + "node": "", + "params": { + // required, subscription data reporting channel + "upload-topic": "", + // required, the json format selection of the reported data, 0 values (default), 1 tags + "format": 1, + // required, the size limit of memory cache + "cache-mem-size": 0, + // required, the size limit of disk cache + "cache-disk-size": 0, + + // required, MQTT Broker host + "host": "", + // required, MQTT Broker port number + "port": 1883, + // optional, username to use when connecting to the broker + "username": "", + // optional, the password to use when connecting to the broker + "password": "", + + // optional, whether to enable mqtt ssl + "ssl": true, + // ca file, only enabled when the ssl value is true, in which case it is required + "ca": "", + // optional, cert file, only enabled when the ssl value is true + "cert": "", + // optional, key file, only enabled when the ssl value is true + "key": "", + // optional, key file password, only enabled when the ssl value is true + "keypass": "" + } +} + +``` + +## Modbus + +### Modbus TCP QH + +```json +{ + "node": "modbus-tcp", + "params": { + // required, the ip of the remote device + "host": "127.0.0.1", + // required, the tcp port of the remote device + "port": 502, + // required, timeout for sending requests to the device + "timeout": 3000, + // required, 0 the neuron driver is used as the client, 1 the neuron driver is used as the server + "connection_mode": 0 + } +} +``` + +### Modbus TCP + +```json +{ + "node": "modbus-tcp", + "params": { + // required, 0 the neuron driver is used as the client, 1 the neuron driver is used as the server + "connection_mode": 0, + // required, client: host means the ip of the remote device. server: it means the ip used by neuron locally + "host": "127.0.0.1", + // required, client: port means the tcp port of the remote device. server: it means the tcp port used by neuron locally + "port": 502, + // required, timeout for sending requests to the device + "timeout": 3000, + // required, send reading instruction interval(ms) + "interval": 20, + // required, TCP transfer(0) or UDP transfer(1) + "transport_mode": 0, + // required, the maximum number of retries after a failed attempt to send a read command + "max_retries": 0, + // required, resend reading instruction interval(ms) after a failed attempt to send a read command + "retry_interval": 0 + } +} +``` + +### Modbus RTU + +#### Serial port connection settings + +```json +{ + "node": "modbus-rtu", + "params": { + // required, connection method, 0 serial port, 1 tcp, + "link": 0, + // required, timeout for sending requests to the device + "timeout": 3000, + // serial port required, use a serial device + "device": "dev/ttyUSB0", + // serial port required, stopbits + "stop": 0, + // serial port required, parity bit + "parity": 0, + // serial port required, baudrate + "baud": 4, + // serial port required, bytesize + "data": 3 + } +} +``` + +#### TCP Connection Settings + +```json +{ + "node": "modbus-rtu", + "params": { + // required, connection method, 0 serial port, 1 tcp, + "link": 1, + // required, timeout for sending requests to the device + "timeout": 3000, + // tcp required, client: host means the ip of the remote device. server: it means the ip used by neuron locally + "host": "127.0.0.1", + // tcp required, client: port means the tcp port of the remote device. server: it means the tcp port used by neuron locally + "port": 502, + // tcp required, 0 the neuron driver is used as the client, 1 the neuron driver is used as the server + "connection_mode": 0, + // required, send reading instruction interval(ms) + "interval": 20, + // required, the maximum number of retries after a failed attempt to send a read command + "max_retries": 0, + // required, resend reading instruction interval(ms) after a failed attempt to send a read command + "retry_interval": 0 + } +} +``` + +## OPC UA + +```json +{ + "node": "opc ua", + "params": { + // required, the address of the remote access plc + "url": "opc.tcp://127.0.0.1:4840/", + // optional, the user used when connecting to plc + "username": "", + // optional, the password used when connecting to plc + "password": "", + // optional, the certificate to provide login user authentication + "cert": "", + // optional, the private key to provide signature and encrypted transmissions + "key": "" + } +} +``` + +## Simemens S7 ISOTCP + +```json +{ + "node": "s7", + "params": { + // required, remote plc ip + "host": "127.0.0.1", + // required, remote plc port + "port": 102, + // required, plc rack number + "rack": 0, + // required, plc cpu slot + "slot": 1 + } +} +``` + +## OMRON FINS on TCP + +```json +{ + "node": "fins", + "params": { + // required, remote plc ip + "host": "127.0.0.1", + // required, remote plc port + "port": 9600 + } +} +``` + +## Mitsubishi MELSEC-Q E71 + +```json +{ + "node": "e71", + "params": { + // required, remote plc ip + "host": "127.0.0.1", + // required, remote plc port + "port": 2000 + } +} +``` + +## IEC 60870-5-104 + +```json +{ + "node": "iec104", + "params": { + // required, device ip + "host": "127.0.0.1", + // required, device port + "port": 2404, + // required, common address + "ca": 1, + // required, station interrogation interval + "interval": 10 + } +} +``` + +## BACnet/IP + +```json +{ + "node": "bacnet", + "params": { + // required, BACnet device ip + "host": "127.0.0.1", + // required, BACnet device port + "port": 47808 + } +} +``` + +## DL/T645-2007 + +### Serial Connection Settings + +```json +{ + "node": "dlt645-1", + "params": { + // required, connection method, 0 serial port, 1 tcp + "link": 0, + // required, contact address + "mail_address": 210220003011, + // required, timeout for sending requests to the device + "timeout": 3000, + // serial port required, use a serial device + "device": "dev/ttyUSB0", + // serial port required, stopbits + "stop": 0, + // serial port required, parity bit + "parity": 2, + // serial port required, baudrate + "baud": 4, + // serial port required, bytesize + "data": 3 + } +} +``` + +### TCP Connection Settings + +```json +{ + "node": "dlt645-1", + "params": { + // required, connection method, 0 serial port, 1 tcp + "link": 1, + // required, contact address + "mail_address": 210220003011, + // required, timeout for sending requests to the device + "timeout": 3000, + // tcp required, client: host means the ip of the remote device. server: it means the ip used by neuron locally + "host": "127.0.0.1", + // tcp required, client: port means the tcp port of the remote device. server: it means the tcp port used by neuron locally + "port": 502, + // tcp required, 0 the neuron driver is used as the client, 1 the neuron driver is used as the server + "connection_mode": 0 + } +} +``` + +## Sparkplug_B + +```json +{ + "node": "sparkplugb", + "params": { + // required, MQTT client ID, A unique identifier that can represent the edge end + "client-id": "saprk-test", + // required, the top-level logical group in Sparkplug_B + "group-id": "test", + // required, the egde node id + "node-id": "neuron1" + // required, whether to enable mqtt ssl, + "ssl": false, + // required, MQTT Broker host + "host": "broker.emqx.io", + // required, MQTT Broker port number + "port": 1883, + // optional, username to use when connecting to the broker + "username": "", + // optional, the password to use when connecting to the broker + "password": "", + // required, ca file, only enabled when the ssl value is true + "ca": "", + // optional, cert file, only enabled when the ssl value is true + "cert": "", + // optional, key file, only enabled when the ssl value is true + "key": "", + // optional, key file password, only enabled when the ssl value is true + "keypass": "" + } +} +``` + +## NON A11 + +```json +{ + "node": "nona11", + "params": { + // required, 0 the neuron driver is used as the client, 1 the neuron driver is used as the server + "connection_mode": 0, + // required, client: port means the tcp port of the remote device. server: it means the tcp port used by neuron locally + "host": "127.0.0.1", + // required, client: port means the tcp port of the remote device. server: it means the tcp port used by neuron locally + "port": 10, + // required, NON-A11 device site number + "site": 1 + } +} +``` diff --git a/en_US/introduction/architecture.md b/en_US/introduction/architecture.md new file mode 100644 index 0000000..71ac28a --- /dev/null +++ b/en_US/introduction/architecture.md @@ -0,0 +1,67 @@ +# NeuronEX 架构 + +NeuronEX 是一款面向工业领域的设备数据采集和边缘智能分析的软件,主要部署在工业现场,实现工业设备通信及工业总线协议采集、工业系统数据集成、边端数据过滤分析和AI算法集成,以及工业互联网平台对接集成等功能,为工业场景提供低延迟的数据接入管理及智能分析服务。 + +架构 + +如上图所示,NeuronEX 主要分为`数据采集接入`、`数据处理分析`、`数据转发存储`以及`系统管理`等模块。 + +## 数据采集接入模块 + +在数据采集接入方面,NeuronEX 不仅支持**工业设备数据采集**,还支持工业现场**多源数据接入集成**。 + +### 工业设备数据采集 + +NeuronEX 通过插件的方式实现对各种工业协议的支持,包括 Modbus、OPC UA、EtherNet/IP、IEC104、BACnet、Siemens PLC、Mitsubishi PLC等。满足智能制造、石油石化、钢铁冶金、能源电力以及楼宇自动化等各个行业的数据采集接入需求。 + +### 多源数据接入集成 +NeuronEX 还具备各类数据灵活获取的能力,在工业场景下,可以支持: + +- MES、WMS、ERP系统对接 + + [HTTP Pull](../streaming-processing/http_pull.md)及[HTTP Push](../streaming-processing/http_push.md)的方式与MES、WMS、ERP系统对接,进行数据的双向收发 + +- 数据库对接 + + SQLite、MySQL、SQLserver等数据库数据获取 + +- 企业服务总线(ESB)对接 + + [HTTP Pull](../streaming-processing/http_pull.md)及[HTTP Push](../streaming-processing/http_push.md)的方式双向对接企业服务总线,向企业服务总线推送数据以及接收数据 + +- [文件](../streaming-processing/file.md)数据采集 + +- 视频流接入分析 + +## 数据处理分析模块 + +NeuronEX 提供低延迟的数据处理分析,能够更快速地将数据在多系统间传递,结合 AI/ML 算法,可以实现智能决策与控制。此外,边缘端分析还可以对数据做预处理和边缘计算,减少云边通讯负载及后端存储压力。 + +NeuronEX 的数据处理分析模块可提供以下能力: + +- 数据标准化 + + NeuronEX支持对工业场景各类型设备的数据进行标准化,包括数据类型转换、数据单位转换、数据格式转换等,满足工业场景下数据标准化的需求。 + +- 数据过滤清洗 + + NeuronEX 内置数据抽取、转换、过滤、排序、分组、聚合、连接等功能,内置 160+ 各类函数,覆盖数学运算、字符串处理、聚合运算和哈希运算等,可满足各种数据过滤清洗的需求。 + +- 实时数据流处理 + + NeuronEX 提供了对数据流实时低延迟处理的能力,支持工业场景下多系统之间的数据实时交互、协同处理,实现全域的互联互通及智能决策。 + +- AI/ML 算法集成 + + NeuronEX 支持用户自定义函数扩展和 AI 算法集成,提供智能数据分析能力。 + + +## 数据转发存储模块 + +NeuronEX 支持将数据转发到云平台或外部系统,实现数据的传递,支持MQTT、SparkplugB、HTTP、Websocket等数据传递方式,也支持将数据存储到数据库中。 + + +## 系统管理模块 + +NeuronEX 系统管理模块包含系统配置、认证、日志、监控告警等功能。 +如何使用NeuronEX 系统管理模块,请参考 [运维指南](../admin/introduction.md)。 \ No newline at end of file diff --git a/zh_CN/api/api.md b/zh_CN/api/api.md index f79e7ca..fd2634d 100644 --- a/zh_CN/api/api.md +++ b/zh_CN/api/api.md @@ -1,6 +1,6 @@ # HTTP API -NeuronEX 提供了管理监控 REST API,这些 API 遵循 OpenAPI (Swagger) 3.0 规范。 +NeuronEX 提供了管理监控 REST API,这些 API 遵循 OpenAPI (Swagger) 3.1 规范。 NeuronEX 服务启动后,您可以访问 http://localhost:8085/api-docs/index.html 来查看 API 的文档。还可以直接在 Swagger UI 上尝试执行一些 API。 diff --git a/zh_CN/api/data-type.md b/zh_CN/api/data-type.md index a6de207..959b724 100644 --- a/zh_CN/api/data-type.md +++ b/zh_CN/api/data-type.md @@ -10,7 +10,7 @@ ### Group 组 -每个节点底下都可以创建多个数据组,对点位进行分类。例如,一台设备连接多个温度传感器和多个湿度传感器,可以创建温度和湿度两个数据组对采集的点位进行分类。Neuron 按组为单位,将采集数据上传到北向应用。 +每个节点底下都可以创建多个数据组,对点位进行分类。例如,一台设备连接多个温度传感器和多个湿度传感器,可以创建温度和湿度两个数据组对采集的点位进行分类。NeuronEX 按组为单位,将采集数据上传到北向应用。 ### Tag 点位 在每个组底下可以创建多个采集点位,例如,一台温度传感器采集多个温度值,一个温度值作为一个点位。 diff --git a/zh_CN/api/error-code.md b/zh_CN/api/error-code.md index 25e4f4f..ec5d731 100644 --- a/zh_CN/api/error-code.md +++ b/zh_CN/api/error-code.md @@ -4,10 +4,8 @@ ## api 请求错误代码 -* 1000 通用错误 - -* 1001 内部错误 - +* 1000 通用错误 +* 1001 内部错误 * 1002 请求 body 无效 * 1003 请求 param 无效 * 1004 缺少令牌 diff --git a/zh_CN/api/jwt.md b/zh_CN/api/jwt.md index 5f35344..a14cdb6 100644 --- a/zh_CN/api/jwt.md +++ b/zh_CN/api/jwt.md @@ -44,7 +44,7 @@ payload * 签发者(iss):根据需求自己定义,但要确保与生成的公钥文件名称一致。例如,iss 为 neuron,则需要生成 neuron.pem 的公钥文件。 * 签发时间(iat):签发时间 * 过期时间(exp):签发过期时间 -* 受众(aud):neuron,不能修改 +* 受众(aud):NeuronEX,不能修改 ## 生成公私钥