* [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
* 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
* [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-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.