* [meta-networking][PATCH 1/5] openipmi: Inherit python3targetconfig
@ 2020-11-17 23:04 Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 2/5] libplist: " Khem Raj
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Khem Raj @ 2020-11-17 23:04 UTC (permalink / raw)
To: openembedded-devel; +Cc: Khem Raj
Fixes
configure: error:
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LIBS environment variable.
Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
meta-networking/recipes-support/openipmi/openipmi_2.0.29.bb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-networking/recipes-support/openipmi/openipmi_2.0.29.bb b/meta-networking/recipes-support/openipmi/openipmi_2.0.29.bb
index 85634a70eb..6918485870 100644
--- a/meta-networking/recipes-support/openipmi/openipmi_2.0.29.bb
+++ b/meta-networking/recipes-support/openipmi/openipmi_2.0.29.bb
@@ -38,7 +38,7 @@ S = "${WORKDIR}/OpenIPMI-${PV}"
SRC_URI[md5sum] = "46b452e95d69c92e4172b3673ed88d52"
SRC_URI[sha256sum] = "2244124579afb14e569f34393e9ac61e658a28b6ffa8e5c0d2c1c12a8ce695cd"
-inherit autotools-brokensep pkgconfig python3native perlnative update-rc.d systemd cpan-base
+inherit autotools-brokensep pkgconfig python3native perlnative update-rc.d systemd cpan-base python3targetconfig
EXTRA_OECONF = "--disable-static \
--with-perl='${STAGING_BINDIR_NATIVE}/perl-native/perl' \
--
2.29.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [meta-oe][PATCH 2/5] libplist: Inherit python3targetconfig
2020-11-17 23:04 [meta-networking][PATCH 1/5] openipmi: Inherit python3targetconfig Khem Raj
@ 2020-11-17 23:04 ` Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 3/5] postgresql: " Khem Raj
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Khem Raj @ 2020-11-17 23:04 UTC (permalink / raw)
To: openembedded-devel; +Cc: Khem Raj
Fixes
configure: error:
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LIBS environment variable.
Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
meta-oe/recipes-extended/libimobiledevice/libplist_2.2.0.bb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-oe/recipes-extended/libimobiledevice/libplist_2.2.0.bb b/meta-oe/recipes-extended/libimobiledevice/libplist_2.2.0.bb
index 408fa8ac0e..6ef5b4f432 100644
--- a/meta-oe/recipes-extended/libimobiledevice/libplist_2.2.0.bb
+++ b/meta-oe/recipes-extended/libimobiledevice/libplist_2.2.0.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07 \
DEPENDS = "libxml2 glib-2.0 swig python3"
-inherit autotools pkgconfig python3native
+inherit autotools pkgconfig python3native python3targetconfig
SRCREV = "c5a30e9267068436a75b5d00fcbf95cb9c1f4dcd"
SRC_URI = "git://github.com/libimobiledevice/libplist;protocol=https"
--
2.29.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [meta-oe][PATCH 3/5] postgresql: Inherit python3targetconfig
2020-11-17 23:04 [meta-networking][PATCH 1/5] openipmi: Inherit python3targetconfig Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 2/5] libplist: " Khem Raj
@ 2020-11-17 23:04 ` Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2 Khem Raj
2020-11-17 23:04 ` [meta-python][PATCH 5/5] python3-jsonpath-rw: Add recipe for v1.4.0 Khem Raj
3 siblings, 0 replies; 8+ messages in thread
From: Khem Raj @ 2020-11-17 23:04 UTC (permalink / raw)
To: openembedded-devel; +Cc: Khem Raj
it now ends up searching native python shared libraries and tries to
link with it and fails on non-host architectures
recipe-sysroot-native/usr/lib/libpython3.9.so: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
meta-oe/recipes-dbs/postgresql/postgresql.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-oe/recipes-dbs/postgresql/postgresql.inc b/meta-oe/recipes-dbs/postgresql/postgresql.inc
index 090e16f58e..a1665ab2b2 100644
--- a/meta-oe/recipes-dbs/postgresql/postgresql.inc
+++ b/meta-oe/recipes-dbs/postgresql/postgresql.inc
@@ -36,7 +36,7 @@ LEAD_SONAME = "libpq.so"
# LDFLAGS for shared libraries
export LDFLAGS_SL = "${LDFLAGS}"
-inherit autotools pkgconfig perlnative python3native useradd update-rc.d systemd gettext cpan-base
+inherit autotools pkgconfig perlnative python3native python3targetconfig useradd update-rc.d systemd gettext cpan-base
CFLAGS += "-I${STAGING_INCDIR}/${PYTHON_DIR} -I${STAGING_INCDIR}/tcl8.6"
--
2.29.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2
2020-11-17 23:04 [meta-networking][PATCH 1/5] openipmi: Inherit python3targetconfig Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 2/5] libplist: " Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 3/5] postgresql: " Khem Raj
@ 2020-11-17 23:04 ` Khem Raj
2020-11-19 10:14 ` [oe] " Martin Jansa
2020-11-17 23:04 ` [meta-python][PATCH 5/5] python3-jsonpath-rw: Add recipe for v1.4.0 Khem Raj
3 siblings, 1 reply; 8+ messages in thread
From: Khem Raj @ 2020-11-17 23:04 UTC (permalink / raw)
To: openembedded-devel; +Cc: hasan.men, Khem Raj
From: "hasan.men" <hasan.men@bosphorusiss.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
.../thingsboard-gateway/bacnet.json | 58 ++++++
.../thingsboard-gateway/ble.json | 53 ++++++
.../thingsboard-gateway/can.json | 89 +++++++++
.../thingsboard-gateway/custom_serial.json | 33 ++++
.../thingsboard-gateway/logs.conf | 77 ++++++++
.../thingsboard-gateway/modbus.json | 169 ++++++++++++++++++
.../thingsboard-gateway/modbus_serial.json | 29 +++
.../thingsboard-gateway/mqtt.json | 132 ++++++++++++++
.../thingsboard-gateway/odbc.json | 54 ++++++
.../thingsboard-gateway/opcua.json | 49 +++++
.../thingsboard-gateway/request.json | 146 +++++++++++++++
.../thingsboard-gateway/rest.json | 152 ++++++++++++++++
.../thingsboard-gateway/snmp.json | 138 ++++++++++++++
.../thingsboard-gateway/tb_gateway.yaml | 66 +++++++
.../thingsboard-gateway.service | 13 ++
.../thingsboard-gateway_2.5.2.bb | 68 +++++++
16 files changed, 1326 insertions(+)
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json
create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service
create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb
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 @@
+{
+ "general": {
+ "objectName": "TB_gateway",
+ "address": "192.168.188.181:1052",
+ "objectIdentifier": 599,
+ "maxApduLengthAccepted": 1024,
+ "segmentationSupported": "segmentedBoth",
+ "vendorIdentifier": 15
+ },
+ "devices": [
+ {
+ "deviceName": "BACnet Device ${objectName}",
+ "deviceType": "default",
+ "address": "192.168.188.181:10520",
+ "pollPeriod": 10000,
+ "attributes": [
+ {
+ "key": "temperature",
+ "type": "string",
+ "objectId": "analogOutput:1",
+ "propertyId": "presentValue"
+ }
+ ],
+ "timeseries": [
+ {
+ "key": "state",
+ "type": "bool",
+ "objectId": "binaryValue:1",
+ "propertyId": "presentValue"
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "key": "brightness",
+ "requestType": "writeProperty",
+ "objectId": "analogOutput:1",
+ "propertyId": "presentValue"
+ }
+ ],
+ "serverSideRpc": [
+ {
+ "method": "set_state",
+ "requestType": "writeProperty",
+ "requestTimeout": 10000,
+ "objectId": "binaryOutput:1",
+ "propertyId": "presentValue"
+ },
+ {
+ "method": "get_state",
+ "requestType": "readProperty",
+ "requestTimeout": 10000,
+ "objectId": "binaryOutput:1",
+ "propertyId": "presentValue"
+ }
+ ]
+ }
+ ]
+ }
\ 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 @@
+{
+ "name": "BLE Connector",
+ "rescanIntervalSeconds": 100,
+ "checkIntervalSeconds": 100,
+ "scanTimeSeconds": 5,
+ "passiveScanMode": true,
+ "devices": [
+ {
+ "name": "Temperature and humidity sensor",
+ "MACAddress": "4C:65:A8:DF:85:C0",
+ "addrType": "public",
+ "telemetry": [
+ {
+ "key": "temperature",
+ "method": "notify",
+ "characteristicUUID": "226CAA55-6476-4566-7562-66734470666D",
+ "byteFrom": 2,
+ "byteTo": 6
+ },
+ {
+ "key": "humidity",
+ "method": "notify",
+ "characteristicUUID": "226CAA55-6476-4566-7562-66734470666D",
+ "byteFrom": 9,
+ "byteTo": 13
+ }
+ ],
+ "attributes": [
+ {
+ "key": "name",
+ "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB",
+ "method": "read",
+ "byteFrom": 0,
+ "byteTo": -1
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "attributeOnThingsBoard": "sharedName",
+ "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB"
+ }
+ ],
+ "serverSideRpc": [
+ {
+ "methodRPC": "rpcMethod1",
+ "withResponse": true,
+ "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB",
+ "methodProcessing": "read"
+ }
+ ]
+ }
+ ]
+}
\ 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 @@
+{
+ "interface": "socketcan",
+ "channel": "vcan0",
+ "backend": {
+ "fd": true
+ },
+ "reconnectPeriod": 5,
+ "devices": [
+ {
+ "name": "Car",
+ "sendDataOnlyOnChange": false,
+ "enableUnknownRpc": true,
+ "strictEval": false,
+ "attributes": [
+ {
+ "key": "isDriverDoorOpened",
+ "nodeId": 41,
+ "command": "2:2:big:8717",
+ "value": "4:1:int",
+ "expression": "bool(value & 0b00000100)",
+ "polling": {
+ "type": "once",
+ "dataInHex": "AB CD AB CD"
+ }
+ }
+ ],
+ "timeseries": [
+ {
+ "key": "rpm",
+ "nodeId": 1918,
+ "isExtendedId": true,
+ "command": "2:2:big:48059",
+ "value": "4:2:big:int",
+ "expression": "value / 4",
+ "polling": {
+ "type": "always",
+ "period": 5,
+ "dataInHex": "aaaa bbbb aaaa bbbb"
+ }
+ },
+ {
+ "key": "milliage",
+ "nodeId": 1918,
+ "isExtendedId": true,
+ "value": "4:2:little:int",
+ "expression": "value * 10",
+ "polling": {
+ "type": "always",
+ "period": 30,
+ "dataInHex": "aa bb cc dd ee ff aa bb"
+ }
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "attributeOnThingsBoard": "softwareVersion",
+ "nodeId": 64,
+ "isExtendedId": true,
+ "dataLength": 4,
+ "dataExpression": "value + 5",
+ "dataByteorder": "little"
+ }
+ ],
+ "serverSideRpc": [
+ {
+ "method": "sendSameData",
+ "nodeId": 4,
+ "isExtendedId": true,
+ "isFd": true,
+ "bitrateSwitch": true,
+ "dataInHex": "aa bb cc dd ee ff aa bb aa bb cc d ee ff"
+ },
+ {
+ "method": "setLightLevel",
+ "nodeId": 5,
+ "dataLength": 2,
+ "dataByteorder": "little",
+ "dataBefore": "00AA"
+ },
+ {
+ "method": "setSpeed",
+ "nodeId": 16,
+ "dataAfter": "0102",
+ "dataExpression": "userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"
+ }
+ ]
+ }
+ ]
+ }
\ 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 @@
+{
+ "name": "Custom serial connector",
+ "devices": [
+ {
+ "name": "CustomSerialDevice1",
+ "type": "default",
+ "port": "/dev/ttyUSB0",
+ "baudrate": 9600,
+ "converter": "CustomSerialUplinkConverter",
+ "telemetry": [
+ {
+ "type": "byte",
+ "key": "humidity",
+ "untilDelimiter": "\r"
+ }
+ ],
+ "attributes":[
+ {
+ "key": "SerialNumber",
+ "type": "string",
+ "fromByte": 4,
+ "toByte": -1
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "attributeOnThingsBoard": "attr1",
+ "stringToDevice": "value = ${attr1}\n"
+ }
+ ]
+ }
+ ]
+}
\ 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 @@
+[loggers]
+keys=root, service, connector, converter, tb_connection, storage, extension
+[handlers]
+keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler
+[formatters]
+keys=LogFormatter
+[logger_root]
+level=ERROR
+handlers=consoleHandler
+[logger_connector]
+level=INFO
+handlers=connectorHandler
+formatter=LogFormatter
+qualname=connector
+[logger_storage]
+level=INFO
+handlers=storageHandler
+formatter=LogFormatter
+qualname=storage
+[logger_tb_connection]
+level=INFO
+handlers=tb_connectionHandler
+formatter=LogFormatter
+qualname=tb_connection
+[logger_service]
+level=INFO
+handlers=serviceHandler
+formatter=LogFormatter
+qualname=service
+[logger_converter]
+level=INFO
+handlers=converterHandler
+formatter=LogFormatter
+qualname=converter
+[logger_extension]
+level=INFO
+handlers=connectorHandler
+formatter=LogFormatter
+qualname=extension
+[handler_consoleHandler]
+class=StreamHandler
+level=INFO
+formatter=LogFormatter
+args=(sys.stdout,)
+[handler_connectorHandler]
+level=INFO
+class=logging.handlers.TimedRotatingFileHandler
+formatter=LogFormatter
+args=("./logs/connector.log", "d", 1, 7,)
+[handler_storageHandler]
+level=INFO
+class=logging.handlers.TimedRotatingFileHandler
+formatter=LogFormatter
+args=("./logs/storage.log", "d", 1, 7,)
+[handler_serviceHandler]
+level=INFO
+class=logging.handlers.TimedRotatingFileHandler
+formatter=LogFormatter
+args=("./logs/service.log", "d", 1, 7,)
+[handler_converterHandler]
+level=INFO
+class=logging.handlers.TimedRotatingFileHandler
+formatter=LogFormatter
+args=("./logs/converter.log", "d", 1, 3,)
+[handler_extensionHandler]
+level=INFO
+class=logging.handlers.TimedRotatingFileHandler
+formatter=LogFormatter
+args=("./logs/extension.log", "d", 1, 3,)
+[handler_tb_connectionHandler]
+level=INFO
+class=logging.handlers.TimedRotatingFileHandler
+formatter=LogFormatter
+args=("./logs/tb_connection.log", "d", 1, 3,)
+[formatter_LogFormatter]
+format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s - %(lineno)d - %(message)s"
+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 @@
+{
+ "server": {
+ "type": "tcp",
+ "host": "127.0.0.1",
+ "port": 5020,
+ "timeout": 35,
+ "method": "socket",
+ "byteOrder": "BIG",
+ "devices": [
+ {
+ "unitId": 1,
+ "deviceName": "Temp Sensor",
+ "attributesPollPeriod": 5000,
+ "timeseriesPollPeriod": 5000,
+ "sendDataOnlyOnChange": true,
+ "attributes": [
+ {
+ "tag": "string_read",
+ "type": "string",
+ "functionCode": 4,
+ "objectsCount": 4,
+ "address": 1
+ },
+ {
+ "tag": "bits_read",
+ "type": "bits",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 5
+ },
+ {
+ "tag": "8int_read",
+ "type": "8int",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 6
+ },
+ {
+ "tag": "16int_read",
+ "type": "16int",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 7
+ },
+ {
+ "tag": "32int_read_divider",
+ "type": "32int",
+ "functionCode": 4,
+ "objectsCount": 2,
+ "address": 8,
+ "divider": 10
+ },
+ {
+ "tag": "8int_read_multiplier",
+ "type": "8int",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 10,
+ "multiplier": 10
+ },
+ {
+ "tag": "32int_read",
+ "type": "32int",
+ "functionCode": 4,
+ "objectsCount": 2,
+ "address": 11
+ },
+ {
+ "tag": "64int_read",
+ "type": "64int",
+ "functionCode": 4,
+ "objectsCount": 4,
+ "address": 13
+ }
+ ],
+ "timeseries": [
+ {
+ "tag": "8uint_read",
+ "type": "8uint",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 17
+ },
+ {
+ "tag": "16uint_read",
+ "type": "16uint",
+ "functionCode": 4,
+ "objectsCount": 2,
+ "address": 18
+ },
+ {
+ "tag": "32uint_read",
+ "type": "32uint",
+ "functionCode": 4,
+ "objectsCount": 4,
+ "address": 20
+ },
+ {
+ "tag": "64uint_read",
+ "type": "64uint",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 24
+ },
+ {
+ "tag": "16float_read",
+ "type": "16float",
+ "functionCode": 4,
+ "objectsCount": 1,
+ "address": 25
+ },
+ {
+ "tag": "32float_read",
+ "type": "32float",
+ "functionCode": 4,
+ "objectsCount": 2,
+ "address": 26
+ },
+ {
+ "tag": "64float_read",
+ "type": "64float",
+ "functionCode": 4,
+ "objectsCount": 4,
+ "address": 28
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "tag": "shared_attribute_write",
+ "type": "32int",
+ "functionCode": 6,
+ "objectsCount": 2,
+ "address": 29
+ }
+ ],
+ "rpc": [
+ {
+ "tag": "setValue",
+ "type": "bits",
+ "functionCode": 5,
+ "objectsCount": 1,
+ "address": 31
+ },
+ {
+ "tag": "getValue",
+ "type": "bits",
+ "functionCode": 1,
+ "objectsCount": 1,
+ "address": 31
+ },
+ {
+ "tag": "setCPUFanSpeed",
+ "type": "32int",
+ "functionCode": 16,
+ "objectsCount": 2,
+ "address": 33
+ },
+ {
+ "tag":"getCPULoad",
+ "type": "32int",
+ "functionCode": 4,
+ "objectsCount": 2,
+ "address": 35
+ }
+ ]
+ }
+ ]
+ }
+}
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 @@
+{
+ "server": {
+ "name": "Modbus Default Server",
+ "type": "serial",
+ "method": "rtu",
+ "port": "/dev/ttyUSB0",
+ "baudrate": 19200,
+ "timeout": 35,
+ "devices": [
+ {
+ "unitId": 1,
+ "deviceName": "Temp Sensor",
+ "attributesPollPeriod": 5000,
+ "timeseriesPollPeriod": 5000,
+ "sendDataOnlyOnChange": true,
+ "attributes": [
+ {
+ "byteOrder": "BIG",
+ "tag": "test",
+ "type": "long",
+ "functionCode": 4,
+ "registerCount": 1,
+ "address": 4
+ }
+ ]
+ }
+ ]
+ }
+}
\ 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 @@
+{
+ "broker": {
+ "name":"Default Local Broker",
+ "host":"127.0.0.1",
+ "port":1883,
+ "clientId": "ThingsBoard_gateway",
+ "security": {
+ "type": "basic",
+ "username": "user",
+ "password": "password"
+ }
+ },
+ "mapping": [
+ {
+ "topicFilter": "/sensor/data",
+ "converter": {
+ "type": "json",
+ "deviceNameJsonExpression": "${serialNumber}",
+ "deviceTypeJsonExpression": "${sensorType}",
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ },
+ {
+ "type": "string",
+ "key": "${sensorModel}",
+ "value": "on"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ }
+ ]
+ }
+ },
+ {
+ "topicFilter": "/sensor/+/data",
+ "converter": {
+ "type": "json",
+ "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
+ "deviceTypeTopicExpression": "Thermometer",
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ }
+ ]
+ }
+ },
+ {
+ "topicFilter": "/custom/sensors/+",
+ "converter": {
+ "type": "custom",
+ "extension": "CustomMqttUplinkConverter",
+ "extension-config": {
+ "temperatureBytes" : 2,
+ "humidityBytes" : 2,
+ "batteryLevelBytes" : 1
+ }
+ }
+ }
+ ],
+ "connectRequests": [
+ {
+ "topicFilter": "sensor/connect",
+ "deviceNameJsonExpression": "${SerialNumber}"
+ },
+ {
+ "topicFilter": "sensor/+/connect",
+ "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
+ }
+ ],
+ "disconnectRequests": [
+ {
+ "topicFilter": "sensor/disconnect",
+ "deviceNameJsonExpression": "${SerialNumber}"
+ },
+ {
+ "topicFilter": "sensor/+/disconnect",
+ "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "deviceNameFilter": "SmartMeter.*",
+ "attributeFilter": "uploadFrequency",
+ "topicExpression": "sensor/${deviceName}/${attributeKey}",
+ "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
+ }
+ ],
+ "serverSideRpc": [
+ {
+ "deviceNameFilter": ".*",
+ "methodFilter": "echo",
+ "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+ "responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
+ "responseTimeout": 10000,
+ "valueExpression": "${params}"
+ },
+ {
+ "deviceNameFilter": ".*",
+ "methodFilter": "no-reply",
+ "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+ "valueExpression": "${params}"
+ }
+ ]
+}
\ 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 @@
+{
+ "connection": {
+ "str": "Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;",
+ "attributes": {
+ "autocommit": true,
+ "timeout": 0
+ },
+ "encoding": "utf-8",
+ "decoding": {
+ "char": "utf-8",
+ "wchar": "utf-8",
+ "metadata": "utf-16le"
+ },
+ "reconnect": true,
+ "reconnectPeriod": 60
+ },
+ "pyodbc": {
+ "pooling": false
+ },
+ "polling": {
+ "query": "SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10",
+ "period": 10,
+ "iterator": {
+ "column": "ts",
+ "query": "SELECT MIN(ts) - 1 FROM ts_kv",
+ "persistent": false
+ }
+ },
+ "mapping": {
+ "device": {
+ "type": "postgres",
+ "name": "'ODBC ' + entity_id"
+ },
+ "sendDataOnlyOnChange": false,
+ "attributes": "*",
+ "timeseries": [
+ {
+ "name": "value",
+ "value": "[i for i in [str_v, long_v, dbl_v,bool_v] if i is not None][0]"
+ }
+ ]
+ },
+ "serverSideRpc": {
+ "enableUnknownRpc": false,
+ "overrideRpcConfig": true,
+ "methods": [
+ "procedureOne",
+ {
+ "name": "procedureTwo",
+ "args": [ "One", 2, 3.0 ]
+ }
+ ]
+ }
+ }
\ 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 @@
+{
+ "server": {
+ "name": "OPC-UA Default Server",
+ "url": "localhost:4840/freeopcua/server/",
+ "timeoutInMillis": 5000,
+ "scanPeriodInMillis": 5000,
+ "disableSubscriptions":false,
+ "subCheckPeriodInMillis": 100,
+ "showMap": false,
+ "security": "Basic128Rsa15",
+ "identity": {
+ "type": "anonymous"
+ },
+ "mapping": [
+ {
+ "deviceNodePattern": "Root\\.Objects\\.Device1",
+ "deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}",
+ "attributes": [
+ {
+ "key": "temperature °C",
+ "path": "${ns=2;i=5}"
+ }
+ ],
+ "timeseries": [
+ {
+ "key": "humidity",
+ "path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"
+ },
+ {
+ "key": "batteryLevel",
+ "path": "${Battery\\.batteryLevel}"
+ }
+ ],
+ "rpc_methods": [
+ {
+ "method": "multiply",
+ "arguments": [2, 4]
+ }
+ ],
+ "attributes_updates": [
+ {
+ "attributeOnThingsBoard": "deviceName",
+ "attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
+ }
+ ]
+ }
+ ]
+ }
+}
\ 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 @@
+"job": "leader"
+},
+"allowRedirects": true,
+"timeout": 0.5,
+"scanPeriod": 5,
+"converter": {
+ "type": "json",
+ "deviceNameJsonExpression": "SD8500",
+ "deviceTypeJsonExpression": "SD",
+ "attributes": [
+ {
+ "key": "serialNumber",
+ "type": "string",
+ "value": "${serial}"
+ }
+ ],
+ "telemetry": [
+ {
+ "key": "Maintainer",
+ "type": "string",
+ "value": "${Developer}"
+ }
+ ]
+}
+},
+{
+"url": "get_info",
+"httpMethod": "GET",
+"httpHeaders": {
+ "ACCEPT": "application/json"
+},
+"allowRedirects": true,
+"timeout": 0.5,
+"scanPeriod": 100,
+"converter": {
+ "type": "custom",
+ "deviceNameJsonExpression": "SD8500",
+ "deviceTypeJsonExpression": "SD",
+ "extension": "CustomRequestUplinkConverter",
+ "extension-config": [
+ {
+ "key": "Totaliser",
+ "type": "float",
+ "fromByte": 0,
+ "toByte": 4,
+ "byteorder": "big",
+ "signed": true,
+ "multiplier": 1
+ },
+ {
+ "key": "Flow",
+ "type": "int",
+ "fromByte": 4,
+ "toByte": 6,
+ "byteorder": "big",
+ "signed": true,
+ "multiplier": 0.01
+ },
+ {
+ "key": "Temperature",
+ "type": "int",
+ "fromByte": 8,
+ "toByte": 10,
+ "byteorder": "big",
+ "signed": true,
+ "multiplier": 0.01
+ },
+ {
+ "key": "Pressure",
+ "type": "int",
+ "fromByte": 12,
+ "toByte": 14,
+ "byteorder": "big",
+ "signed": true,
+ "multiplier": 0.01
+ },
+ {
+ "key": "deviceStatus",
+ "type": "int",
+ "byteAddress": 15,
+ "fromBit": 4,
+ "toBit": 8,
+ "byteorder": "big",
+ "signed": false
+ },
+ {
+ "key": "OUT2",
+ "type": "int",
+ "byteAddress": 15,
+ "fromBit": 1,
+ "toBit": 2,
+ "byteorder": "big"
+ },
+ {
+ "key": "OUT1",
+ "type": "int",
+ "byteAddress": 15,
+ "fromBit": 0,
+ "toBit": 1,
+ "byteorder": "big"
+ }
+ ]
+}
+}
+],
+"attributeUpdates": [
+{
+ "httpMethod": "POST",
+ "httpHeaders": {
+ "CONTENT-TYPE": "application/json"
+ },
+ "timeout": 0.5,
+ "tries": 3,
+ "allowRedirects": true,
+ "deviceNameFilter": "SD.*",
+ "attributeFilter": "send_data",
+ "requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
+ "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
+}
+],
+"serverSideRpc": [
+{
+"deviceNameFilter": ".*",
+"methodFilter": "echo",
+"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+"responseTimeout": 1,
+"httpMethod": "GET",
+"valueExpression": "${params}",
+"timeout": 0.5,
+"tries": 3,
+"httpHeaders": {
+ "Content-Type": "application/json"
+}
+},
+{
+"deviceNameFilter": ".*",
+"methodFilter": "no-reply",
+"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+"httpMethod": "POST",
+"valueExpression": "${params}",
+"httpHeaders": {
+ "Content-Type": "application/json"
+}
+}
+]
+}
\ 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 @@
+{
+ "host": "127.0.0.1",
+ "port": "5000",
+ "mapping":[
+ {
+ "endpoint": "/device1",
+ "HTTPMethods": [
+ "POST"
+ ],
+ "security":
+ {
+ "type": "basic",
+ "username": "user",
+ "password": "passwd"
+ },
+ "converter": {
+ "type": "json",
+ "deviceNameExpression": "Device ${name}",
+ "deviceTypeExpression": "default",
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "${sensorModel}",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ }
+ ]
+ }
+ },
+ {
+ "endpoint": "/anon1",
+ "HTTPMethods": [
+ "GET",
+ "POST"
+ ],
+ "security":
+ {
+ "type": "anonymous"
+ },
+ "converter": {
+ "type": "json",
+ "deviceNameExpression": "Device 2",
+ "deviceTypeExpression": "default",
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "Model2"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ }
+ ]
+ }
+ },
+ {
+ "endpoint": "/anon2",
+ "HTTPMethods": [
+ "POST"
+ ],
+ "security":
+ {
+ "type": "anonymous"
+ },
+ "converter": {
+ "type": "custom",
+ "deviceNameExpression": "SuperAnonDevice",
+ "deviceTypeExpression": "default",
+ "extension": "CustomRestUplinkConverter",
+ "extension-config": [
+ {
+ "key": "Totaliser",
+ "datatype": "float",
+ "fromByte": 0,
+ "toByte": 4,
+ "byteorder": "big",
+ "signed": true,
+ "multiplier": 1
+ }]
+ }
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "HTTPMethod": "POST",
+ "SSLVerify": false,
+ "httpHeaders": {
+ "CONTENT-TYPE": "application/json"
+ },
+ "security": {
+ "type": "basic",
+ "username": "user",
+ "password": "passwd"
+ },
+ "timeout": 0.5,
+ "tries": 3,
+ "allowRedirects": true,
+ "deviceNameFilter": ".*REST$",
+ "attributeFilter": "data",
+ "requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
+ "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
+ }
+ ],
+ "serverSideRpc": [
+ {
+ "deviceNameFilter": ".*",
+ "methodFilter": "echo",
+ "requestUrlExpression": "http://127.0.0.1:5001/${deviceName}",
+ "responseTimeout": 1,
+ "HTTPMethod": "GET",
+ "valueExpression": "${params}",
+ "timeout": 0.5,
+ "tries": 3,
+ "httpHeaders": {
+ "Content-Type": "application/json"
+ },
+ "security": {
+ "type": "anonymous"
+ }
+ },
+ {
+ "deviceNameFilter": ".*",
+ "methodFilter": "no-reply",
+ "requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+ "HTTPMethod": "POST",
+ "valueExpression": "${params}",
+ "httpHeaders": {
+ "Content-Type": "application/json"
+ }
+ }
+ ]
+ }
\ 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 @@
+{
+ "devices": [
+ {
+ "deviceName": "SNMP router",
+ "deviceType": "snmp",
+ "ip": "snmp.live.gambitcommunications.com",
+ "port": 161,
+ "pollPeriod": 5000,
+ "community": "public",
+ "attributes": [
+ {
+ "key": "ReceivedFromGet",
+ "method": "get",
+ "oid": "1.3.6.1.2.1.1.1.0",
+ "timeout": 6
+ },
+ {
+ "key": "ReceivedFromMultiGet",
+ "method": "multiget",
+ "oid": [
+ "1.3.6.1.2.1.1.1.0",
+ "1.3.6.1.2.1.1.2.0"
+ ],
+ "timeout": 6
+ },
+ {
+ "key": "ReceivedFromGetNext",
+ "method": "getnext",
+ "oid": "1.3.6.1.2.1.1.1.0",
+ "timeout": 6
+ },
+ {
+ "key": "ReceivedFromMultiWalk",
+ "method": "multiwalk",
+ "oid": [
+ "1.3.6.1.2.1.1.1.0",
+ "1.3.6.0.1.2.1"
+ ]
+ },
+ {
+ "key": "ReceivedFromBulkWalk",
+ "method": "bulkwalk",
+ "oid": [
+ "1.3.6.1.2.1.1.1.0",
+ "1.3.6.1.2.1.1.2.0"
+ ]
+ },
+ {
+ "key": "ReceivedFromBulkGet",
+ "method": "bulkget",
+ "scalarOid": [
+ "1.3.6.1.2.1.1.1.0",
+ "1.3.6.1.2.1.1.2.0"
+ ],
+ "repeatingOid": [
+ "1.3.6.1.2.1.1.1.0",
+ "1.3.6.1.2.1.1.2.0"
+ ],
+ "maxListSize": 10
+ }
+ ],
+ "telemetry": [
+ {
+ "key": "ReceivedFromWalk",
+ "community": "private",
+ "method": "walk",
+ "oid": "1.3.6.1.2.1.1.1.0"
+ },
+ {
+ "key": "ReceivedFromTable",
+ "method": "table",
+ "oid": "1.3.6.1.2.1.1"
+ }
+ ],
+ "attributeUpdateRequests": [
+ {
+ "attributeFilter": "dataToSet",
+ "method": "set",
+ "oid": "1.3.6.1.2.1.1.1.0"
+ },
+ {
+ "attributeFilter": "dataToMultiSet",
+ "method": "multiset",
+ "mappings": {
+ "1.2.3": "10",
+ "2.3.4": "${attribute}"
+ }
+ }
+ ],
+ "serverSideRpcRequests": [
+ {
+ "requestFilter": "setData",
+ "method": "set",
+ "oid": "1.3.6.1.2.1.1.1.0"
+ },
+ {
+ "requestFilter": "multiSetData",
+ "method": "multiset"
+ },
+ {
+ "requestFilter": "getData",
+ "method": "get",
+ "oid": "1.3.6.1.2.1.1.1.0"
+ },
+ {
+ "requestFilter": "runBulkWalk",
+ "method": "bulkwalk",
+ "oid": [
+ "1.3.6.1.2.1.1.1.0",
+ "1.3.6.1.2.1.1.2.0"
+ ]
+ }
+ ]
+ },
+ {
+ "deviceName": "SNMP router",
+ "deviceType": "snmp",
+ "ip": "127.0.0.1",
+ "pollPeriod": 5000,
+ "community": "public",
+ "converter": "CustomSNMPConverter",
+ "attributes": [
+ {
+ "key": "ReceivedFromGetWithCustomConverter",
+ "method": "get",
+ "oid": "1.3.6.1.2.1.1.1.0"
+ }
+ ],
+ "telemetry": [
+ {
+ "key": "ReceivedFromTableWithCustomConverter",
+ "method": "table",
+ "oid": "1.3.6.1.2.1.1.1.0"
+ }
+ ]
+ }
+ ]
+ }
\ 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 @@
+thingsboard:
+ host: demo.thingsboard.io
+ port: 1883
+ remoteConfiguration: false
+ security:
+ accessToken: PUT_YOUR_GW_ACCESS_TOKEN_HERE
+storage:
+ type: memory
+ read_records_count: 100
+ max_records_count: 100000
+# type: file
+# data_folder_path: ./data/
+# max_file_count: 10
+# max_read_records_count: 10
+# max_records_per_file: 10000
+connectors:
+ -
+ name: MQTT Broker Connector
+ type: mqtt
+ configuration: mqtt.json
+
+# -
+# name: Modbus Connector
+# type: modbus
+# configuration: modbus.json
+#
+# -
+# name: Modbus Connector
+# type: modbus
+# configuration: modbus_serial.json
+#
+# -
+# name: OPC-UA Connector
+# type: opcua
+# configuration: opcua.json
+#
+# -
+# name: BLE Connector
+# type: ble
+# configuration: ble.json
+#
+# -
+# name: REQUEST Connector
+# type: request
+# configuration: request.json
+#
+# -
+# name: CAN Connector
+# type: can
+# configuration: can.json
+#
+# -
+# name: BACnet Connector
+# type: bacnet
+# configuration: bacnet.json
+#
+# -
+# name: ODBC Connector
+# type: odbc
+# configuration: odbc.json
+#
+# -
+# name: Custom Serial Connector
+# type: serial
+# configuration: custom_serial.json
+# 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 @@
+[Unit]
+Description = Systemd service for Thingsboard Gateway
+After = network.target
+
+[Service]
+ExecStart = /usr/bin/python3 /usr/bin/thingsboard-gateway
+ExecStop = /bin/kill -INT $MAINPID
+ExecReload = /bin/kill -TERM $MAINPID
+Restart = always
+Type = simple
+
+[Install]
+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 @@
+SUMMARY = "Open-source IoT platform for data collection, processing, visualization, and device management"
+DESCRIPTION = "\
+The Thingsboard IoT Gateway is an open-source solution that allows you \
+to integrate devices connected to legacy and third-party systems with Thingsboard."
+HOMEPAGE = "https://thingsboard.io/"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+SRC_URI[md5sum] = "469c8b5cd1c16c20ef40f0a97a3a0fda"
+SRC_URI[sha256sum] = "b328f4e315c3541ac80a4931974a34a81afe4d1f382f48e8604669a55816c0d7"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "thingsboard-gateway"
+
+RDEPENDS_${PN} += " python3-jsonpath-rw \
+ python3-regex \
+ python3-paho-mqtt \
+ python3-pyyaml \
+ python3-simplejson \
+ python3-requests \
+ python3-pip \
+ python3-pyrsistent \
+"
+
+SRC_URI += "file://bacnet.json \
+ file://ble.json \
+ file://can.json \
+ file://custom_serial.json \
+ file://modbus.json \
+ file://modbus_serial.json \
+ file://mqtt.json \
+ file://opcua.json \
+ file://odbc.json \
+ file://request.json \
+ file://rest.json \
+ file://snmp.json \
+ file://tb_gateway.yaml \
+ file://logs.conf \
+ file://thingsboard-gateway.service \
+ "
+
+
+inherit systemd
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "thingsboard-gateway.service"
+
+FILES_${PN} += "/etc \
+ /lib \
+ /usr \
+"
+
+do_install_append(){
+
+ install -d ${D}${sysconfdir}/thingsboard-gateway/config
+
+ for file in $(find ${WORKDIR} -maxdepth 1 -type f -name *.json); do
+ install -m 0644 "$file" ${D}${sysconfdir}/thingsboard-gateway/config
+ done
+
+ install -m 0644 ${WORKDIR}/tb_gateway.yaml ${D}${sysconfdir}/thingsboard-gateway/config
+ install -m 0644 ${WORKDIR}/logs.conf ${D}${sysconfdir}/thingsboard-gateway/config
+
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/thingsboard-gateway.service ${D}${systemd_system_unitdir}/thingsboard-gateway.service
+}
\ No newline at end of file
--
2.29.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [meta-python][PATCH 5/5] python3-jsonpath-rw: Add recipe for v1.4.0
2020-11-17 23:04 [meta-networking][PATCH 1/5] openipmi: Inherit python3targetconfig Khem Raj
` (2 preceding siblings ...)
2020-11-17 23:04 ` [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2 Khem Raj
@ 2020-11-17 23:04 ` Khem Raj
2020-11-23 20:56 ` [oe] " Trevor Gamblin
3 siblings, 1 reply; 8+ messages in thread
From: Khem Raj @ 2020-11-17 23:04 UTC (permalink / raw)
To: openembedded-devel; +Cc: hasan.men, Khem Raj
From: "hasan.men" <hasan.men@bosphorusiss.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
.../python/python3-jsonpath-rw_1.4.0.bb | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb
diff --git a/meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb b/meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb
new file mode 100644
index 0000000000..54e1b646d5
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "A robust and significantly extended implementation of JSONPath for Python"
+HOMEPAGE = "https://github.com/kennknowles/python-jsonpath-rw"
+SECTION = "devel/python"
+LICENSE = "BSD+"
+LIC_FILES_CHKSUM = "file://README.rst;md5=02384665f821c394981e0dd1faec9a7d"
+
+SRC_URI[md5sum] = "3a807e05c2c12158fc6bb0a402fd5778"
+SRC_URI[sha256sum] = "05c471281c45ae113f6103d1268ec7a4831a2e96aa80de45edc89b11fac4fbec"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " python3-decorator"
--
2.29.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [oe] [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2
2020-11-17 23:04 ` [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2 Khem Raj
@ 2020-11-19 10:14 ` Martin Jansa
2020-11-19 15:20 ` Khem Raj
0 siblings, 1 reply; 8+ messages in thread
From: Martin Jansa @ 2020-11-19 10:14 UTC (permalink / raw)
To: Khem Raj; +Cc: openembedded-devel, hasan.men
[-- Attachment #1: Type: text/plain, Size: 48173 bytes --]
python3-jsonpath-rw dependency was added to meta-python, but meta-oe
doesn't depend on meta-python, so either python3-jsonpath-rw needs to be
moved to meta-oe (if it doesn't depend on other stuff from meta-python) or
thingsboard-gateway needs to be moved to meta-python.
On Wed, Nov 18, 2020 at 12:04 AM Khem Raj <raj.khem@gmail.com> wrote:
> From: "hasan.men" <hasan.men@bosphorusiss.com>
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
> .../thingsboard-gateway/bacnet.json | 58 ++++++
> .../thingsboard-gateway/ble.json | 53 ++++++
> .../thingsboard-gateway/can.json | 89 +++++++++
> .../thingsboard-gateway/custom_serial.json | 33 ++++
> .../thingsboard-gateway/logs.conf | 77 ++++++++
> .../thingsboard-gateway/modbus.json | 169 ++++++++++++++++++
> .../thingsboard-gateway/modbus_serial.json | 29 +++
> .../thingsboard-gateway/mqtt.json | 132 ++++++++++++++
> .../thingsboard-gateway/odbc.json | 54 ++++++
> .../thingsboard-gateway/opcua.json | 49 +++++
> .../thingsboard-gateway/request.json | 146 +++++++++++++++
> .../thingsboard-gateway/rest.json | 152 ++++++++++++++++
> .../thingsboard-gateway/snmp.json | 138 ++++++++++++++
> .../thingsboard-gateway/tb_gateway.yaml | 66 +++++++
> .../thingsboard-gateway.service | 13 ++
> .../thingsboard-gateway_2.5.2.bb | 68 +++++++
> 16 files changed, 1326 insertions(+)
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json
> create mode 100755
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml
> create mode 100644
> meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service
> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/
> thingsboard-gateway_2.5.2.bb
>
> 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 @@
> +{
> + "general": {
> + "objectName": "TB_gateway",
> + "address": "192.168.188.181:1052",
> + "objectIdentifier": 599,
> + "maxApduLengthAccepted": 1024,
> + "segmentationSupported": "segmentedBoth",
> + "vendorIdentifier": 15
> + },
> + "devices": [
> + {
> + "deviceName": "BACnet Device ${objectName}",
> + "deviceType": "default",
> + "address": "192.168.188.181:10520",
> + "pollPeriod": 10000,
> + "attributes": [
> + {
> + "key": "temperature",
> + "type": "string",
> + "objectId": "analogOutput:1",
> + "propertyId": "presentValue"
> + }
> + ],
> + "timeseries": [
> + {
> + "key": "state",
> + "type": "bool",
> + "objectId": "binaryValue:1",
> + "propertyId": "presentValue"
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "key": "brightness",
> + "requestType": "writeProperty",
> + "objectId": "analogOutput:1",
> + "propertyId": "presentValue"
> + }
> + ],
> + "serverSideRpc": [
> + {
> + "method": "set_state",
> + "requestType": "writeProperty",
> + "requestTimeout": 10000,
> + "objectId": "binaryOutput:1",
> + "propertyId": "presentValue"
> + },
> + {
> + "method": "get_state",
> + "requestType": "readProperty",
> + "requestTimeout": 10000,
> + "objectId": "binaryOutput:1",
> + "propertyId": "presentValue"
> + }
> + ]
> + }
> + ]
> + }
> \ 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 @@
> +{
> + "name": "BLE Connector",
> + "rescanIntervalSeconds": 100,
> + "checkIntervalSeconds": 100,
> + "scanTimeSeconds": 5,
> + "passiveScanMode": true,
> + "devices": [
> + {
> + "name": "Temperature and humidity sensor",
> + "MACAddress": "4C:65:A8:DF:85:C0",
> + "addrType": "public",
> + "telemetry": [
> + {
> + "key": "temperature",
> + "method": "notify",
> + "characteristicUUID":
> "226CAA55-6476-4566-7562-66734470666D",
> + "byteFrom": 2,
> + "byteTo": 6
> + },
> + {
> + "key": "humidity",
> + "method": "notify",
> + "characteristicUUID":
> "226CAA55-6476-4566-7562-66734470666D",
> + "byteFrom": 9,
> + "byteTo": 13
> + }
> + ],
> + "attributes": [
> + {
> + "key": "name",
> + "characteristicUUID":
> "00002A00-0000-1000-8000-00805F9B34FB",
> + "method": "read",
> + "byteFrom": 0,
> + "byteTo": -1
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "attributeOnThingsBoard": "sharedName",
> + "characteristicUUID":
> "00002A00-0000-1000-8000-00805F9B34FB"
> + }
> + ],
> + "serverSideRpc": [
> + {
> + "methodRPC": "rpcMethod1",
> + "withResponse": true,
> + "characteristicUUID":
> "00002A00-0000-1000-8000-00805F9B34FB",
> + "methodProcessing": "read"
> + }
> + ]
> + }
> + ]
> +}
> \ 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 @@
> +{
> + "interface": "socketcan",
> + "channel": "vcan0",
> + "backend": {
> + "fd": true
> + },
> + "reconnectPeriod": 5,
> + "devices": [
> + {
> + "name": "Car",
> + "sendDataOnlyOnChange": false,
> + "enableUnknownRpc": true,
> + "strictEval": false,
> + "attributes": [
> + {
> + "key": "isDriverDoorOpened",
> + "nodeId": 41,
> + "command": "2:2:big:8717",
> + "value": "4:1:int",
> + "expression": "bool(value & 0b00000100)",
> + "polling": {
> + "type": "once",
> + "dataInHex": "AB CD AB CD"
> + }
> + }
> + ],
> + "timeseries": [
> + {
> + "key": "rpm",
> + "nodeId": 1918,
> + "isExtendedId": true,
> + "command": "2:2:big:48059",
> + "value": "4:2:big:int",
> + "expression": "value / 4",
> + "polling": {
> + "type": "always",
> + "period": 5,
> + "dataInHex": "aaaa bbbb aaaa bbbb"
> + }
> + },
> + {
> + "key": "milliage",
> + "nodeId": 1918,
> + "isExtendedId": true,
> + "value": "4:2:little:int",
> + "expression": "value * 10",
> + "polling": {
> + "type": "always",
> + "period": 30,
> + "dataInHex": "aa bb cc dd ee ff aa bb"
> + }
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "attributeOnThingsBoard": "softwareVersion",
> + "nodeId": 64,
> + "isExtendedId": true,
> + "dataLength": 4,
> + "dataExpression": "value + 5",
> + "dataByteorder": "little"
> + }
> + ],
> + "serverSideRpc": [
> + {
> + "method": "sendSameData",
> + "nodeId": 4,
> + "isExtendedId": true,
> + "isFd": true,
> + "bitrateSwitch": true,
> + "dataInHex": "aa bb cc dd ee ff aa bb aa bb cc d ee ff"
> + },
> + {
> + "method": "setLightLevel",
> + "nodeId": 5,
> + "dataLength": 2,
> + "dataByteorder": "little",
> + "dataBefore": "00AA"
> + },
> + {
> + "method": "setSpeed",
> + "nodeId": 16,
> + "dataAfter": "0102",
> + "dataExpression": "userSpeed if maxAllowedSpeed > userSpeed
> else maxAllowedSpeed"
> + }
> + ]
> + }
> + ]
> + }
> \ 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 @@
> +{
> + "name": "Custom serial connector",
> + "devices": [
> + {
> + "name": "CustomSerialDevice1",
> + "type": "default",
> + "port": "/dev/ttyUSB0",
> + "baudrate": 9600,
> + "converter": "CustomSerialUplinkConverter",
> + "telemetry": [
> + {
> + "type": "byte",
> + "key": "humidity",
> + "untilDelimiter": "\r"
> + }
> + ],
> + "attributes":[
> + {
> + "key": "SerialNumber",
> + "type": "string",
> + "fromByte": 4,
> + "toByte": -1
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "attributeOnThingsBoard": "attr1",
> + "stringToDevice": "value = ${attr1}\n"
> + }
> + ]
> + }
> + ]
> +}
> \ 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 @@
> +[loggers]
> +keys=root, service, connector, converter, tb_connection, storage,
> extension
> +[handlers]
> +keys=consoleHandler, serviceHandler, connectorHandler, converterHandler,
> tb_connectionHandler, storageHandler, extensionHandler
> +[formatters]
> +keys=LogFormatter
> +[logger_root]
> +level=ERROR
> +handlers=consoleHandler
> +[logger_connector]
> +level=INFO
> +handlers=connectorHandler
> +formatter=LogFormatter
> +qualname=connector
> +[logger_storage]
> +level=INFO
> +handlers=storageHandler
> +formatter=LogFormatter
> +qualname=storage
> +[logger_tb_connection]
> +level=INFO
> +handlers=tb_connectionHandler
> +formatter=LogFormatter
> +qualname=tb_connection
> +[logger_service]
> +level=INFO
> +handlers=serviceHandler
> +formatter=LogFormatter
> +qualname=service
> +[logger_converter]
> +level=INFO
> +handlers=converterHandler
> +formatter=LogFormatter
> +qualname=converter
> +[logger_extension]
> +level=INFO
> +handlers=connectorHandler
> +formatter=LogFormatter
> +qualname=extension
> +[handler_consoleHandler]
> +class=StreamHandler
> +level=INFO
> +formatter=LogFormatter
> +args=(sys.stdout,)
> +[handler_connectorHandler]
> +level=INFO
> +class=logging.handlers.TimedRotatingFileHandler
> +formatter=LogFormatter
> +args=("./logs/connector.log", "d", 1, 7,)
> +[handler_storageHandler]
> +level=INFO
> +class=logging.handlers.TimedRotatingFileHandler
> +formatter=LogFormatter
> +args=("./logs/storage.log", "d", 1, 7,)
> +[handler_serviceHandler]
> +level=INFO
> +class=logging.handlers.TimedRotatingFileHandler
> +formatter=LogFormatter
> +args=("./logs/service.log", "d", 1, 7,)
> +[handler_converterHandler]
> +level=INFO
> +class=logging.handlers.TimedRotatingFileHandler
> +formatter=LogFormatter
> +args=("./logs/converter.log", "d", 1, 3,)
> +[handler_extensionHandler]
> +level=INFO
> +class=logging.handlers.TimedRotatingFileHandler
> +formatter=LogFormatter
> +args=("./logs/extension.log", "d", 1, 3,)
> +[handler_tb_connectionHandler]
> +level=INFO
> +class=logging.handlers.TimedRotatingFileHandler
> +formatter=LogFormatter
> +args=("./logs/tb_connection.log", "d", 1, 3,)
> +[formatter_LogFormatter]
> +format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s -
> %(lineno)d - %(message)s"
> +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 @@
> +{
> + "server": {
> + "type": "tcp",
> + "host": "127.0.0.1",
> + "port": 5020,
> + "timeout": 35,
> + "method": "socket",
> + "byteOrder": "BIG",
> + "devices": [
> + {
> + "unitId": 1,
> + "deviceName": "Temp Sensor",
> + "attributesPollPeriod": 5000,
> + "timeseriesPollPeriod": 5000,
> + "sendDataOnlyOnChange": true,
> + "attributes": [
> + {
> + "tag": "string_read",
> + "type": "string",
> + "functionCode": 4,
> + "objectsCount": 4,
> + "address": 1
> + },
> + {
> + "tag": "bits_read",
> + "type": "bits",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 5
> + },
> + {
> + "tag": "8int_read",
> + "type": "8int",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 6
> + },
> + {
> + "tag": "16int_read",
> + "type": "16int",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 7
> + },
> + {
> + "tag": "32int_read_divider",
> + "type": "32int",
> + "functionCode": 4,
> + "objectsCount": 2,
> + "address": 8,
> + "divider": 10
> + },
> + {
> + "tag": "8int_read_multiplier",
> + "type": "8int",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 10,
> + "multiplier": 10
> + },
> + {
> + "tag": "32int_read",
> + "type": "32int",
> + "functionCode": 4,
> + "objectsCount": 2,
> + "address": 11
> + },
> + {
> + "tag": "64int_read",
> + "type": "64int",
> + "functionCode": 4,
> + "objectsCount": 4,
> + "address": 13
> + }
> + ],
> + "timeseries": [
> + {
> + "tag": "8uint_read",
> + "type": "8uint",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 17
> + },
> + {
> + "tag": "16uint_read",
> + "type": "16uint",
> + "functionCode": 4,
> + "objectsCount": 2,
> + "address": 18
> + },
> + {
> + "tag": "32uint_read",
> + "type": "32uint",
> + "functionCode": 4,
> + "objectsCount": 4,
> + "address": 20
> + },
> + {
> + "tag": "64uint_read",
> + "type": "64uint",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 24
> + },
> + {
> + "tag": "16float_read",
> + "type": "16float",
> + "functionCode": 4,
> + "objectsCount": 1,
> + "address": 25
> + },
> + {
> + "tag": "32float_read",
> + "type": "32float",
> + "functionCode": 4,
> + "objectsCount": 2,
> + "address": 26
> + },
> + {
> + "tag": "64float_read",
> + "type": "64float",
> + "functionCode": 4,
> + "objectsCount": 4,
> + "address": 28
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "tag": "shared_attribute_write",
> + "type": "32int",
> + "functionCode": 6,
> + "objectsCount": 2,
> + "address": 29
> + }
> + ],
> + "rpc": [
> + {
> + "tag": "setValue",
> + "type": "bits",
> + "functionCode": 5,
> + "objectsCount": 1,
> + "address": 31
> + },
> + {
> + "tag": "getValue",
> + "type": "bits",
> + "functionCode": 1,
> + "objectsCount": 1,
> + "address": 31
> + },
> + {
> + "tag": "setCPUFanSpeed",
> + "type": "32int",
> + "functionCode": 16,
> + "objectsCount": 2,
> + "address": 33
> + },
> + {
> + "tag":"getCPULoad",
> + "type": "32int",
> + "functionCode": 4,
> + "objectsCount": 2,
> + "address": 35
> + }
> + ]
> + }
> + ]
> + }
> +}
> 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 @@
> +{
> + "server": {
> + "name": "Modbus Default Server",
> + "type": "serial",
> + "method": "rtu",
> + "port": "/dev/ttyUSB0",
> + "baudrate": 19200,
> + "timeout": 35,
> + "devices": [
> + {
> + "unitId": 1,
> + "deviceName": "Temp Sensor",
> + "attributesPollPeriod": 5000,
> + "timeseriesPollPeriod": 5000,
> + "sendDataOnlyOnChange": true,
> + "attributes": [
> + {
> + "byteOrder": "BIG",
> + "tag": "test",
> + "type": "long",
> + "functionCode": 4,
> + "registerCount": 1,
> + "address": 4
> + }
> + ]
> + }
> + ]
> + }
> +}
> \ 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 @@
> +{
> + "broker": {
> + "name":"Default Local Broker",
> + "host":"127.0.0.1",
> + "port":1883,
> + "clientId": "ThingsBoard_gateway",
> + "security": {
> + "type": "basic",
> + "username": "user",
> + "password": "password"
> + }
> + },
> + "mapping": [
> + {
> + "topicFilter": "/sensor/data",
> + "converter": {
> + "type": "json",
> + "deviceNameJsonExpression": "${serialNumber}",
> + "deviceTypeJsonExpression": "${sensorType}",
> + "timeout": 60000,
> + "attributes": [
> + {
> + "type": "string",
> + "key": "model",
> + "value": "${sensorModel}"
> + },
> + {
> + "type": "string",
> + "key": "${sensorModel}",
> + "value": "on"
> + }
> + ],
> + "timeseries": [
> + {
> + "type": "double",
> + "key": "temperature",
> + "value": "${temp}"
> + },
> + {
> + "type": "double",
> + "key": "humidity",
> + "value": "${hum}"
> + }
> + ]
> + }
> + },
> + {
> + "topicFilter": "/sensor/+/data",
> + "converter": {
> + "type": "json",
> + "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
> + "deviceTypeTopicExpression": "Thermometer",
> + "timeout": 60000,
> + "attributes": [
> + {
> + "type": "string",
> + "key": "model",
> + "value": "${sensorModel}"
> + }
> + ],
> + "timeseries": [
> + {
> + "type": "double",
> + "key": "temperature",
> + "value": "${temp}"
> + },
> + {
> + "type": "double",
> + "key": "humidity",
> + "value": "${hum}"
> + }
> + ]
> + }
> + },
> + {
> + "topicFilter": "/custom/sensors/+",
> + "converter": {
> + "type": "custom",
> + "extension": "CustomMqttUplinkConverter",
> + "extension-config": {
> + "temperatureBytes" : 2,
> + "humidityBytes" : 2,
> + "batteryLevelBytes" : 1
> + }
> + }
> + }
> + ],
> + "connectRequests": [
> + {
> + "topicFilter": "sensor/connect",
> + "deviceNameJsonExpression": "${SerialNumber}"
> + },
> + {
> + "topicFilter": "sensor/+/connect",
> + "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
> + }
> + ],
> + "disconnectRequests": [
> + {
> + "topicFilter": "sensor/disconnect",
> + "deviceNameJsonExpression": "${SerialNumber}"
> + },
> + {
> + "topicFilter": "sensor/+/disconnect",
> + "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "deviceNameFilter": "SmartMeter.*",
> + "attributeFilter": "uploadFrequency",
> + "topicExpression": "sensor/${deviceName}/${attributeKey}",
> + "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
> + }
> + ],
> + "serverSideRpc": [
> + {
> + "deviceNameFilter": ".*",
> + "methodFilter": "echo",
> + "requestTopicExpression":
> "sensor/${deviceName}/request/${methodName}/${requestId}",
> + "responseTopicExpression":
> "sensor/${deviceName}/response/${methodName}/${requestId}",
> + "responseTimeout": 10000,
> + "valueExpression": "${params}"
> + },
> + {
> + "deviceNameFilter": ".*",
> + "methodFilter": "no-reply",
> + "requestTopicExpression":
> "sensor/${deviceName}/request/${methodName}/${requestId}",
> + "valueExpression": "${params}"
> + }
> + ]
> +}
> \ 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 @@
> +{
> + "connection": {
> + "str":
> "Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;",
> + "attributes": {
> + "autocommit": true,
> + "timeout": 0
> + },
> + "encoding": "utf-8",
> + "decoding": {
> + "char": "utf-8",
> + "wchar": "utf-8",
> + "metadata": "utf-16le"
> + },
> + "reconnect": true,
> + "reconnectPeriod": 60
> + },
> + "pyodbc": {
> + "pooling": false
> + },
> + "polling": {
> + "query": "SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM
> ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10",
> + "period": 10,
> + "iterator": {
> + "column": "ts",
> + "query": "SELECT MIN(ts) - 1 FROM ts_kv",
> + "persistent": false
> + }
> + },
> + "mapping": {
> + "device": {
> + "type": "postgres",
> + "name": "'ODBC ' + entity_id"
> + },
> + "sendDataOnlyOnChange": false,
> + "attributes": "*",
> + "timeseries": [
> + {
> + "name": "value",
> + "value": "[i for i in [str_v, long_v, dbl_v,bool_v] if i is not
> None][0]"
> + }
> + ]
> + },
> + "serverSideRpc": {
> + "enableUnknownRpc": false,
> + "overrideRpcConfig": true,
> + "methods": [
> + "procedureOne",
> + {
> + "name": "procedureTwo",
> + "args": [ "One", 2, 3.0 ]
> + }
> + ]
> + }
> + }
> \ 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 @@
> +{
> + "server": {
> + "name": "OPC-UA Default Server",
> + "url": "localhost:4840/freeopcua/server/",
> + "timeoutInMillis": 5000,
> + "scanPeriodInMillis": 5000,
> + "disableSubscriptions":false,
> + "subCheckPeriodInMillis": 100,
> + "showMap": false,
> + "security": "Basic128Rsa15",
> + "identity": {
> + "type": "anonymous"
> + },
> + "mapping": [
> + {
> + "deviceNodePattern": "Root\\.Objects\\.Device1",
> + "deviceNamePattern": "Device
> ${Root\\.Objects\\.Device1\\.serialNumber}",
> + "attributes": [
> + {
> + "key": "temperature °C",
> + "path": "${ns=2;i=5}"
> + }
> + ],
> + "timeseries": [
> + {
> + "key": "humidity",
> + "path":
> "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"
> + },
> + {
> + "key": "batteryLevel",
> + "path": "${Battery\\.batteryLevel}"
> + }
> + ],
> + "rpc_methods": [
> + {
> + "method": "multiply",
> + "arguments": [2, 4]
> + }
> + ],
> + "attributes_updates": [
> + {
> + "attributeOnThingsBoard": "deviceName",
> + "attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
> + }
> + ]
> + }
> + ]
> + }
> +}
> \ 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 @@
> +"job": "leader"
> +},
> +"allowRedirects": true,
> +"timeout": 0.5,
> +"scanPeriod": 5,
> +"converter": {
> + "type": "json",
> + "deviceNameJsonExpression": "SD8500",
> + "deviceTypeJsonExpression": "SD",
> + "attributes": [
> + {
> + "key": "serialNumber",
> + "type": "string",
> + "value": "${serial}"
> + }
> + ],
> + "telemetry": [
> + {
> + "key": "Maintainer",
> + "type": "string",
> + "value": "${Developer}"
> + }
> + ]
> +}
> +},
> +{
> +"url": "get_info",
> +"httpMethod": "GET",
> +"httpHeaders": {
> + "ACCEPT": "application/json"
> +},
> +"allowRedirects": true,
> +"timeout": 0.5,
> +"scanPeriod": 100,
> +"converter": {
> + "type": "custom",
> + "deviceNameJsonExpression": "SD8500",
> + "deviceTypeJsonExpression": "SD",
> + "extension": "CustomRequestUplinkConverter",
> + "extension-config": [
> + {
> + "key": "Totaliser",
> + "type": "float",
> + "fromByte": 0,
> + "toByte": 4,
> + "byteorder": "big",
> + "signed": true,
> + "multiplier": 1
> + },
> + {
> + "key": "Flow",
> + "type": "int",
> + "fromByte": 4,
> + "toByte": 6,
> + "byteorder": "big",
> + "signed": true,
> + "multiplier": 0.01
> + },
> + {
> + "key": "Temperature",
> + "type": "int",
> + "fromByte": 8,
> + "toByte": 10,
> + "byteorder": "big",
> + "signed": true,
> + "multiplier": 0.01
> + },
> + {
> + "key": "Pressure",
> + "type": "int",
> + "fromByte": 12,
> + "toByte": 14,
> + "byteorder": "big",
> + "signed": true,
> + "multiplier": 0.01
> + },
> + {
> + "key": "deviceStatus",
> + "type": "int",
> + "byteAddress": 15,
> + "fromBit": 4,
> + "toBit": 8,
> + "byteorder": "big",
> + "signed": false
> + },
> + {
> + "key": "OUT2",
> + "type": "int",
> + "byteAddress": 15,
> + "fromBit": 1,
> + "toBit": 2,
> + "byteorder": "big"
> + },
> + {
> + "key": "OUT1",
> + "type": "int",
> + "byteAddress": 15,
> + "fromBit": 0,
> + "toBit": 1,
> + "byteorder": "big"
> + }
> + ]
> +}
> +}
> +],
> +"attributeUpdates": [
> +{
> + "httpMethod": "POST",
> + "httpHeaders": {
> + "CONTENT-TYPE": "application/json"
> + },
> + "timeout": 0.5,
> + "tries": 3,
> + "allowRedirects": true,
> + "deviceNameFilter": "SD.*",
> + "attributeFilter": "send_data",
> + "requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
> + "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
> +}
> +],
> +"serverSideRpc": [
> +{
> +"deviceNameFilter": ".*",
> +"methodFilter": "echo",
> +"requestUrlExpression":
> "sensor/${deviceName}/request/${methodName}/${requestId}",
> +"responseTimeout": 1,
> +"httpMethod": "GET",
> +"valueExpression": "${params}",
> +"timeout": 0.5,
> +"tries": 3,
> +"httpHeaders": {
> + "Content-Type": "application/json"
> +}
> +},
> +{
> +"deviceNameFilter": ".*",
> +"methodFilter": "no-reply",
> +"requestUrlExpression":
> "sensor/${deviceName}/request/${methodName}/${requestId}",
> +"httpMethod": "POST",
> +"valueExpression": "${params}",
> +"httpHeaders": {
> + "Content-Type": "application/json"
> +}
> +}
> +]
> +}
> \ 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 @@
> +{
> + "host": "127.0.0.1",
> + "port": "5000",
> + "mapping":[
> + {
> + "endpoint": "/device1",
> + "HTTPMethods": [
> + "POST"
> + ],
> + "security":
> + {
> + "type": "basic",
> + "username": "user",
> + "password": "passwd"
> + },
> + "converter": {
> + "type": "json",
> + "deviceNameExpression": "Device ${name}",
> + "deviceTypeExpression": "default",
> + "attributes": [
> + {
> + "type": "string",
> + "key": "model",
> + "value": "${sensorModel}"
> + }
> + ],
> + "timeseries": [
> + {
> + "type": "double",
> + "key": "${sensorModel}",
> + "value": "${temp}"
> + },
> + {
> + "type": "double",
> + "key": "humidity",
> + "value": "${hum}"
> + }
> + ]
> + }
> + },
> + {
> + "endpoint": "/anon1",
> + "HTTPMethods": [
> + "GET",
> + "POST"
> + ],
> + "security":
> + {
> + "type": "anonymous"
> + },
> + "converter": {
> + "type": "json",
> + "deviceNameExpression": "Device 2",
> + "deviceTypeExpression": "default",
> + "attributes": [
> + {
> + "type": "string",
> + "key": "model",
> + "value": "Model2"
> + }
> + ],
> + "timeseries": [
> + {
> + "type": "double",
> + "key": "temperature",
> + "value": "${temp}"
> + },
> + {
> + "type": "double",
> + "key": "humidity",
> + "value": "${hum}"
> + }
> + ]
> + }
> + },
> + {
> + "endpoint": "/anon2",
> + "HTTPMethods": [
> + "POST"
> + ],
> + "security":
> + {
> + "type": "anonymous"
> + },
> + "converter": {
> + "type": "custom",
> + "deviceNameExpression": "SuperAnonDevice",
> + "deviceTypeExpression": "default",
> + "extension": "CustomRestUplinkConverter",
> + "extension-config": [
> + {
> + "key": "Totaliser",
> + "datatype": "float",
> + "fromByte": 0,
> + "toByte": 4,
> + "byteorder": "big",
> + "signed": true,
> + "multiplier": 1
> + }]
> + }
> + }
> + ],
> + "attributeUpdates": [
> + {
> + "HTTPMethod": "POST",
> + "SSLVerify": false,
> + "httpHeaders": {
> + "CONTENT-TYPE": "application/json"
> + },
> + "security": {
> + "type": "basic",
> + "username": "user",
> + "password": "passwd"
> + },
> + "timeout": 0.5,
> + "tries": 3,
> + "allowRedirects": true,
> + "deviceNameFilter": ".*REST$",
> + "attributeFilter": "data",
> + "requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
> + "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
> + }
> + ],
> + "serverSideRpc": [
> + {
> + "deviceNameFilter": ".*",
> + "methodFilter": "echo",
> + "requestUrlExpression": "http://127.0.0.1:5001/${deviceName}",
> + "responseTimeout": 1,
> + "HTTPMethod": "GET",
> + "valueExpression": "${params}",
> + "timeout": 0.5,
> + "tries": 3,
> + "httpHeaders": {
> + "Content-Type": "application/json"
> + },
> + "security": {
> + "type": "anonymous"
> + }
> + },
> + {
> + "deviceNameFilter": ".*",
> + "methodFilter": "no-reply",
> + "requestUrlExpression":
> "sensor/${deviceName}/request/${methodName}/${requestId}",
> + "HTTPMethod": "POST",
> + "valueExpression": "${params}",
> + "httpHeaders": {
> + "Content-Type": "application/json"
> + }
> + }
> + ]
> + }
> \ 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 @@
> +{
> + "devices": [
> + {
> + "deviceName": "SNMP router",
> + "deviceType": "snmp",
> + "ip": "snmp.live.gambitcommunications.com",
> + "port": 161,
> + "pollPeriod": 5000,
> + "community": "public",
> + "attributes": [
> + {
> + "key": "ReceivedFromGet",
> + "method": "get",
> + "oid": "1.3.6.1.2.1.1.1.0",
> + "timeout": 6
> + },
> + {
> + "key": "ReceivedFromMultiGet",
> + "method": "multiget",
> + "oid": [
> + "1.3.6.1.2.1.1.1.0",
> + "1.3.6.1.2.1.1.2.0"
> + ],
> + "timeout": 6
> + },
> + {
> + "key": "ReceivedFromGetNext",
> + "method": "getnext",
> + "oid": "1.3.6.1.2.1.1.1.0",
> + "timeout": 6
> + },
> + {
> + "key": "ReceivedFromMultiWalk",
> + "method": "multiwalk",
> + "oid": [
> + "1.3.6.1.2.1.1.1.0",
> + "1.3.6.0.1.2.1"
> + ]
> + },
> + {
> + "key": "ReceivedFromBulkWalk",
> + "method": "bulkwalk",
> + "oid": [
> + "1.3.6.1.2.1.1.1.0",
> + "1.3.6.1.2.1.1.2.0"
> + ]
> + },
> + {
> + "key": "ReceivedFromBulkGet",
> + "method": "bulkget",
> + "scalarOid": [
> + "1.3.6.1.2.1.1.1.0",
> + "1.3.6.1.2.1.1.2.0"
> + ],
> + "repeatingOid": [
> + "1.3.6.1.2.1.1.1.0",
> + "1.3.6.1.2.1.1.2.0"
> + ],
> + "maxListSize": 10
> + }
> + ],
> + "telemetry": [
> + {
> + "key": "ReceivedFromWalk",
> + "community": "private",
> + "method": "walk",
> + "oid": "1.3.6.1.2.1.1.1.0"
> + },
> + {
> + "key": "ReceivedFromTable",
> + "method": "table",
> + "oid": "1.3.6.1.2.1.1"
> + }
> + ],
> + "attributeUpdateRequests": [
> + {
> + "attributeFilter": "dataToSet",
> + "method": "set",
> + "oid": "1.3.6.1.2.1.1.1.0"
> + },
> + {
> + "attributeFilter": "dataToMultiSet",
> + "method": "multiset",
> + "mappings": {
> + "1.2.3": "10",
> + "2.3.4": "${attribute}"
> + }
> + }
> + ],
> + "serverSideRpcRequests": [
> + {
> + "requestFilter": "setData",
> + "method": "set",
> + "oid": "1.3.6.1.2.1.1.1.0"
> + },
> + {
> + "requestFilter": "multiSetData",
> + "method": "multiset"
> + },
> + {
> + "requestFilter": "getData",
> + "method": "get",
> + "oid": "1.3.6.1.2.1.1.1.0"
> + },
> + {
> + "requestFilter": "runBulkWalk",
> + "method": "bulkwalk",
> + "oid": [
> + "1.3.6.1.2.1.1.1.0",
> + "1.3.6.1.2.1.1.2.0"
> + ]
> + }
> + ]
> + },
> + {
> + "deviceName": "SNMP router",
> + "deviceType": "snmp",
> + "ip": "127.0.0.1",
> + "pollPeriod": 5000,
> + "community": "public",
> + "converter": "CustomSNMPConverter",
> + "attributes": [
> + {
> + "key": "ReceivedFromGetWithCustomConverter",
> + "method": "get",
> + "oid": "1.3.6.1.2.1.1.1.0"
> + }
> + ],
> + "telemetry": [
> + {
> + "key": "ReceivedFromTableWithCustomConverter",
> + "method": "table",
> + "oid": "1.3.6.1.2.1.1.1.0"
> + }
> + ]
> + }
> + ]
> + }
> \ 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 @@
> +thingsboard:
> + host: demo.thingsboard.io
> + port: 1883
> + remoteConfiguration: false
> + security:
> + accessToken: PUT_YOUR_GW_ACCESS_TOKEN_HERE
> +storage:
> + type: memory
> + read_records_count: 100
> + max_records_count: 100000
> +# type: file
> +# data_folder_path: ./data/
> +# max_file_count: 10
> +# max_read_records_count: 10
> +# max_records_per_file: 10000
> +connectors:
> + -
> + name: MQTT Broker Connector
> + type: mqtt
> + configuration: mqtt.json
> +
> +# -
> +# name: Modbus Connector
> +# type: modbus
> +# configuration: modbus.json
> +#
> +# -
> +# name: Modbus Connector
> +# type: modbus
> +# configuration: modbus_serial.json
> +#
> +# -
> +# name: OPC-UA Connector
> +# type: opcua
> +# configuration: opcua.json
> +#
> +# -
> +# name: BLE Connector
> +# type: ble
> +# configuration: ble.json
> +#
> +# -
> +# name: REQUEST Connector
> +# type: request
> +# configuration: request.json
> +#
> +# -
> +# name: CAN Connector
> +# type: can
> +# configuration: can.json
> +#
> +# -
> +# name: BACnet Connector
> +# type: bacnet
> +# configuration: bacnet.json
> +#
> +# -
> +# name: ODBC Connector
> +# type: odbc
> +# configuration: odbc.json
> +#
> +# -
> +# name: Custom Serial Connector
> +# type: serial
> +# configuration: custom_serial.json
> +# 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 @@
> +[Unit]
> +Description = Systemd service for Thingsboard Gateway
> +After = network.target
> +
> +[Service]
> +ExecStart = /usr/bin/python3 /usr/bin/thingsboard-gateway
> +ExecStop = /bin/kill -INT $MAINPID
> +ExecReload = /bin/kill -TERM $MAINPID
> +Restart = always
> +Type = simple
> +
> +[Install]
> +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 @@
> +SUMMARY = "Open-source IoT platform for data collection, processing,
> visualization, and device management"
> +DESCRIPTION = "\
> +The Thingsboard IoT Gateway is an open-source solution that allows you \
> +to integrate devices connected to legacy and third-party systems with
> Thingsboard."
> +HOMEPAGE = "https://thingsboard.io/"
> +
> +LICENSE = "Apache-2.0"
> +LIC_FILES_CHKSUM =
> "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
> +
> +SRC_URI[md5sum] = "469c8b5cd1c16c20ef40f0a97a3a0fda"
> +SRC_URI[sha256sum] =
> "b328f4e315c3541ac80a4931974a34a81afe4d1f382f48e8604669a55816c0d7"
> +
> +inherit pypi setuptools3
> +
> +PYPI_PACKAGE = "thingsboard-gateway"
> +
> +RDEPENDS_${PN} += " python3-jsonpath-rw \
> + python3-regex \
> + python3-paho-mqtt \
> + python3-pyyaml \
> + python3-simplejson \
> + python3-requests \
> + python3-pip \
> + python3-pyrsistent \
> +"
> +
> +SRC_URI += "file://bacnet.json \
> + file://ble.json \
> + file://can.json \
> + file://custom_serial.json \
> + file://modbus.json \
> + file://modbus_serial.json \
> + file://mqtt.json \
> + file://opcua.json \
> + file://odbc.json \
> + file://request.json \
> + file://rest.json \
> + file://snmp.json \
> + file://tb_gateway.yaml \
> + file://logs.conf \
> + file://thingsboard-gateway.service \
> + "
> +
> +
> +inherit systemd
> +
> +SYSTEMD_PACKAGES = "${PN}"
> +SYSTEMD_SERVICE_${PN} = "thingsboard-gateway.service"
> +
> +FILES_${PN} += "/etc \
> + /lib \
> + /usr \
> +"
> +
> +do_install_append(){
> +
> + install -d ${D}${sysconfdir}/thingsboard-gateway/config
> +
> + for file in $(find ${WORKDIR} -maxdepth 1 -type f -name *.json); do
> + install -m 0644 "$file"
> ${D}${sysconfdir}/thingsboard-gateway/config
> + done
> +
> + install -m 0644 ${WORKDIR}/tb_gateway.yaml
> ${D}${sysconfdir}/thingsboard-gateway/config
> + install -m 0644 ${WORKDIR}/logs.conf
> ${D}${sysconfdir}/thingsboard-gateway/config
> +
> + install -d ${D}${systemd_unitdir}/system/
> + install -m 0644 ${WORKDIR}/thingsboard-gateway.service
> ${D}${systemd_system_unitdir}/thingsboard-gateway.service
> +}
> \ No newline at end of file
> --
> 2.29.2
>
>
>
>
[-- Attachment #2: Type: text/html, Size: 69033 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [oe] [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2
2020-11-19 10:14 ` [oe] " Martin Jansa
@ 2020-11-19 15:20 ` Khem Raj
0 siblings, 0 replies; 8+ messages in thread
From: Khem Raj @ 2020-11-19 15:20 UTC (permalink / raw)
To: Martin Jansa; +Cc: openembedded-devel, hasan.men
On Thu, Nov 19, 2020 at 2:15 AM Martin Jansa <martin.jansa@gmail.com> wrote:
>
> python3-jsonpath-rw dependency was added to meta-python, but meta-oe doesn't depend on meta-python, so either python3-jsonpath-rw needs to be moved to meta-oe (if it doesn't depend on other stuff from meta-python) or thingsboard-gateway needs to be moved to meta-python.
>
perhaps move it to meta-python is fine
> On Wed, Nov 18, 2020 at 12:04 AM Khem Raj <raj.khem@gmail.com> wrote:
>>
>> From: "hasan.men" <hasan.men@bosphorusiss.com>
>>
>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> ---
>> .../thingsboard-gateway/bacnet.json | 58 ++++++
>> .../thingsboard-gateway/ble.json | 53 ++++++
>> .../thingsboard-gateway/can.json | 89 +++++++++
>> .../thingsboard-gateway/custom_serial.json | 33 ++++
>> .../thingsboard-gateway/logs.conf | 77 ++++++++
>> .../thingsboard-gateway/modbus.json | 169 ++++++++++++++++++
>> .../thingsboard-gateway/modbus_serial.json | 29 +++
>> .../thingsboard-gateway/mqtt.json | 132 ++++++++++++++
>> .../thingsboard-gateway/odbc.json | 54 ++++++
>> .../thingsboard-gateway/opcua.json | 49 +++++
>> .../thingsboard-gateway/request.json | 146 +++++++++++++++
>> .../thingsboard-gateway/rest.json | 152 ++++++++++++++++
>> .../thingsboard-gateway/snmp.json | 138 ++++++++++++++
>> .../thingsboard-gateway/tb_gateway.yaml | 66 +++++++
>> .../thingsboard-gateway.service | 13 ++
>> .../thingsboard-gateway_2.5.2.bb | 68 +++++++
>> 16 files changed, 1326 insertions(+)
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json
>> create mode 100755 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service
>> create mode 100644 meta-oe/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb
>>
>> 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 @@
>> +{
>> + "general": {
>> + "objectName": "TB_gateway",
>> + "address": "192.168.188.181:1052",
>> + "objectIdentifier": 599,
>> + "maxApduLengthAccepted": 1024,
>> + "segmentationSupported": "segmentedBoth",
>> + "vendorIdentifier": 15
>> + },
>> + "devices": [
>> + {
>> + "deviceName": "BACnet Device ${objectName}",
>> + "deviceType": "default",
>> + "address": "192.168.188.181:10520",
>> + "pollPeriod": 10000,
>> + "attributes": [
>> + {
>> + "key": "temperature",
>> + "type": "string",
>> + "objectId": "analogOutput:1",
>> + "propertyId": "presentValue"
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "key": "state",
>> + "type": "bool",
>> + "objectId": "binaryValue:1",
>> + "propertyId": "presentValue"
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "key": "brightness",
>> + "requestType": "writeProperty",
>> + "objectId": "analogOutput:1",
>> + "propertyId": "presentValue"
>> + }
>> + ],
>> + "serverSideRpc": [
>> + {
>> + "method": "set_state",
>> + "requestType": "writeProperty",
>> + "requestTimeout": 10000,
>> + "objectId": "binaryOutput:1",
>> + "propertyId": "presentValue"
>> + },
>> + {
>> + "method": "get_state",
>> + "requestType": "readProperty",
>> + "requestTimeout": 10000,
>> + "objectId": "binaryOutput:1",
>> + "propertyId": "presentValue"
>> + }
>> + ]
>> + }
>> + ]
>> + }
>> \ 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 @@
>> +{
>> + "name": "BLE Connector",
>> + "rescanIntervalSeconds": 100,
>> + "checkIntervalSeconds": 100,
>> + "scanTimeSeconds": 5,
>> + "passiveScanMode": true,
>> + "devices": [
>> + {
>> + "name": "Temperature and humidity sensor",
>> + "MACAddress": "4C:65:A8:DF:85:C0",
>> + "addrType": "public",
>> + "telemetry": [
>> + {
>> + "key": "temperature",
>> + "method": "notify",
>> + "characteristicUUID": "226CAA55-6476-4566-7562-66734470666D",
>> + "byteFrom": 2,
>> + "byteTo": 6
>> + },
>> + {
>> + "key": "humidity",
>> + "method": "notify",
>> + "characteristicUUID": "226CAA55-6476-4566-7562-66734470666D",
>> + "byteFrom": 9,
>> + "byteTo": 13
>> + }
>> + ],
>> + "attributes": [
>> + {
>> + "key": "name",
>> + "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB",
>> + "method": "read",
>> + "byteFrom": 0,
>> + "byteTo": -1
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "attributeOnThingsBoard": "sharedName",
>> + "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB"
>> + }
>> + ],
>> + "serverSideRpc": [
>> + {
>> + "methodRPC": "rpcMethod1",
>> + "withResponse": true,
>> + "characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB",
>> + "methodProcessing": "read"
>> + }
>> + ]
>> + }
>> + ]
>> +}
>> \ 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 @@
>> +{
>> + "interface": "socketcan",
>> + "channel": "vcan0",
>> + "backend": {
>> + "fd": true
>> + },
>> + "reconnectPeriod": 5,
>> + "devices": [
>> + {
>> + "name": "Car",
>> + "sendDataOnlyOnChange": false,
>> + "enableUnknownRpc": true,
>> + "strictEval": false,
>> + "attributes": [
>> + {
>> + "key": "isDriverDoorOpened",
>> + "nodeId": 41,
>> + "command": "2:2:big:8717",
>> + "value": "4:1:int",
>> + "expression": "bool(value & 0b00000100)",
>> + "polling": {
>> + "type": "once",
>> + "dataInHex": "AB CD AB CD"
>> + }
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "key": "rpm",
>> + "nodeId": 1918,
>> + "isExtendedId": true,
>> + "command": "2:2:big:48059",
>> + "value": "4:2:big:int",
>> + "expression": "value / 4",
>> + "polling": {
>> + "type": "always",
>> + "period": 5,
>> + "dataInHex": "aaaa bbbb aaaa bbbb"
>> + }
>> + },
>> + {
>> + "key": "milliage",
>> + "nodeId": 1918,
>> + "isExtendedId": true,
>> + "value": "4:2:little:int",
>> + "expression": "value * 10",
>> + "polling": {
>> + "type": "always",
>> + "period": 30,
>> + "dataInHex": "aa bb cc dd ee ff aa bb"
>> + }
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "attributeOnThingsBoard": "softwareVersion",
>> + "nodeId": 64,
>> + "isExtendedId": true,
>> + "dataLength": 4,
>> + "dataExpression": "value + 5",
>> + "dataByteorder": "little"
>> + }
>> + ],
>> + "serverSideRpc": [
>> + {
>> + "method": "sendSameData",
>> + "nodeId": 4,
>> + "isExtendedId": true,
>> + "isFd": true,
>> + "bitrateSwitch": true,
>> + "dataInHex": "aa bb cc dd ee ff aa bb aa bb cc d ee ff"
>> + },
>> + {
>> + "method": "setLightLevel",
>> + "nodeId": 5,
>> + "dataLength": 2,
>> + "dataByteorder": "little",
>> + "dataBefore": "00AA"
>> + },
>> + {
>> + "method": "setSpeed",
>> + "nodeId": 16,
>> + "dataAfter": "0102",
>> + "dataExpression": "userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"
>> + }
>> + ]
>> + }
>> + ]
>> + }
>> \ 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 @@
>> +{
>> + "name": "Custom serial connector",
>> + "devices": [
>> + {
>> + "name": "CustomSerialDevice1",
>> + "type": "default",
>> + "port": "/dev/ttyUSB0",
>> + "baudrate": 9600,
>> + "converter": "CustomSerialUplinkConverter",
>> + "telemetry": [
>> + {
>> + "type": "byte",
>> + "key": "humidity",
>> + "untilDelimiter": "\r"
>> + }
>> + ],
>> + "attributes":[
>> + {
>> + "key": "SerialNumber",
>> + "type": "string",
>> + "fromByte": 4,
>> + "toByte": -1
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "attributeOnThingsBoard": "attr1",
>> + "stringToDevice": "value = ${attr1}\n"
>> + }
>> + ]
>> + }
>> + ]
>> +}
>> \ 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 @@
>> +[loggers]
>> +keys=root, service, connector, converter, tb_connection, storage, extension
>> +[handlers]
>> +keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler
>> +[formatters]
>> +keys=LogFormatter
>> +[logger_root]
>> +level=ERROR
>> +handlers=consoleHandler
>> +[logger_connector]
>> +level=INFO
>> +handlers=connectorHandler
>> +formatter=LogFormatter
>> +qualname=connector
>> +[logger_storage]
>> +level=INFO
>> +handlers=storageHandler
>> +formatter=LogFormatter
>> +qualname=storage
>> +[logger_tb_connection]
>> +level=INFO
>> +handlers=tb_connectionHandler
>> +formatter=LogFormatter
>> +qualname=tb_connection
>> +[logger_service]
>> +level=INFO
>> +handlers=serviceHandler
>> +formatter=LogFormatter
>> +qualname=service
>> +[logger_converter]
>> +level=INFO
>> +handlers=converterHandler
>> +formatter=LogFormatter
>> +qualname=converter
>> +[logger_extension]
>> +level=INFO
>> +handlers=connectorHandler
>> +formatter=LogFormatter
>> +qualname=extension
>> +[handler_consoleHandler]
>> +class=StreamHandler
>> +level=INFO
>> +formatter=LogFormatter
>> +args=(sys.stdout,)
>> +[handler_connectorHandler]
>> +level=INFO
>> +class=logging.handlers.TimedRotatingFileHandler
>> +formatter=LogFormatter
>> +args=("./logs/connector.log", "d", 1, 7,)
>> +[handler_storageHandler]
>> +level=INFO
>> +class=logging.handlers.TimedRotatingFileHandler
>> +formatter=LogFormatter
>> +args=("./logs/storage.log", "d", 1, 7,)
>> +[handler_serviceHandler]
>> +level=INFO
>> +class=logging.handlers.TimedRotatingFileHandler
>> +formatter=LogFormatter
>> +args=("./logs/service.log", "d", 1, 7,)
>> +[handler_converterHandler]
>> +level=INFO
>> +class=logging.handlers.TimedRotatingFileHandler
>> +formatter=LogFormatter
>> +args=("./logs/converter.log", "d", 1, 3,)
>> +[handler_extensionHandler]
>> +level=INFO
>> +class=logging.handlers.TimedRotatingFileHandler
>> +formatter=LogFormatter
>> +args=("./logs/extension.log", "d", 1, 3,)
>> +[handler_tb_connectionHandler]
>> +level=INFO
>> +class=logging.handlers.TimedRotatingFileHandler
>> +formatter=LogFormatter
>> +args=("./logs/tb_connection.log", "d", 1, 3,)
>> +[formatter_LogFormatter]
>> +format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s - %(lineno)d - %(message)s"
>> +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 @@
>> +{
>> + "server": {
>> + "type": "tcp",
>> + "host": "127.0.0.1",
>> + "port": 5020,
>> + "timeout": 35,
>> + "method": "socket",
>> + "byteOrder": "BIG",
>> + "devices": [
>> + {
>> + "unitId": 1,
>> + "deviceName": "Temp Sensor",
>> + "attributesPollPeriod": 5000,
>> + "timeseriesPollPeriod": 5000,
>> + "sendDataOnlyOnChange": true,
>> + "attributes": [
>> + {
>> + "tag": "string_read",
>> + "type": "string",
>> + "functionCode": 4,
>> + "objectsCount": 4,
>> + "address": 1
>> + },
>> + {
>> + "tag": "bits_read",
>> + "type": "bits",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 5
>> + },
>> + {
>> + "tag": "8int_read",
>> + "type": "8int",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 6
>> + },
>> + {
>> + "tag": "16int_read",
>> + "type": "16int",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 7
>> + },
>> + {
>> + "tag": "32int_read_divider",
>> + "type": "32int",
>> + "functionCode": 4,
>> + "objectsCount": 2,
>> + "address": 8,
>> + "divider": 10
>> + },
>> + {
>> + "tag": "8int_read_multiplier",
>> + "type": "8int",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 10,
>> + "multiplier": 10
>> + },
>> + {
>> + "tag": "32int_read",
>> + "type": "32int",
>> + "functionCode": 4,
>> + "objectsCount": 2,
>> + "address": 11
>> + },
>> + {
>> + "tag": "64int_read",
>> + "type": "64int",
>> + "functionCode": 4,
>> + "objectsCount": 4,
>> + "address": 13
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "tag": "8uint_read",
>> + "type": "8uint",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 17
>> + },
>> + {
>> + "tag": "16uint_read",
>> + "type": "16uint",
>> + "functionCode": 4,
>> + "objectsCount": 2,
>> + "address": 18
>> + },
>> + {
>> + "tag": "32uint_read",
>> + "type": "32uint",
>> + "functionCode": 4,
>> + "objectsCount": 4,
>> + "address": 20
>> + },
>> + {
>> + "tag": "64uint_read",
>> + "type": "64uint",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 24
>> + },
>> + {
>> + "tag": "16float_read",
>> + "type": "16float",
>> + "functionCode": 4,
>> + "objectsCount": 1,
>> + "address": 25
>> + },
>> + {
>> + "tag": "32float_read",
>> + "type": "32float",
>> + "functionCode": 4,
>> + "objectsCount": 2,
>> + "address": 26
>> + },
>> + {
>> + "tag": "64float_read",
>> + "type": "64float",
>> + "functionCode": 4,
>> + "objectsCount": 4,
>> + "address": 28
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "tag": "shared_attribute_write",
>> + "type": "32int",
>> + "functionCode": 6,
>> + "objectsCount": 2,
>> + "address": 29
>> + }
>> + ],
>> + "rpc": [
>> + {
>> + "tag": "setValue",
>> + "type": "bits",
>> + "functionCode": 5,
>> + "objectsCount": 1,
>> + "address": 31
>> + },
>> + {
>> + "tag": "getValue",
>> + "type": "bits",
>> + "functionCode": 1,
>> + "objectsCount": 1,
>> + "address": 31
>> + },
>> + {
>> + "tag": "setCPUFanSpeed",
>> + "type": "32int",
>> + "functionCode": 16,
>> + "objectsCount": 2,
>> + "address": 33
>> + },
>> + {
>> + "tag":"getCPULoad",
>> + "type": "32int",
>> + "functionCode": 4,
>> + "objectsCount": 2,
>> + "address": 35
>> + }
>> + ]
>> + }
>> + ]
>> + }
>> +}
>> 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 @@
>> +{
>> + "server": {
>> + "name": "Modbus Default Server",
>> + "type": "serial",
>> + "method": "rtu",
>> + "port": "/dev/ttyUSB0",
>> + "baudrate": 19200,
>> + "timeout": 35,
>> + "devices": [
>> + {
>> + "unitId": 1,
>> + "deviceName": "Temp Sensor",
>> + "attributesPollPeriod": 5000,
>> + "timeseriesPollPeriod": 5000,
>> + "sendDataOnlyOnChange": true,
>> + "attributes": [
>> + {
>> + "byteOrder": "BIG",
>> + "tag": "test",
>> + "type": "long",
>> + "functionCode": 4,
>> + "registerCount": 1,
>> + "address": 4
>> + }
>> + ]
>> + }
>> + ]
>> + }
>> +}
>> \ 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 @@
>> +{
>> + "broker": {
>> + "name":"Default Local Broker",
>> + "host":"127.0.0.1",
>> + "port":1883,
>> + "clientId": "ThingsBoard_gateway",
>> + "security": {
>> + "type": "basic",
>> + "username": "user",
>> + "password": "password"
>> + }
>> + },
>> + "mapping": [
>> + {
>> + "topicFilter": "/sensor/data",
>> + "converter": {
>> + "type": "json",
>> + "deviceNameJsonExpression": "${serialNumber}",
>> + "deviceTypeJsonExpression": "${sensorType}",
>> + "timeout": 60000,
>> + "attributes": [
>> + {
>> + "type": "string",
>> + "key": "model",
>> + "value": "${sensorModel}"
>> + },
>> + {
>> + "type": "string",
>> + "key": "${sensorModel}",
>> + "value": "on"
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "type": "double",
>> + "key": "temperature",
>> + "value": "${temp}"
>> + },
>> + {
>> + "type": "double",
>> + "key": "humidity",
>> + "value": "${hum}"
>> + }
>> + ]
>> + }
>> + },
>> + {
>> + "topicFilter": "/sensor/+/data",
>> + "converter": {
>> + "type": "json",
>> + "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
>> + "deviceTypeTopicExpression": "Thermometer",
>> + "timeout": 60000,
>> + "attributes": [
>> + {
>> + "type": "string",
>> + "key": "model",
>> + "value": "${sensorModel}"
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "type": "double",
>> + "key": "temperature",
>> + "value": "${temp}"
>> + },
>> + {
>> + "type": "double",
>> + "key": "humidity",
>> + "value": "${hum}"
>> + }
>> + ]
>> + }
>> + },
>> + {
>> + "topicFilter": "/custom/sensors/+",
>> + "converter": {
>> + "type": "custom",
>> + "extension": "CustomMqttUplinkConverter",
>> + "extension-config": {
>> + "temperatureBytes" : 2,
>> + "humidityBytes" : 2,
>> + "batteryLevelBytes" : 1
>> + }
>> + }
>> + }
>> + ],
>> + "connectRequests": [
>> + {
>> + "topicFilter": "sensor/connect",
>> + "deviceNameJsonExpression": "${SerialNumber}"
>> + },
>> + {
>> + "topicFilter": "sensor/+/connect",
>> + "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
>> + }
>> + ],
>> + "disconnectRequests": [
>> + {
>> + "topicFilter": "sensor/disconnect",
>> + "deviceNameJsonExpression": "${SerialNumber}"
>> + },
>> + {
>> + "topicFilter": "sensor/+/disconnect",
>> + "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "deviceNameFilter": "SmartMeter.*",
>> + "attributeFilter": "uploadFrequency",
>> + "topicExpression": "sensor/${deviceName}/${attributeKey}",
>> + "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
>> + }
>> + ],
>> + "serverSideRpc": [
>> + {
>> + "deviceNameFilter": ".*",
>> + "methodFilter": "echo",
>> + "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
>> + "responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
>> + "responseTimeout": 10000,
>> + "valueExpression": "${params}"
>> + },
>> + {
>> + "deviceNameFilter": ".*",
>> + "methodFilter": "no-reply",
>> + "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
>> + "valueExpression": "${params}"
>> + }
>> + ]
>> +}
>> \ 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 @@
>> +{
>> + "connection": {
>> + "str": "Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;",
>> + "attributes": {
>> + "autocommit": true,
>> + "timeout": 0
>> + },
>> + "encoding": "utf-8",
>> + "decoding": {
>> + "char": "utf-8",
>> + "wchar": "utf-8",
>> + "metadata": "utf-16le"
>> + },
>> + "reconnect": true,
>> + "reconnectPeriod": 60
>> + },
>> + "pyodbc": {
>> + "pooling": false
>> + },
>> + "polling": {
>> + "query": "SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10",
>> + "period": 10,
>> + "iterator": {
>> + "column": "ts",
>> + "query": "SELECT MIN(ts) - 1 FROM ts_kv",
>> + "persistent": false
>> + }
>> + },
>> + "mapping": {
>> + "device": {
>> + "type": "postgres",
>> + "name": "'ODBC ' + entity_id"
>> + },
>> + "sendDataOnlyOnChange": false,
>> + "attributes": "*",
>> + "timeseries": [
>> + {
>> + "name": "value",
>> + "value": "[i for i in [str_v, long_v, dbl_v,bool_v] if i is not None][0]"
>> + }
>> + ]
>> + },
>> + "serverSideRpc": {
>> + "enableUnknownRpc": false,
>> + "overrideRpcConfig": true,
>> + "methods": [
>> + "procedureOne",
>> + {
>> + "name": "procedureTwo",
>> + "args": [ "One", 2, 3.0 ]
>> + }
>> + ]
>> + }
>> + }
>> \ 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 @@
>> +{
>> + "server": {
>> + "name": "OPC-UA Default Server",
>> + "url": "localhost:4840/freeopcua/server/",
>> + "timeoutInMillis": 5000,
>> + "scanPeriodInMillis": 5000,
>> + "disableSubscriptions":false,
>> + "subCheckPeriodInMillis": 100,
>> + "showMap": false,
>> + "security": "Basic128Rsa15",
>> + "identity": {
>> + "type": "anonymous"
>> + },
>> + "mapping": [
>> + {
>> + "deviceNodePattern": "Root\\.Objects\\.Device1",
>> + "deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}",
>> + "attributes": [
>> + {
>> + "key": "temperature °C",
>> + "path": "${ns=2;i=5}"
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "key": "humidity",
>> + "path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"
>> + },
>> + {
>> + "key": "batteryLevel",
>> + "path": "${Battery\\.batteryLevel}"
>> + }
>> + ],
>> + "rpc_methods": [
>> + {
>> + "method": "multiply",
>> + "arguments": [2, 4]
>> + }
>> + ],
>> + "attributes_updates": [
>> + {
>> + "attributeOnThingsBoard": "deviceName",
>> + "attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
>> + }
>> + ]
>> + }
>> + ]
>> + }
>> +}
>> \ 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 @@
>> +"job": "leader"
>> +},
>> +"allowRedirects": true,
>> +"timeout": 0.5,
>> +"scanPeriod": 5,
>> +"converter": {
>> + "type": "json",
>> + "deviceNameJsonExpression": "SD8500",
>> + "deviceTypeJsonExpression": "SD",
>> + "attributes": [
>> + {
>> + "key": "serialNumber",
>> + "type": "string",
>> + "value": "${serial}"
>> + }
>> + ],
>> + "telemetry": [
>> + {
>> + "key": "Maintainer",
>> + "type": "string",
>> + "value": "${Developer}"
>> + }
>> + ]
>> +}
>> +},
>> +{
>> +"url": "get_info",
>> +"httpMethod": "GET",
>> +"httpHeaders": {
>> + "ACCEPT": "application/json"
>> +},
>> +"allowRedirects": true,
>> +"timeout": 0.5,
>> +"scanPeriod": 100,
>> +"converter": {
>> + "type": "custom",
>> + "deviceNameJsonExpression": "SD8500",
>> + "deviceTypeJsonExpression": "SD",
>> + "extension": "CustomRequestUplinkConverter",
>> + "extension-config": [
>> + {
>> + "key": "Totaliser",
>> + "type": "float",
>> + "fromByte": 0,
>> + "toByte": 4,
>> + "byteorder": "big",
>> + "signed": true,
>> + "multiplier": 1
>> + },
>> + {
>> + "key": "Flow",
>> + "type": "int",
>> + "fromByte": 4,
>> + "toByte": 6,
>> + "byteorder": "big",
>> + "signed": true,
>> + "multiplier": 0.01
>> + },
>> + {
>> + "key": "Temperature",
>> + "type": "int",
>> + "fromByte": 8,
>> + "toByte": 10,
>> + "byteorder": "big",
>> + "signed": true,
>> + "multiplier": 0.01
>> + },
>> + {
>> + "key": "Pressure",
>> + "type": "int",
>> + "fromByte": 12,
>> + "toByte": 14,
>> + "byteorder": "big",
>> + "signed": true,
>> + "multiplier": 0.01
>> + },
>> + {
>> + "key": "deviceStatus",
>> + "type": "int",
>> + "byteAddress": 15,
>> + "fromBit": 4,
>> + "toBit": 8,
>> + "byteorder": "big",
>> + "signed": false
>> + },
>> + {
>> + "key": "OUT2",
>> + "type": "int",
>> + "byteAddress": 15,
>> + "fromBit": 1,
>> + "toBit": 2,
>> + "byteorder": "big"
>> + },
>> + {
>> + "key": "OUT1",
>> + "type": "int",
>> + "byteAddress": 15,
>> + "fromBit": 0,
>> + "toBit": 1,
>> + "byteorder": "big"
>> + }
>> + ]
>> +}
>> +}
>> +],
>> +"attributeUpdates": [
>> +{
>> + "httpMethod": "POST",
>> + "httpHeaders": {
>> + "CONTENT-TYPE": "application/json"
>> + },
>> + "timeout": 0.5,
>> + "tries": 3,
>> + "allowRedirects": true,
>> + "deviceNameFilter": "SD.*",
>> + "attributeFilter": "send_data",
>> + "requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
>> + "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
>> +}
>> +],
>> +"serverSideRpc": [
>> +{
>> +"deviceNameFilter": ".*",
>> +"methodFilter": "echo",
>> +"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
>> +"responseTimeout": 1,
>> +"httpMethod": "GET",
>> +"valueExpression": "${params}",
>> +"timeout": 0.5,
>> +"tries": 3,
>> +"httpHeaders": {
>> + "Content-Type": "application/json"
>> +}
>> +},
>> +{
>> +"deviceNameFilter": ".*",
>> +"methodFilter": "no-reply",
>> +"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
>> +"httpMethod": "POST",
>> +"valueExpression": "${params}",
>> +"httpHeaders": {
>> + "Content-Type": "application/json"
>> +}
>> +}
>> +]
>> +}
>> \ 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 @@
>> +{
>> + "host": "127.0.0.1",
>> + "port": "5000",
>> + "mapping":[
>> + {
>> + "endpoint": "/device1",
>> + "HTTPMethods": [
>> + "POST"
>> + ],
>> + "security":
>> + {
>> + "type": "basic",
>> + "username": "user",
>> + "password": "passwd"
>> + },
>> + "converter": {
>> + "type": "json",
>> + "deviceNameExpression": "Device ${name}",
>> + "deviceTypeExpression": "default",
>> + "attributes": [
>> + {
>> + "type": "string",
>> + "key": "model",
>> + "value": "${sensorModel}"
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "type": "double",
>> + "key": "${sensorModel}",
>> + "value": "${temp}"
>> + },
>> + {
>> + "type": "double",
>> + "key": "humidity",
>> + "value": "${hum}"
>> + }
>> + ]
>> + }
>> + },
>> + {
>> + "endpoint": "/anon1",
>> + "HTTPMethods": [
>> + "GET",
>> + "POST"
>> + ],
>> + "security":
>> + {
>> + "type": "anonymous"
>> + },
>> + "converter": {
>> + "type": "json",
>> + "deviceNameExpression": "Device 2",
>> + "deviceTypeExpression": "default",
>> + "attributes": [
>> + {
>> + "type": "string",
>> + "key": "model",
>> + "value": "Model2"
>> + }
>> + ],
>> + "timeseries": [
>> + {
>> + "type": "double",
>> + "key": "temperature",
>> + "value": "${temp}"
>> + },
>> + {
>> + "type": "double",
>> + "key": "humidity",
>> + "value": "${hum}"
>> + }
>> + ]
>> + }
>> + },
>> + {
>> + "endpoint": "/anon2",
>> + "HTTPMethods": [
>> + "POST"
>> + ],
>> + "security":
>> + {
>> + "type": "anonymous"
>> + },
>> + "converter": {
>> + "type": "custom",
>> + "deviceNameExpression": "SuperAnonDevice",
>> + "deviceTypeExpression": "default",
>> + "extension": "CustomRestUplinkConverter",
>> + "extension-config": [
>> + {
>> + "key": "Totaliser",
>> + "datatype": "float",
>> + "fromByte": 0,
>> + "toByte": 4,
>> + "byteorder": "big",
>> + "signed": true,
>> + "multiplier": 1
>> + }]
>> + }
>> + }
>> + ],
>> + "attributeUpdates": [
>> + {
>> + "HTTPMethod": "POST",
>> + "SSLVerify": false,
>> + "httpHeaders": {
>> + "CONTENT-TYPE": "application/json"
>> + },
>> + "security": {
>> + "type": "basic",
>> + "username": "user",
>> + "password": "passwd"
>> + },
>> + "timeout": 0.5,
>> + "tries": 3,
>> + "allowRedirects": true,
>> + "deviceNameFilter": ".*REST$",
>> + "attributeFilter": "data",
>> + "requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
>> + "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
>> + }
>> + ],
>> + "serverSideRpc": [
>> + {
>> + "deviceNameFilter": ".*",
>> + "methodFilter": "echo",
>> + "requestUrlExpression": "http://127.0.0.1:5001/${deviceName}",
>> + "responseTimeout": 1,
>> + "HTTPMethod": "GET",
>> + "valueExpression": "${params}",
>> + "timeout": 0.5,
>> + "tries": 3,
>> + "httpHeaders": {
>> + "Content-Type": "application/json"
>> + },
>> + "security": {
>> + "type": "anonymous"
>> + }
>> + },
>> + {
>> + "deviceNameFilter": ".*",
>> + "methodFilter": "no-reply",
>> + "requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
>> + "HTTPMethod": "POST",
>> + "valueExpression": "${params}",
>> + "httpHeaders": {
>> + "Content-Type": "application/json"
>> + }
>> + }
>> + ]
>> + }
>> \ 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 @@
>> +{
>> + "devices": [
>> + {
>> + "deviceName": "SNMP router",
>> + "deviceType": "snmp",
>> + "ip": "snmp.live.gambitcommunications.com",
>> + "port": 161,
>> + "pollPeriod": 5000,
>> + "community": "public",
>> + "attributes": [
>> + {
>> + "key": "ReceivedFromGet",
>> + "method": "get",
>> + "oid": "1.3.6.1.2.1.1.1.0",
>> + "timeout": 6
>> + },
>> + {
>> + "key": "ReceivedFromMultiGet",
>> + "method": "multiget",
>> + "oid": [
>> + "1.3.6.1.2.1.1.1.0",
>> + "1.3.6.1.2.1.1.2.0"
>> + ],
>> + "timeout": 6
>> + },
>> + {
>> + "key": "ReceivedFromGetNext",
>> + "method": "getnext",
>> + "oid": "1.3.6.1.2.1.1.1.0",
>> + "timeout": 6
>> + },
>> + {
>> + "key": "ReceivedFromMultiWalk",
>> + "method": "multiwalk",
>> + "oid": [
>> + "1.3.6.1.2.1.1.1.0",
>> + "1.3.6.0.1.2.1"
>> + ]
>> + },
>> + {
>> + "key": "ReceivedFromBulkWalk",
>> + "method": "bulkwalk",
>> + "oid": [
>> + "1.3.6.1.2.1.1.1.0",
>> + "1.3.6.1.2.1.1.2.0"
>> + ]
>> + },
>> + {
>> + "key": "ReceivedFromBulkGet",
>> + "method": "bulkget",
>> + "scalarOid": [
>> + "1.3.6.1.2.1.1.1.0",
>> + "1.3.6.1.2.1.1.2.0"
>> + ],
>> + "repeatingOid": [
>> + "1.3.6.1.2.1.1.1.0",
>> + "1.3.6.1.2.1.1.2.0"
>> + ],
>> + "maxListSize": 10
>> + }
>> + ],
>> + "telemetry": [
>> + {
>> + "key": "ReceivedFromWalk",
>> + "community": "private",
>> + "method": "walk",
>> + "oid": "1.3.6.1.2.1.1.1.0"
>> + },
>> + {
>> + "key": "ReceivedFromTable",
>> + "method": "table",
>> + "oid": "1.3.6.1.2.1.1"
>> + }
>> + ],
>> + "attributeUpdateRequests": [
>> + {
>> + "attributeFilter": "dataToSet",
>> + "method": "set",
>> + "oid": "1.3.6.1.2.1.1.1.0"
>> + },
>> + {
>> + "attributeFilter": "dataToMultiSet",
>> + "method": "multiset",
>> + "mappings": {
>> + "1.2.3": "10",
>> + "2.3.4": "${attribute}"
>> + }
>> + }
>> + ],
>> + "serverSideRpcRequests": [
>> + {
>> + "requestFilter": "setData",
>> + "method": "set",
>> + "oid": "1.3.6.1.2.1.1.1.0"
>> + },
>> + {
>> + "requestFilter": "multiSetData",
>> + "method": "multiset"
>> + },
>> + {
>> + "requestFilter": "getData",
>> + "method": "get",
>> + "oid": "1.3.6.1.2.1.1.1.0"
>> + },
>> + {
>> + "requestFilter": "runBulkWalk",
>> + "method": "bulkwalk",
>> + "oid": [
>> + "1.3.6.1.2.1.1.1.0",
>> + "1.3.6.1.2.1.1.2.0"
>> + ]
>> + }
>> + ]
>> + },
>> + {
>> + "deviceName": "SNMP router",
>> + "deviceType": "snmp",
>> + "ip": "127.0.0.1",
>> + "pollPeriod": 5000,
>> + "community": "public",
>> + "converter": "CustomSNMPConverter",
>> + "attributes": [
>> + {
>> + "key": "ReceivedFromGetWithCustomConverter",
>> + "method": "get",
>> + "oid": "1.3.6.1.2.1.1.1.0"
>> + }
>> + ],
>> + "telemetry": [
>> + {
>> + "key": "ReceivedFromTableWithCustomConverter",
>> + "method": "table",
>> + "oid": "1.3.6.1.2.1.1.1.0"
>> + }
>> + ]
>> + }
>> + ]
>> + }
>> \ 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 @@
>> +thingsboard:
>> + host: demo.thingsboard.io
>> + port: 1883
>> + remoteConfiguration: false
>> + security:
>> + accessToken: PUT_YOUR_GW_ACCESS_TOKEN_HERE
>> +storage:
>> + type: memory
>> + read_records_count: 100
>> + max_records_count: 100000
>> +# type: file
>> +# data_folder_path: ./data/
>> +# max_file_count: 10
>> +# max_read_records_count: 10
>> +# max_records_per_file: 10000
>> +connectors:
>> + -
>> + name: MQTT Broker Connector
>> + type: mqtt
>> + configuration: mqtt.json
>> +
>> +# -
>> +# name: Modbus Connector
>> +# type: modbus
>> +# configuration: modbus.json
>> +#
>> +# -
>> +# name: Modbus Connector
>> +# type: modbus
>> +# configuration: modbus_serial.json
>> +#
>> +# -
>> +# name: OPC-UA Connector
>> +# type: opcua
>> +# configuration: opcua.json
>> +#
>> +# -
>> +# name: BLE Connector
>> +# type: ble
>> +# configuration: ble.json
>> +#
>> +# -
>> +# name: REQUEST Connector
>> +# type: request
>> +# configuration: request.json
>> +#
>> +# -
>> +# name: CAN Connector
>> +# type: can
>> +# configuration: can.json
>> +#
>> +# -
>> +# name: BACnet Connector
>> +# type: bacnet
>> +# configuration: bacnet.json
>> +#
>> +# -
>> +# name: ODBC Connector
>> +# type: odbc
>> +# configuration: odbc.json
>> +#
>> +# -
>> +# name: Custom Serial Connector
>> +# type: serial
>> +# configuration: custom_serial.json
>> +# 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 @@
>> +[Unit]
>> +Description = Systemd service for Thingsboard Gateway
>> +After = network.target
>> +
>> +[Service]
>> +ExecStart = /usr/bin/python3 /usr/bin/thingsboard-gateway
>> +ExecStop = /bin/kill -INT $MAINPID
>> +ExecReload = /bin/kill -TERM $MAINPID
>> +Restart = always
>> +Type = simple
>> +
>> +[Install]
>> +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 @@
>> +SUMMARY = "Open-source IoT platform for data collection, processing, visualization, and device management"
>> +DESCRIPTION = "\
>> +The Thingsboard IoT Gateway is an open-source solution that allows you \
>> +to integrate devices connected to legacy and third-party systems with Thingsboard."
>> +HOMEPAGE = "https://thingsboard.io/"
>> +
>> +LICENSE = "Apache-2.0"
>> +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
>> +
>> +SRC_URI[md5sum] = "469c8b5cd1c16c20ef40f0a97a3a0fda"
>> +SRC_URI[sha256sum] = "b328f4e315c3541ac80a4931974a34a81afe4d1f382f48e8604669a55816c0d7"
>> +
>> +inherit pypi setuptools3
>> +
>> +PYPI_PACKAGE = "thingsboard-gateway"
>> +
>> +RDEPENDS_${PN} += " python3-jsonpath-rw \
>> + python3-regex \
>> + python3-paho-mqtt \
>> + python3-pyyaml \
>> + python3-simplejson \
>> + python3-requests \
>> + python3-pip \
>> + python3-pyrsistent \
>> +"
>> +
>> +SRC_URI += "file://bacnet.json \
>> + file://ble.json \
>> + file://can.json \
>> + file://custom_serial.json \
>> + file://modbus.json \
>> + file://modbus_serial.json \
>> + file://mqtt.json \
>> + file://opcua.json \
>> + file://odbc.json \
>> + file://request.json \
>> + file://rest.json \
>> + file://snmp.json \
>> + file://tb_gateway.yaml \
>> + file://logs.conf \
>> + file://thingsboard-gateway.service \
>> + "
>> +
>> +
>> +inherit systemd
>> +
>> +SYSTEMD_PACKAGES = "${PN}"
>> +SYSTEMD_SERVICE_${PN} = "thingsboard-gateway.service"
>> +
>> +FILES_${PN} += "/etc \
>> + /lib \
>> + /usr \
>> +"
>> +
>> +do_install_append(){
>> +
>> + install -d ${D}${sysconfdir}/thingsboard-gateway/config
>> +
>> + for file in $(find ${WORKDIR} -maxdepth 1 -type f -name *.json); do
>> + install -m 0644 "$file" ${D}${sysconfdir}/thingsboard-gateway/config
>> + done
>> +
>> + install -m 0644 ${WORKDIR}/tb_gateway.yaml ${D}${sysconfdir}/thingsboard-gateway/config
>> + install -m 0644 ${WORKDIR}/logs.conf ${D}${sysconfdir}/thingsboard-gateway/config
>> +
>> + install -d ${D}${systemd_unitdir}/system/
>> + install -m 0644 ${WORKDIR}/thingsboard-gateway.service ${D}${systemd_system_unitdir}/thingsboard-gateway.service
>> +}
>> \ No newline at end of file
>> --
>> 2.29.2
>>
>>
>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [oe] [meta-python][PATCH 5/5] python3-jsonpath-rw: Add recipe for v1.4.0
2020-11-17 23:04 ` [meta-python][PATCH 5/5] python3-jsonpath-rw: Add recipe for v1.4.0 Khem Raj
@ 2020-11-23 20:56 ` Trevor Gamblin
0 siblings, 0 replies; 8+ messages in thread
From: Trevor Gamblin @ 2020-11-23 20:56 UTC (permalink / raw)
To: Khem Raj, openembedded-devel; +Cc: hasan.men
[-- Attachment #1: Type: text/plain, Size: 1353 bytes --]
On 2020-11-17 6:04 p.m., Khem Raj wrote:
> [Please note this e-mail is from an EXTERNAL e-mail address]
>
> From: "hasan.men" <hasan.men@bosphorusiss.com>
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Trevor Gamblin <trevor.gamblin@windriver.com>
> ---
> .../python/python3-jsonpath-rw_1.4.0.bb | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
> create mode 100644 meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb
>
> diff --git a/meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb b/meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb
> new file mode 100644
> index 0000000000..54e1b646d5
> --- /dev/null
> +++ b/meta-python/recipes-devtools/python/python3-jsonpath-rw_1.4.0.bb
> @@ -0,0 +1,12 @@
> +DESCRIPTION = "A robust and significantly extended implementation of JSONPath for Python"
> +HOMEPAGE = "https://github.com/kennknowles/python-jsonpath-rw"
> +SECTION = "devel/python"
> +LICENSE = "BSD+"
> +LIC_FILES_CHKSUM = "file://README.rst;md5=02384665f821c394981e0dd1faec9a7d"
> +
> +SRC_URI[md5sum] = "3a807e05c2c12158fc6bb0a402fd5778"
> +SRC_URI[sha256sum] = "05c471281c45ae113f6103d1268ec7a4831a2e96aa80de45edc89b11fac4fbec"
> +
> +inherit pypi setuptools3
> +
> +RDEPENDS_${PN} += " python3-decorator"
> --
> 2.29.2
>
>
>
>
[-- Attachment #2: Type: text/html, Size: 2445 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-11-23 20:56 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-17 23:04 [meta-networking][PATCH 1/5] openipmi: Inherit python3targetconfig Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 2/5] libplist: " Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 3/5] postgresql: " Khem Raj
2020-11-17 23:04 ` [meta-oe][PATCH 4/5] thingsboard-gateway: Add recipe for v2.5.2 Khem Raj
2020-11-19 10:14 ` [oe] " Martin Jansa
2020-11-19 15:20 ` Khem Raj
2020-11-17 23:04 ` [meta-python][PATCH 5/5] python3-jsonpath-rw: Add recipe for v1.4.0 Khem Raj
2020-11-23 20:56 ` [oe] " Trevor Gamblin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.