diff options
author | hasan.men <hasan.men@bosphorusiss.com> | 2020-11-17 17:22:07 +0300 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2020-11-17 15:04:43 -0800 |
commit | 4fb0fb993b482f13abd1294957afa03f421ebe74 (patch) | |
tree | 42a10b6a81918873d21b12e9a0e08f0f0b36f57b | |
parent | c499aaeef80b5af8d20521658449c4148f3d0806 (diff) | |
download | meta-openembedded-4fb0fb993b482f13abd1294957afa03f421ebe74.tar.gz |
thingsboard-gateway: Add recipe for v2.5.2
Signed-off-by: Khem Raj <raj.khem@gmail.com>
16 files changed, 1326 insertions, 0 deletions
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json new file mode 100644 index 0000000000..e36a2165d1 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json | |||
@@ -0,0 +1,58 @@ | |||
1 | { | ||
2 | "general": { | ||
3 | "objectName": "TB_gateway", | ||
4 | "address": "192.168.188.181:1052", | ||
5 | "objectIdentifier": 599, | ||
6 | "maxApduLengthAccepted": 1024, | ||
7 | "segmentationSupported": "segmentedBoth", | ||
8 | "vendorIdentifier": 15 | ||
9 | }, | ||
10 | "devices": [ | ||
11 | { | ||
12 | "deviceName": "BACnet Device ${objectName}", | ||
13 | "deviceType": "default", | ||
14 | "address": "192.168.188.181:10520", | ||
15 | "pollPeriod": 10000, | ||
16 | "attributes": [ | ||
17 | { | ||
18 | "key": "temperature", | ||
19 | "type": "string", | ||
20 | "objectId": "analogOutput:1", | ||
21 | "propertyId": "presentValue" | ||
22 | } | ||
23 | ], | ||
24 | "timeseries": [ | ||
25 | { | ||
26 | "key": "state", | ||
27 | "type": "bool", | ||
28 | "objectId": "binaryValue:1", | ||
29 | "propertyId": "presentValue" | ||
30 | } | ||
31 | ], | ||
32 | "attributeUpdates": [ | ||
33 | { | ||
34 | "key": "brightness", | ||
35 | "requestType": "writeProperty", | ||
36 | "objectId": "analogOutput:1", | ||
37 | "propertyId": "presentValue" | ||
38 | } | ||
39 | ], | ||
40 | "serverSideRpc": [ | ||
41 | { | ||
42 | "method": "set_state", | ||
43 | "requestType": "writeProperty", | ||
44 | "requestTimeout": 10000, | ||
45 | "objectId": "binaryOutput:1", | ||
46 | "propertyId": "presentValue" | ||
47 | }, | ||
48 | { | ||
49 | "method": "get_state", | ||
50 | "requestType": "readProperty", | ||
51 | "requestTimeout": 10000, | ||
52 | "objectId": "binaryOutput:1", | ||
53 | "propertyId": "presentValue" | ||
54 | } | ||
55 | ] | ||
56 | } | ||
57 | ] | ||
58 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json new file mode 100755 index 0000000000..2a5da3f41d --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json | |||
@@ -0,0 +1,53 @@ | |||
1 | { | ||
2 | "name": "BLE Connector", | ||
3 | "rescanIntervalSeconds": 100, | ||
4 | "checkIntervalSeconds": 100, | ||
5 | "scanTimeSeconds": 5, | ||
6 | "passiveScanMode": true, | ||
7 | "devices": [ | ||
8 | { | ||
9 | "name": "Temperature and humidity sensor", | ||
10 | "MACAddress": "4C:65:A8:DF:85:C0", | ||
11 | "addrType": "public", | ||
12 | "telemetry": [ | ||
13 | { | ||
14 | "key": "temperature", | ||
15 | "method": "notify", | ||
16 | "characteristicUUID": "226CAA55-6476-4566-7562-66734470666D", | ||
17 | "byteFrom": 2, | ||
18 | "byteTo": 6 | ||
19 | }, | ||
20 | { | ||
21 | "key": "humidity", | ||
22 | "method": "notify", | ||
23 | "characteristicUUID": "226CAA55-6476-4566-7562-66734470666D", | ||
24 | "byteFrom": 9, | ||
25 | "byteTo": 13 | ||
26 | } | ||
27 | ], | ||
28 | "attributes": [ | ||
29 | { | ||
30 | "key": "name", | ||
31 | "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB", | ||
32 | "method": "read", | ||
33 | "byteFrom": 0, | ||
34 | "byteTo": -1 | ||
35 | } | ||
36 | ], | ||
37 | "attributeUpdates": [ | ||
38 | { | ||
39 | "attributeOnThingsBoard": "sharedName", | ||
40 | "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB" | ||
41 | } | ||
42 | ], | ||
43 | "serverSideRpc": [ | ||
44 | { | ||
45 | "methodRPC": "rpcMethod1", | ||
46 | "withResponse": true, | ||
47 | "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB", | ||
48 | "methodProcessing": "read" | ||
49 | } | ||
50 | ] | ||
51 | } | ||
52 | ] | ||
53 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json new file mode 100644 index 0000000000..b5cec0045a --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json | |||
@@ -0,0 +1,89 @@ | |||
1 | { | ||
2 | "interface": "socketcan", | ||
3 | "channel": "vcan0", | ||
4 | "backend": { | ||
5 | "fd": true | ||
6 | }, | ||
7 | "reconnectPeriod": 5, | ||
8 | "devices": [ | ||
9 | { | ||
10 | "name": "Car", | ||
11 | "sendDataOnlyOnChange": false, | ||
12 | "enableUnknownRpc": true, | ||
13 | "strictEval": false, | ||
14 | "attributes": [ | ||
15 | { | ||
16 | "key": "isDriverDoorOpened", | ||
17 | "nodeId": 41, | ||
18 | "command": "2:2:big:8717", | ||
19 | "value": "4:1:int", | ||
20 | "expression": "bool(value & 0b00000100)", | ||
21 | "polling": { | ||
22 | "type": "once", | ||
23 | "dataInHex": "AB CD AB CD" | ||
24 | } | ||
25 | } | ||
26 | ], | ||
27 | "timeseries": [ | ||
28 | { | ||
29 | "key": "rpm", | ||
30 | "nodeId": 1918, | ||
31 | "isExtendedId": true, | ||
32 | "command": "2:2:big:48059", | ||
33 | "value": "4:2:big:int", | ||
34 | "expression": "value / 4", | ||
35 | "polling": { | ||
36 | "type": "always", | ||
37 | "period": 5, | ||
38 | "dataInHex": "aaaa bbbb aaaa bbbb" | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "key": "milliage", | ||
43 | "nodeId": 1918, | ||
44 | "isExtendedId": true, | ||
45 | "value": "4:2:little:int", | ||
46 | "expression": "value * 10", | ||
47 | "polling": { | ||
48 | "type": "always", | ||
49 | "period": 30, | ||
50 | "dataInHex": "aa bb cc dd ee ff aa bb" | ||
51 | } | ||
52 | } | ||
53 | ], | ||
54 | "attributeUpdates": [ | ||
55 | { | ||
56 | "attributeOnThingsBoard": "softwareVersion", | ||
57 | "nodeId": 64, | ||
58 | "isExtendedId": true, | ||
59 | "dataLength": 4, | ||
60 | "dataExpression": "value + 5", | ||
61 | "dataByteorder": "little" | ||
62 | } | ||
63 | ], | ||
64 | "serverSideRpc": [ | ||
65 | { | ||
66 | "method": "sendSameData", | ||
67 | "nodeId": 4, | ||
68 | "isExtendedId": true, | ||
69 | "isFd": true, | ||
70 | "bitrateSwitch": true, | ||
71 | "dataInHex": "aa bb cc dd ee ff aa bb aa bb cc d ee ff" | ||
72 | }, | ||
73 | { | ||
74 | "method": "setLightLevel", | ||
75 | "nodeId": 5, | ||
76 | "dataLength": 2, | ||
77 | "dataByteorder": "little", | ||
78 | "dataBefore": "00AA" | ||
79 | }, | ||
80 | { | ||
81 | "method": "setSpeed", | ||
82 | "nodeId": 16, | ||
83 | "dataAfter": "0102", | ||
84 | "dataExpression": "userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed" | ||
85 | } | ||
86 | ] | ||
87 | } | ||
88 | ] | ||
89 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json new file mode 100755 index 0000000000..0aee5cb765 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json | |||
@@ -0,0 +1,33 @@ | |||
1 | { | ||
2 | "name": "Custom serial connector", | ||
3 | "devices": [ | ||
4 | { | ||
5 | "name": "CustomSerialDevice1", | ||
6 | "type": "default", | ||
7 | "port": "/dev/ttyUSB0", | ||
8 | "baudrate": 9600, | ||
9 | "converter": "CustomSerialUplinkConverter", | ||
10 | "telemetry": [ | ||
11 | { | ||
12 | "type": "byte", | ||
13 | "key": "humidity", | ||
14 | "untilDelimiter": "\r" | ||
15 | } | ||
16 | ], | ||
17 | "attributes":[ | ||
18 | { | ||
19 | "key": "SerialNumber", | ||
20 | "type": "string", | ||
21 | "fromByte": 4, | ||
22 | "toByte": -1 | ||
23 | } | ||
24 | ], | ||
25 | "attributeUpdates": [ | ||
26 | { | ||
27 | "attributeOnThingsBoard": "attr1", | ||
28 | "stringToDevice": "value = ${attr1}\n" | ||
29 | } | ||
30 | ] | ||
31 | } | ||
32 | ] | ||
33 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf new file mode 100755 index 0000000000..d66c2b84a8 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf | |||
@@ -0,0 +1,77 @@ | |||
1 | [loggers] | ||
2 | keys=root, service, connector, converter, tb_connection, storage, extension | ||
3 | [handlers] | ||
4 | keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler | ||
5 | [formatters] | ||
6 | keys=LogFormatter | ||
7 | [logger_root] | ||
8 | level=ERROR | ||
9 | handlers=consoleHandler | ||
10 | [logger_connector] | ||
11 | level=INFO | ||
12 | handlers=connectorHandler | ||
13 | formatter=LogFormatter | ||
14 | qualname=connector | ||
15 | [logger_storage] | ||
16 | level=INFO | ||
17 | handlers=storageHandler | ||
18 | formatter=LogFormatter | ||
19 | qualname=storage | ||
20 | [logger_tb_connection] | ||
21 | level=INFO | ||
22 | handlers=tb_connectionHandler | ||
23 | formatter=LogFormatter | ||
24 | qualname=tb_connection | ||
25 | [logger_service] | ||
26 | level=INFO | ||
27 | handlers=serviceHandler | ||
28 | formatter=LogFormatter | ||
29 | qualname=service | ||
30 | [logger_converter] | ||
31 | level=INFO | ||
32 | handlers=converterHandler | ||
33 | formatter=LogFormatter | ||
34 | qualname=converter | ||
35 | [logger_extension] | ||
36 | level=INFO | ||
37 | handlers=connectorHandler | ||
38 | formatter=LogFormatter | ||
39 | qualname=extension | ||
40 | [handler_consoleHandler] | ||
41 | class=StreamHandler | ||
42 | level=INFO | ||
43 | formatter=LogFormatter | ||
44 | args=(sys.stdout,) | ||
45 | [handler_connectorHandler] | ||
46 | level=INFO | ||
47 | class=logging.handlers.TimedRotatingFileHandler | ||
48 | formatter=LogFormatter | ||
49 | args=("./logs/connector.log", "d", 1, 7,) | ||
50 | [handler_storageHandler] | ||
51 | level=INFO | ||
52 | class=logging.handlers.TimedRotatingFileHandler | ||
53 | formatter=LogFormatter | ||
54 | args=("./logs/storage.log", "d", 1, 7,) | ||
55 | [handler_serviceHandler] | ||
56 | level=INFO | ||
57 | class=logging.handlers.TimedRotatingFileHandler | ||
58 | formatter=LogFormatter | ||
59 | args=("./logs/service.log", "d", 1, 7,) | ||
60 | [handler_converterHandler] | ||
61 | level=INFO | ||
62 | class=logging.handlers.TimedRotatingFileHandler | ||
63 | formatter=LogFormatter | ||
64 | args=("./logs/converter.log", "d", 1, 3,) | ||
65 | [handler_extensionHandler] | ||
66 | level=INFO | ||
67 | class=logging.handlers.TimedRotatingFileHandler | ||
68 | formatter=LogFormatter | ||
69 | args=("./logs/extension.log", "d", 1, 3,) | ||
70 | [handler_tb_connectionHandler] | ||
71 | level=INFO | ||
72 | class=logging.handlers.TimedRotatingFileHandler | ||
73 | formatter=LogFormatter | ||
74 | args=("./logs/tb_connection.log", "d", 1, 3,) | ||
75 | [formatter_LogFormatter] | ||
76 | format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s - %(lineno)d - %(message)s" | ||
77 | datefmt="%Y-%m-%d %H:%M:%S" \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json new file mode 100755 index 0000000000..479d8aa4d0 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json | |||
@@ -0,0 +1,169 @@ | |||
1 | { | ||
2 | "server": { | ||
3 | "type": "tcp", | ||
4 | "host": "127.0.0.1", | ||
5 | "port": 5020, | ||
6 | "timeout": 35, | ||
7 | "method": "socket", | ||
8 | "byteOrder": "BIG", | ||
9 | "devices": [ | ||
10 | { | ||
11 | "unitId": 1, | ||
12 | "deviceName": "Temp Sensor", | ||
13 | "attributesPollPeriod": 5000, | ||
14 | "timeseriesPollPeriod": 5000, | ||
15 | "sendDataOnlyOnChange": true, | ||
16 | "attributes": [ | ||
17 | { | ||
18 | "tag": "string_read", | ||
19 | "type": "string", | ||
20 | "functionCode": 4, | ||
21 | "objectsCount": 4, | ||
22 | "address": 1 | ||
23 | }, | ||
24 | { | ||
25 | "tag": "bits_read", | ||
26 | "type": "bits", | ||
27 | "functionCode": 4, | ||
28 | "objectsCount": 1, | ||
29 | "address": 5 | ||
30 | }, | ||
31 | { | ||
32 | "tag": "8int_read", | ||
33 | "type": "8int", | ||
34 | "functionCode": 4, | ||
35 | "objectsCount": 1, | ||
36 | "address": 6 | ||
37 | }, | ||
38 | { | ||
39 | "tag": "16int_read", | ||
40 | "type": "16int", | ||
41 | "functionCode": 4, | ||
42 | "objectsCount": 1, | ||
43 | "address": 7 | ||
44 | }, | ||
45 | { | ||
46 | "tag": "32int_read_divider", | ||
47 | "type": "32int", | ||
48 | "functionCode": 4, | ||
49 | "objectsCount": 2, | ||
50 | "address": 8, | ||
51 | "divider": 10 | ||
52 | }, | ||
53 | { | ||
54 | "tag": "8int_read_multiplier", | ||
55 | "type": "8int", | ||
56 | "functionCode": 4, | ||
57 | "objectsCount": 1, | ||
58 | "address": 10, | ||
59 | "multiplier": 10 | ||
60 | }, | ||
61 | { | ||
62 | "tag": "32int_read", | ||
63 | "type": "32int", | ||
64 | "functionCode": 4, | ||
65 | "objectsCount": 2, | ||
66 | "address": 11 | ||
67 | }, | ||
68 | { | ||
69 | "tag": "64int_read", | ||
70 | "type": "64int", | ||
71 | "functionCode": 4, | ||
72 | "objectsCount": 4, | ||
73 | "address": 13 | ||
74 | } | ||
75 | ], | ||
76 | "timeseries": [ | ||
77 | { | ||
78 | "tag": "8uint_read", | ||
79 | "type": "8uint", | ||
80 | "functionCode": 4, | ||
81 | "objectsCount": 1, | ||
82 | "address": 17 | ||
83 | }, | ||
84 | { | ||
85 | "tag": "16uint_read", | ||
86 | "type": "16uint", | ||
87 | "functionCode": 4, | ||
88 | "objectsCount": 2, | ||
89 | "address": 18 | ||
90 | }, | ||
91 | { | ||
92 | "tag": "32uint_read", | ||
93 | "type": "32uint", | ||
94 | "functionCode": 4, | ||
95 | "objectsCount": 4, | ||
96 | "address": 20 | ||
97 | }, | ||
98 | { | ||
99 | "tag": "64uint_read", | ||
100 | "type": "64uint", | ||
101 | "functionCode": 4, | ||
102 | "objectsCount": 1, | ||
103 | "address": 24 | ||
104 | }, | ||
105 | { | ||
106 | "tag": "16float_read", | ||
107 | "type": "16float", | ||
108 | "functionCode": 4, | ||
109 | "objectsCount": 1, | ||
110 | "address": 25 | ||
111 | }, | ||
112 | { | ||
113 | "tag": "32float_read", | ||
114 | "type": "32float", | ||
115 | "functionCode": 4, | ||
116 | "objectsCount": 2, | ||
117 | "address": 26 | ||
118 | }, | ||
119 | { | ||
120 | "tag": "64float_read", | ||
121 | "type": "64float", | ||
122 | "functionCode": 4, | ||
123 | "objectsCount": 4, | ||
124 | "address": 28 | ||
125 | } | ||
126 | ], | ||
127 | "attributeUpdates": [ | ||
128 | { | ||
129 | "tag": "shared_attribute_write", | ||
130 | "type": "32int", | ||
131 | "functionCode": 6, | ||
132 | "objectsCount": 2, | ||
133 | "address": 29 | ||
134 | } | ||
135 | ], | ||
136 | "rpc": [ | ||
137 | { | ||
138 | "tag": "setValue", | ||
139 | "type": "bits", | ||
140 | "functionCode": 5, | ||
141 | "objectsCount": 1, | ||
142 | "address": 31 | ||
143 | }, | ||
144 | { | ||
145 | "tag": "getValue", | ||
146 | "type": "bits", | ||
147 | "functionCode": 1, | ||
148 | "objectsCount": 1, | ||
149 | "address": 31 | ||
150 | }, | ||
151 | { | ||
152 | "tag": "setCPUFanSpeed", | ||
153 | "type": "32int", | ||
154 | "functionCode": 16, | ||
155 | "objectsCount": 2, | ||
156 | "address": 33 | ||
157 | }, | ||
158 | { | ||
159 | "tag":"getCPULoad", | ||
160 | "type": "32int", | ||
161 | "functionCode": 4, | ||
162 | "objectsCount": 2, | ||
163 | "address": 35 | ||
164 | } | ||
165 | ] | ||
166 | } | ||
167 | ] | ||
168 | } | ||
169 | } | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json new file mode 100755 index 0000000000..19b38e3f7b --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json | |||
@@ -0,0 +1,29 @@ | |||
1 | { | ||
2 | "server": { | ||
3 | "name": "Modbus Default Server", | ||
4 | "type": "serial", | ||
5 | "method": "rtu", | ||
6 | "port": "/dev/ttyUSB0", | ||
7 | "baudrate": 19200, | ||
8 | "timeout": 35, | ||
9 | "devices": [ | ||
10 | { | ||
11 | "unitId": 1, | ||
12 | "deviceName": "Temp Sensor", | ||
13 | "attributesPollPeriod": 5000, | ||
14 | "timeseriesPollPeriod": 5000, | ||
15 | "sendDataOnlyOnChange": true, | ||
16 | "attributes": [ | ||
17 | { | ||
18 | "byteOrder": "BIG", | ||
19 | "tag": "test", | ||
20 | "type": "long", | ||
21 | "functionCode": 4, | ||
22 | "registerCount": 1, | ||
23 | "address": 4 | ||
24 | } | ||
25 | ] | ||
26 | } | ||
27 | ] | ||
28 | } | ||
29 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json new file mode 100755 index 0000000000..6b78a7cec9 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json | |||
@@ -0,0 +1,132 @@ | |||
1 | { | ||
2 | "broker": { | ||
3 | "name":"Default Local Broker", | ||
4 | "host":"127.0.0.1", | ||
5 | "port":1883, | ||
6 | "clientId": "ThingsBoard_gateway", | ||
7 | "security": { | ||
8 | "type": "basic", | ||
9 | "username": "user", | ||
10 | "password": "password" | ||
11 | } | ||
12 | }, | ||
13 | "mapping": [ | ||
14 | { | ||
15 | "topicFilter": "/sensor/data", | ||
16 | "converter": { | ||
17 | "type": "json", | ||
18 | "deviceNameJsonExpression": "${serialNumber}", | ||
19 | "deviceTypeJsonExpression": "${sensorType}", | ||
20 | "timeout": 60000, | ||
21 | "attributes": [ | ||
22 | { | ||
23 | "type": "string", | ||
24 | "key": "model", | ||
25 | "value": "${sensorModel}" | ||
26 | }, | ||
27 | { | ||
28 | "type": "string", | ||
29 | "key": "${sensorModel}", | ||
30 | "value": "on" | ||
31 | } | ||
32 | ], | ||
33 | "timeseries": [ | ||
34 | { | ||
35 | "type": "double", | ||
36 | "key": "temperature", | ||
37 | "value": "${temp}" | ||
38 | }, | ||
39 | { | ||
40 | "type": "double", | ||
41 | "key": "humidity", | ||
42 | "value": "${hum}" | ||
43 | } | ||
44 | ] | ||
45 | } | ||
46 | }, | ||
47 | { | ||
48 | "topicFilter": "/sensor/+/data", | ||
49 | "converter": { | ||
50 | "type": "json", | ||
51 | "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)", | ||
52 | "deviceTypeTopicExpression": "Thermometer", | ||
53 | "timeout": 60000, | ||
54 | "attributes": [ | ||
55 | { | ||
56 | "type": "string", | ||
57 | "key": "model", | ||
58 | "value": "${sensorModel}" | ||
59 | } | ||
60 | ], | ||
61 | "timeseries": [ | ||
62 | { | ||
63 | "type": "double", | ||
64 | "key": "temperature", | ||
65 | "value": "${temp}" | ||
66 | }, | ||
67 | { | ||
68 | "type": "double", | ||
69 | "key": "humidity", | ||
70 | "value": "${hum}" | ||
71 | } | ||
72 | ] | ||
73 | } | ||
74 | }, | ||
75 | { | ||
76 | "topicFilter": "/custom/sensors/+", | ||
77 | "converter": { | ||
78 | "type": "custom", | ||
79 | "extension": "CustomMqttUplinkConverter", | ||
80 | "extension-config": { | ||
81 | "temperatureBytes" : 2, | ||
82 | "humidityBytes" : 2, | ||
83 | "batteryLevelBytes" : 1 | ||
84 | } | ||
85 | } | ||
86 | } | ||
87 | ], | ||
88 | "connectRequests": [ | ||
89 | { | ||
90 | "topicFilter": "sensor/connect", | ||
91 | "deviceNameJsonExpression": "${SerialNumber}" | ||
92 | }, | ||
93 | { | ||
94 | "topicFilter": "sensor/+/connect", | ||
95 | "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)" | ||
96 | } | ||
97 | ], | ||
98 | "disconnectRequests": [ | ||
99 | { | ||
100 | "topicFilter": "sensor/disconnect", | ||
101 | "deviceNameJsonExpression": "${SerialNumber}" | ||
102 | }, | ||
103 | { | ||
104 | "topicFilter": "sensor/+/disconnect", | ||
105 | "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)" | ||
106 | } | ||
107 | ], | ||
108 | "attributeUpdates": [ | ||
109 | { | ||
110 | "deviceNameFilter": "SmartMeter.*", | ||
111 | "attributeFilter": "uploadFrequency", | ||
112 | "topicExpression": "sensor/${deviceName}/${attributeKey}", | ||
113 | "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}" | ||
114 | } | ||
115 | ], | ||
116 | "serverSideRpc": [ | ||
117 | { | ||
118 | "deviceNameFilter": ".*", | ||
119 | "methodFilter": "echo", | ||
120 | "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}", | ||
121 | "responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}", | ||
122 | "responseTimeout": 10000, | ||
123 | "valueExpression": "${params}" | ||
124 | }, | ||
125 | { | ||
126 | "deviceNameFilter": ".*", | ||
127 | "methodFilter": "no-reply", | ||
128 | "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}", | ||
129 | "valueExpression": "${params}" | ||
130 | } | ||
131 | ] | ||
132 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json new file mode 100644 index 0000000000..c93992a262 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json | |||
@@ -0,0 +1,54 @@ | |||
1 | { | ||
2 | "connection": { | ||
3 | "str": "Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;", | ||
4 | "attributes": { | ||
5 | "autocommit": true, | ||
6 | "timeout": 0 | ||
7 | }, | ||
8 | "encoding": "utf-8", | ||
9 | "decoding": { | ||
10 | "char": "utf-8", | ||
11 | "wchar": "utf-8", | ||
12 | "metadata": "utf-16le" | ||
13 | }, | ||
14 | "reconnect": true, | ||
15 | "reconnectPeriod": 60 | ||
16 | }, | ||
17 | "pyodbc": { | ||
18 | "pooling": false | ||
19 | }, | ||
20 | "polling": { | ||
21 | "query": "SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10", | ||
22 | "period": 10, | ||
23 | "iterator": { | ||
24 | "column": "ts", | ||
25 | "query": "SELECT MIN(ts) - 1 FROM ts_kv", | ||
26 | "persistent": false | ||
27 | } | ||
28 | }, | ||
29 | "mapping": { | ||
30 | "device": { | ||
31 | "type": "postgres", | ||
32 | "name": "'ODBC ' + entity_id" | ||
33 | }, | ||
34 | "sendDataOnlyOnChange": false, | ||
35 | "attributes": "*", | ||
36 | "timeseries": [ | ||
37 | { | ||
38 | "name": "value", | ||
39 | "value": "[i for i in [str_v, long_v, dbl_v,bool_v] if i is not None][0]" | ||
40 | } | ||
41 | ] | ||
42 | }, | ||
43 | "serverSideRpc": { | ||
44 | "enableUnknownRpc": false, | ||
45 | "overrideRpcConfig": true, | ||
46 | "methods": [ | ||
47 | "procedureOne", | ||
48 | { | ||
49 | "name": "procedureTwo", | ||
50 | "args": [ "One", 2, 3.0 ] | ||
51 | } | ||
52 | ] | ||
53 | } | ||
54 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json new file mode 100755 index 0000000000..1deed7d524 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json | |||
@@ -0,0 +1,49 @@ | |||
1 | { | ||
2 | "server": { | ||
3 | "name": "OPC-UA Default Server", | ||
4 | "url": "localhost:4840/freeopcua/server/", | ||
5 | "timeoutInMillis": 5000, | ||
6 | "scanPeriodInMillis": 5000, | ||
7 | "disableSubscriptions":false, | ||
8 | "subCheckPeriodInMillis": 100, | ||
9 | "showMap": false, | ||
10 | "security": "Basic128Rsa15", | ||
11 | "identity": { | ||
12 | "type": "anonymous" | ||
13 | }, | ||
14 | "mapping": [ | ||
15 | { | ||
16 | "deviceNodePattern": "Root\\.Objects\\.Device1", | ||
17 | "deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}", | ||
18 | "attributes": [ | ||
19 | { | ||
20 | "key": "temperature °C", | ||
21 | "path": "${ns=2;i=5}" | ||
22 | } | ||
23 | ], | ||
24 | "timeseries": [ | ||
25 | { | ||
26 | "key": "humidity", | ||
27 | "path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}" | ||
28 | }, | ||
29 | { | ||
30 | "key": "batteryLevel", | ||
31 | "path": "${Battery\\.batteryLevel}" | ||
32 | } | ||
33 | ], | ||
34 | "rpc_methods": [ | ||
35 | { | ||
36 | "method": "multiply", | ||
37 | "arguments": [2, 4] | ||
38 | } | ||
39 | ], | ||
40 | "attributes_updates": [ | ||
41 | { | ||
42 | "attributeOnThingsBoard": "deviceName", | ||
43 | "attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber" | ||
44 | } | ||
45 | ] | ||
46 | } | ||
47 | ] | ||
48 | } | ||
49 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json new file mode 100644 index 0000000000..43237a7dc0 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json | |||
@@ -0,0 +1,146 @@ | |||
1 | "job": "leader" | ||
2 | }, | ||
3 | "allowRedirects": true, | ||
4 | "timeout": 0.5, | ||
5 | "scanPeriod": 5, | ||
6 | "converter": { | ||
7 | "type": "json", | ||
8 | "deviceNameJsonExpression": "SD8500", | ||
9 | "deviceTypeJsonExpression": "SD", | ||
10 | "attributes": [ | ||
11 | { | ||
12 | "key": "serialNumber", | ||
13 | "type": "string", | ||
14 | "value": "${serial}" | ||
15 | } | ||
16 | ], | ||
17 | "telemetry": [ | ||
18 | { | ||
19 | "key": "Maintainer", | ||
20 | "type": "string", | ||
21 | "value": "${Developer}" | ||
22 | } | ||
23 | ] | ||
24 | } | ||
25 | }, | ||
26 | { | ||
27 | "url": "get_info", | ||
28 | "httpMethod": "GET", | ||
29 | "httpHeaders": { | ||
30 | "ACCEPT": "application/json" | ||
31 | }, | ||
32 | "allowRedirects": true, | ||
33 | "timeout": 0.5, | ||
34 | "scanPeriod": 100, | ||
35 | "converter": { | ||
36 | "type": "custom", | ||
37 | "deviceNameJsonExpression": "SD8500", | ||
38 | "deviceTypeJsonExpression": "SD", | ||
39 | "extension": "CustomRequestUplinkConverter", | ||
40 | "extension-config": [ | ||
41 | { | ||
42 | "key": "Totaliser", | ||
43 | "type": "float", | ||
44 | "fromByte": 0, | ||
45 | "toByte": 4, | ||
46 | "byteorder": "big", | ||
47 | "signed": true, | ||
48 | "multiplier": 1 | ||
49 | }, | ||
50 | { | ||
51 | "key": "Flow", | ||
52 | "type": "int", | ||
53 | "fromByte": 4, | ||
54 | "toByte": 6, | ||
55 | "byteorder": "big", | ||
56 | "signed": true, | ||
57 | "multiplier": 0.01 | ||
58 | }, | ||
59 | { | ||
60 | "key": "Temperature", | ||
61 | "type": "int", | ||
62 | "fromByte": 8, | ||
63 | "toByte": 10, | ||
64 | "byteorder": "big", | ||
65 | "signed": true, | ||
66 | "multiplier": 0.01 | ||
67 | }, | ||
68 | { | ||
69 | "key": "Pressure", | ||
70 | "type": "int", | ||
71 | "fromByte": 12, | ||
72 | "toByte": 14, | ||
73 | "byteorder": "big", | ||
74 | "signed": true, | ||
75 | "multiplier": 0.01 | ||
76 | }, | ||
77 | { | ||
78 | "key": "deviceStatus", | ||
79 | "type": "int", | ||
80 | "byteAddress": 15, | ||
81 | "fromBit": 4, | ||
82 | "toBit": 8, | ||
83 | "byteorder": "big", | ||
84 | "signed": false | ||
85 | }, | ||
86 | { | ||
87 | "key": "OUT2", | ||
88 | "type": "int", | ||
89 | "byteAddress": 15, | ||
90 | "fromBit": 1, | ||
91 | "toBit": 2, | ||
92 | "byteorder": "big" | ||
93 | }, | ||
94 | { | ||
95 | "key": "OUT1", | ||
96 | "type": "int", | ||
97 | "byteAddress": 15, | ||
98 | "fromBit": 0, | ||
99 | "toBit": 1, | ||
100 | "byteorder": "big" | ||
101 | } | ||
102 | ] | ||
103 | } | ||
104 | } | ||
105 | ], | ||
106 | "attributeUpdates": [ | ||
107 | { | ||
108 | "httpMethod": "POST", | ||
109 | "httpHeaders": { | ||
110 | "CONTENT-TYPE": "application/json" | ||
111 | }, | ||
112 | "timeout": 0.5, | ||
113 | "tries": 3, | ||
114 | "allowRedirects": true, | ||
115 | "deviceNameFilter": "SD.*", | ||
116 | "attributeFilter": "send_data", | ||
117 | "requestUrlExpression": "sensor/${deviceName}/${attributeKey}", | ||
118 | "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}" | ||
119 | } | ||
120 | ], | ||
121 | "serverSideRpc": [ | ||
122 | { | ||
123 | "deviceNameFilter": ".*", | ||
124 | "methodFilter": "echo", | ||
125 | "requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}", | ||
126 | "responseTimeout": 1, | ||
127 | "httpMethod": "GET", | ||
128 | "valueExpression": "${params}", | ||
129 | "timeout": 0.5, | ||
130 | "tries": 3, | ||
131 | "httpHeaders": { | ||
132 | "Content-Type": "application/json" | ||
133 | } | ||
134 | }, | ||
135 | { | ||
136 | "deviceNameFilter": ".*", | ||
137 | "methodFilter": "no-reply", | ||
138 | "requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}", | ||
139 | "httpMethod": "POST", | ||
140 | "valueExpression": "${params}", | ||
141 | "httpHeaders": { | ||
142 | "Content-Type": "application/json" | ||
143 | } | ||
144 | } | ||
145 | ] | ||
146 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json new file mode 100644 index 0000000000..be6c6ff18e --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json | |||
@@ -0,0 +1,152 @@ | |||
1 | { | ||
2 | "host": "127.0.0.1", | ||
3 | "port": "5000", | ||
4 | "mapping":[ | ||
5 | { | ||
6 | "endpoint": "/device1", | ||
7 | "HTTPMethods": [ | ||
8 | "POST" | ||
9 | ], | ||
10 | "security": | ||
11 | { | ||
12 | "type": "basic", | ||
13 | "username": "user", | ||
14 | "password": "passwd" | ||
15 | }, | ||
16 | "converter": { | ||
17 | "type": "json", | ||
18 | "deviceNameExpression": "Device ${name}", | ||
19 | "deviceTypeExpression": "default", | ||
20 | "attributes": [ | ||
21 | { | ||
22 | "type": "string", | ||
23 | "key": "model", | ||
24 | "value": "${sensorModel}" | ||
25 | } | ||
26 | ], | ||
27 | "timeseries": [ | ||
28 | { | ||
29 | "type": "double", | ||
30 | "key": "${sensorModel}", | ||
31 | "value": "${temp}" | ||
32 | }, | ||
33 | { | ||
34 | "type": "double", | ||
35 | "key": "humidity", | ||
36 | "value": "${hum}" | ||
37 | } | ||
38 | ] | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "endpoint": "/anon1", | ||
43 | "HTTPMethods": [ | ||
44 | "GET", | ||
45 | "POST" | ||
46 | ], | ||
47 | "security": | ||
48 | { | ||
49 | "type": "anonymous" | ||
50 | }, | ||
51 | "converter": { | ||
52 | "type": "json", | ||
53 | "deviceNameExpression": "Device 2", | ||
54 | "deviceTypeExpression": "default", | ||
55 | "attributes": [ | ||
56 | { | ||
57 | "type": "string", | ||
58 | "key": "model", | ||
59 | "value": "Model2" | ||
60 | } | ||
61 | ], | ||
62 | "timeseries": [ | ||
63 | { | ||
64 | "type": "double", | ||
65 | "key": "temperature", | ||
66 | "value": "${temp}" | ||
67 | }, | ||
68 | { | ||
69 | "type": "double", | ||
70 | "key": "humidity", | ||
71 | "value": "${hum}" | ||
72 | } | ||
73 | ] | ||
74 | } | ||
75 | }, | ||
76 | { | ||
77 | "endpoint": "/anon2", | ||
78 | "HTTPMethods": [ | ||
79 | "POST" | ||
80 | ], | ||
81 | "security": | ||
82 | { | ||
83 | "type": "anonymous" | ||
84 | }, | ||
85 | "converter": { | ||
86 | "type": "custom", | ||
87 | "deviceNameExpression": "SuperAnonDevice", | ||
88 | "deviceTypeExpression": "default", | ||
89 | "extension": "CustomRestUplinkConverter", | ||
90 | "extension-config": [ | ||
91 | { | ||
92 | "key": "Totaliser", | ||
93 | "datatype": "float", | ||
94 | "fromByte": 0, | ||
95 | "toByte": 4, | ||
96 | "byteorder": "big", | ||
97 | "signed": true, | ||
98 | "multiplier": 1 | ||
99 | }] | ||
100 | } | ||
101 | } | ||
102 | ], | ||
103 | "attributeUpdates": [ | ||
104 | { | ||
105 | "HTTPMethod": "POST", | ||
106 | "SSLVerify": false, | ||
107 | "httpHeaders": { | ||
108 | "CONTENT-TYPE": "application/json" | ||
109 | }, | ||
110 | "security": { | ||
111 | "type": "basic", | ||
112 | "username": "user", | ||
113 | "password": "passwd" | ||
114 | }, | ||
115 | "timeout": 0.5, | ||
116 | "tries": 3, | ||
117 | "allowRedirects": true, | ||
118 | "deviceNameFilter": ".*REST$", | ||
119 | "attributeFilter": "data", | ||
120 | "requestUrlExpression": "sensor/${deviceName}/${attributeKey}", | ||
121 | "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}" | ||
122 | } | ||
123 | ], | ||
124 | "serverSideRpc": [ | ||
125 | { | ||
126 | "deviceNameFilter": ".*", | ||
127 | "methodFilter": "echo", | ||
128 | "requestUrlExpression": "http://127.0.0.1:5001/${deviceName}", | ||
129 | "responseTimeout": 1, | ||
130 | "HTTPMethod": "GET", | ||
131 | "valueExpression": "${params}", | ||
132 | "timeout": 0.5, | ||
133 | "tries": 3, | ||
134 | "httpHeaders": { | ||
135 | "Content-Type": "application/json" | ||
136 | }, | ||
137 | "security": { | ||
138 | "type": "anonymous" | ||
139 | } | ||
140 | }, | ||
141 | { | ||
142 | "deviceNameFilter": ".*", | ||
143 | "methodFilter": "no-reply", | ||
144 | "requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}", | ||
145 | "HTTPMethod": "POST", | ||
146 | "valueExpression": "${params}", | ||
147 | "httpHeaders": { | ||
148 | "Content-Type": "application/json" | ||
149 | } | ||
150 | } | ||
151 | ] | ||
152 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json new file mode 100644 index 0000000000..b4ddb42645 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json | |||
@@ -0,0 +1,138 @@ | |||
1 | { | ||
2 | "devices": [ | ||
3 | { | ||
4 | "deviceName": "SNMP router", | ||
5 | "deviceType": "snmp", | ||
6 | "ip": "snmp.live.gambitcommunications.com", | ||
7 | "port": 161, | ||
8 | "pollPeriod": 5000, | ||
9 | "community": "public", | ||
10 | "attributes": [ | ||
11 | { | ||
12 | "key": "ReceivedFromGet", | ||
13 | "method": "get", | ||
14 | "oid": "1.3.6.1.2.1.1.1.0", | ||
15 | "timeout": 6 | ||
16 | }, | ||
17 | { | ||
18 | "key": "ReceivedFromMultiGet", | ||
19 | "method": "multiget", | ||
20 | "oid": [ | ||
21 | "1.3.6.1.2.1.1.1.0", | ||
22 | "1.3.6.1.2.1.1.2.0" | ||
23 | ], | ||
24 | "timeout": 6 | ||
25 | }, | ||
26 | { | ||
27 | "key": "ReceivedFromGetNext", | ||
28 | "method": "getnext", | ||
29 | "oid": "1.3.6.1.2.1.1.1.0", | ||
30 | "timeout": 6 | ||
31 | }, | ||
32 | { | ||
33 | "key": "ReceivedFromMultiWalk", | ||
34 | "method": "multiwalk", | ||
35 | "oid": [ | ||
36 | "1.3.6.1.2.1.1.1.0", | ||
37 | "1.3.6.0.1.2.1" | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | "key": "ReceivedFromBulkWalk", | ||
42 | "method": "bulkwalk", | ||
43 | "oid": [ | ||
44 | "1.3.6.1.2.1.1.1.0", | ||
45 | "1.3.6.1.2.1.1.2.0" | ||
46 | ] | ||
47 | }, | ||
48 | { | ||
49 | "key": "ReceivedFromBulkGet", | ||
50 | "method": "bulkget", | ||
51 | "scalarOid": [ | ||
52 | "1.3.6.1.2.1.1.1.0", | ||
53 | "1.3.6.1.2.1.1.2.0" | ||
54 | ], | ||
55 | "repeatingOid": [ | ||
56 | "1.3.6.1.2.1.1.1.0", | ||
57 | "1.3.6.1.2.1.1.2.0" | ||
58 | ], | ||
59 | "maxListSize": 10 | ||
60 | } | ||
61 | ], | ||
62 | "telemetry": [ | ||
63 | { | ||
64 | "key": "ReceivedFromWalk", | ||
65 | "community": "private", | ||
66 | "method": "walk", | ||
67 | "oid": "1.3.6.1.2.1.1.1.0" | ||
68 | }, | ||
69 | { | ||
70 | "key": "ReceivedFromTable", | ||
71 | "method": "table", | ||
72 | "oid": "1.3.6.1.2.1.1" | ||
73 | } | ||
74 | ], | ||
75 | "attributeUpdateRequests": [ | ||
76 | { | ||
77 | "attributeFilter": "dataToSet", | ||
78 | "method": "set", | ||
79 | "oid": "1.3.6.1.2.1.1.1.0" | ||
80 | }, | ||
81 | { | ||
82 | "attributeFilter": "dataToMultiSet", | ||
83 | "method": "multiset", | ||
84 | "mappings": { | ||
85 | "1.2.3": "10", | ||
86 | "2.3.4": "${attribute}" | ||
87 | } | ||
88 | } | ||
89 | ], | ||
90 | "serverSideRpcRequests": [ | ||
91 | { | ||
92 | "requestFilter": "setData", | ||
93 | "method": "set", | ||
94 | "oid": "1.3.6.1.2.1.1.1.0" | ||
95 | }, | ||
96 | { | ||
97 | "requestFilter": "multiSetData", | ||
98 | "method": "multiset" | ||
99 | }, | ||
100 | { | ||
101 | "requestFilter": "getData", | ||
102 | "method": "get", | ||
103 | "oid": "1.3.6.1.2.1.1.1.0" | ||
104 | }, | ||
105 | { | ||
106 | "requestFilter": "runBulkWalk", | ||
107 | "method": "bulkwalk", | ||
108 | "oid": [ | ||
109 | "1.3.6.1.2.1.1.1.0", | ||
110 | "1.3.6.1.2.1.1.2.0" | ||
111 | ] | ||
112 | } | ||
113 | ] | ||
114 | }, | ||
115 | { | ||
116 | "deviceName": "SNMP router", | ||
117 | "deviceType": "snmp", | ||
118 | "ip": "127.0.0.1", | ||
119 | "pollPeriod": 5000, | ||
120 | "community": "public", | ||
121 | "converter": "CustomSNMPConverter", | ||
122 | "attributes": [ | ||
123 | { | ||
124 | "key": "ReceivedFromGetWithCustomConverter", | ||
125 | "method": "get", | ||
126 | "oid": "1.3.6.1.2.1.1.1.0" | ||
127 | } | ||
128 | ], | ||
129 | "telemetry": [ | ||
130 | { | ||
131 | "key": "ReceivedFromTableWithCustomConverter", | ||
132 | "method": "table", | ||
133 | "oid": "1.3.6.1.2.1.1.1.0" | ||
134 | } | ||
135 | ] | ||
136 | } | ||
137 | ] | ||
138 | } \ No newline at end of file | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml new file mode 100755 index 0000000000..e3eb8f1fc7 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml | |||
@@ -0,0 +1,66 @@ | |||
1 | thingsboard: | ||
2 | host: demo.thingsboard.io | ||
3 | port: 1883 | ||
4 | remoteConfiguration: false | ||
5 | security: | ||
6 | accessToken: PUT_YOUR_GW_ACCESS_TOKEN_HERE | ||
7 | storage: | ||
8 | type: memory | ||
9 | read_records_count: 100 | ||
10 | max_records_count: 100000 | ||
11 | # type: file | ||
12 | # data_folder_path: ./data/ | ||
13 | # max_file_count: 10 | ||
14 | # max_read_records_count: 10 | ||
15 | # max_records_per_file: 10000 | ||
16 | connectors: | ||
17 | - | ||
18 | name: MQTT Broker Connector | ||
19 | type: mqtt | ||
20 | configuration: mqtt.json | ||
21 | |||
22 | # - | ||
23 | # name: Modbus Connector | ||
24 | # type: modbus | ||
25 | # configuration: modbus.json | ||
26 | # | ||
27 | # - | ||
28 | # name: Modbus Connector | ||
29 | # type: modbus | ||
30 | # configuration: modbus_serial.json | ||
31 | # | ||
32 | # - | ||
33 | # name: OPC-UA Connector | ||
34 | # type: opcua | ||
35 | # configuration: opcua.json | ||
36 | # | ||
37 | # - | ||
38 | # name: BLE Connector | ||
39 | # type: ble | ||
40 | # configuration: ble.json | ||
41 | # | ||
42 | # - | ||
43 | # name: REQUEST Connector | ||
44 | # type: request | ||
45 | # configuration: request.json | ||
46 | # | ||
47 | # - | ||
48 | # name: CAN Connector | ||
49 | # type: can | ||
50 | # configuration: can.json | ||
51 | # | ||
52 | # - | ||
53 | # name: BACnet Connector | ||
54 | # type: bacnet | ||
55 | # configuration: bacnet.json | ||
56 | # | ||
57 | # - | ||
58 | # name: ODBC Connector | ||
59 | # type: odbc | ||
60 | # configuration: odbc.json | ||
61 | # | ||
62 | # - | ||
63 | # name: Custom Serial Connector | ||
64 | # type: serial | ||
65 | # configuration: custom_serial.json | ||
66 | # class: CustomSerialConnector | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service new file mode 100644 index 0000000000..5dd352a553 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service | |||
@@ -0,0 +1,13 @@ | |||
1 | [Unit] | ||
2 | Description = Systemd service for Thingsboard Gateway | ||
3 | After = network.target | ||
4 | |||
5 | [Service] | ||
6 | ExecStart = /usr/bin/python3 /usr/bin/thingsboard-gateway | ||
7 | ExecStop = /bin/kill -INT $MAINPID | ||
8 | ExecReload = /bin/kill -TERM $MAINPID | ||
9 | Restart = always | ||
10 | Type = simple | ||
11 | |||
12 | [Install] | ||
13 | WantedBy=multi-user.target | ||
diff --git a/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb new file mode 100644 index 0000000000..2f0ef16c80 --- /dev/null +++ b/meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb | |||
@@ -0,0 +1,68 @@ | |||
1 | SUMMARY = "Open-source IoT platform for data collection, processing, visualization, and device management" | ||
2 | DESCRIPTION = "\ | ||
3 | The Thingsboard IoT Gateway is an open-source solution that allows you \ | ||
4 | to integrate devices connected to legacy and third-party systems with Thingsboard." | ||
5 | HOMEPAGE = "https://thingsboard.io/" | ||
6 | |||
7 | LICENSE = "Apache-2.0" | ||
8 | LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" | ||
9 | |||
10 | SRC_URI[md5sum] = "469c8b5cd1c16c20ef40f0a97a3a0fda" | ||
11 | SRC_URI[sha256sum] = "b328f4e315c3541ac80a4931974a34a81afe4d1f382f48e8604669a55816c0d7" | ||
12 | |||
13 | inherit pypi setuptools3 | ||
14 | |||
15 | PYPI_PACKAGE = "thingsboard-gateway" | ||
16 | |||
17 | RDEPENDS_${PN} += " python3-jsonpath-rw \ | ||
18 | python3-regex \ | ||
19 | python3-paho-mqtt \ | ||
20 | python3-pyyaml \ | ||
21 | python3-simplejson \ | ||
22 | python3-requests \ | ||
23 | python3-pip \ | ||
24 | python3-pyrsistent \ | ||
25 | " | ||
26 | |||
27 | SRC_URI += "file://bacnet.json \ | ||
28 | file://ble.json \ | ||
29 | file://can.json \ | ||
30 | file://custom_serial.json \ | ||
31 | file://modbus.json \ | ||
32 | file://modbus_serial.json \ | ||
33 | file://mqtt.json \ | ||
34 | file://opcua.json \ | ||
35 | file://odbc.json \ | ||
36 | file://request.json \ | ||
37 | file://rest.json \ | ||
38 | file://snmp.json \ | ||
39 | file://tb_gateway.yaml \ | ||
40 | file://logs.conf \ | ||
41 | file://thingsboard-gateway.service \ | ||
42 | " | ||
43 | |||
44 | |||
45 | inherit systemd | ||
46 | |||
47 | SYSTEMD_PACKAGES = "${PN}" | ||
48 | SYSTEMD_SERVICE_${PN} = "thingsboard-gateway.service" | ||
49 | |||
50 | FILES_${PN} += "/etc \ | ||
51 | /lib \ | ||
52 | /usr \ | ||
53 | " | ||
54 | |||
55 | do_install_append(){ | ||
56 | |||
57 | install -d ${D}${sysconfdir}/thingsboard-gateway/config | ||
58 | |||
59 | for file in $(find ${WORKDIR} -maxdepth 1 -type f -name *.json); do | ||
60 | install -m 0644 "$file" ${D}${sysconfdir}/thingsboard-gateway/config | ||
61 | done | ||
62 | |||
63 | install -m 0644 ${WORKDIR}/tb_gateway.yaml ${D}${sysconfdir}/thingsboard-gateway/config | ||
64 | install -m 0644 ${WORKDIR}/logs.conf ${D}${sysconfdir}/thingsboard-gateway/config | ||
65 | |||
66 | install -d ${D}${systemd_unitdir}/system/ | ||
67 | install -m 0644 ${WORKDIR}/thingsboard-gateway.service ${D}${systemd_system_unitdir}/thingsboard-gateway.service | ||
68 | } \ No newline at end of file | ||