meta-openembedded: subtree update:164a6030b0..f623d8b574

Adrian Freihofer (1):
      paho-mqtt-c: upgrade 1.3.6 -> 1.3.7

Alexander Kamensky (2):
      makedumpfile: add PACKAGECONFIG options for lzo and snappy compression
      makedumpfile: upgrade 1.6.7 -> 1.6.8

Alexander Kanavin (4):
      collect: do not build with -Werror
      libsigrokdecode: add python 3.9 support
      python3-mprpc: remove the recipe
      gnome-calendar: update to 3.38.1, add libhandy 1.x support

Anatol Belski (1):
      chrony: Patch CVE-2020-14367

Bartosz Golaszewski (1):
      libgpiod: update v1.4.4 -> v1.4.5

Beni (1):
      unbound: upgrade to 1.12.0

Gregory Anders (5):
      Add suitesparse
      Add python3-transitions
      Add python3-dill
      Add python3-cerberus
      Add python3-cvxopt

Hongxu Jia (1):
      lvm2.inc: switch branch master to main

Jasper Orschulko (1):
      upgrade and de-blacklist nanopb recipe

Jose Quaresma (3):
      spirv-tools: moved into OE-core, delete from meta-oe
      srt: add receipe
      opencv: Update 4.4.0 -> 4.5.0

Kai Kang (4):
      xfce4-cpufreq-plugin: 1.2.1 -> 1.2.2
      xfce4-weather-plugin: 0.10.1 -> 0.10.2
      xfce4-mailwatch-plugin: 1.2.0 -> 1.3.0
      tumbler: 0.2.9 -> 0.3.1

Khem Raj (71):
      nodejs: Fix arm32/thumb builds with clang
      nodejs: Update to 12.19.0
      redis: Fix build on 32bit targets and clang
      gperftools: Fix build with new musl updates
      minifi-cpp: Fix build with riscv64/clang
      graphviz: Upgrade to 2.44.1 release
      musl-nscd: Update to latest
      remmina: Update to 1.4.8
      mdbus2: Fix build with vala 0.50
      ibus: Update to 1.5.3 plus fix for vala 0.50
      networkd-dispatcher: Upgrade to 2.1
      geoclue: Use git fetcher
      kernel-selftest: Disable vm packageconfig for riscv
      layer.conf: Add hardknott to LAYERSERIES_COMPAT
      fmt: Upgrade to 7.1.2
      lksctp-tools: Update to latest master
      fuse3: Upgrade to 3.10.0
      rdma-core: Upgrade to 31.1
      opengl-es-cts: Disable LTO
      fluentbit: Disable LTO
      traceroute: Fix build with LTO
      cmocka: Fix buils with LTO
      dovecot: Disable LTO
      redis-plus-plus: Upgrade to 1.2.1
      suitesparse: Exclude from world
      python3-icu: Update to 2.6
      meta-python: Drop RDEPEND'ing on python3-typing
      python3-cvxopt: Exclude from world builds
      packagegroup-meta-multimedia: Add srt
      gedit: Inherit python3targetconfig
      gmime: Fix append to do_configure
      dconf: Add leading whitespace for append operator
      kexec-tools-klibc: Add leading whitespace for append operator
      spice: Add leading whitespace for append operator
      meta-oe: Add leading whitespace for append operator
      libgusb: Update to 0.3.5
      botan: Mark incompatible with riscv32
      projucer: Link with libatomic on rv32
      mariadb: Fix build on 32bit arches with 64bit time_t
      liburing: Fix build on 32-bit arches with 64-bit time_t
      librtorrent: Disable instrumentation on rv32
      ntopng: Link with libatomic on rv32
      poco: Add riscv32 support
      capnproto: Fix build on 32bit arches with 64bit time_t defaults
      directfb: Fix build on riscv32
      opensaf: Fix build on 32bit arches with 64bit time_t e.g. RISCV-32
      rocksdb: Update to 6.12.7
      qpdf: Link with libatomic on rv32
      libkcapi: Fix build on riscv32
      jack: Upgrade to 1.19.16
      vlc: Fix build on riscv32
      fluentbit: Link with libatomic on riscv32
      openipmi: Inherit python3targetconfig
      libplist: Inherit python3targetconfig
      postgresql: Inherit python3targetconfig
      python-grpcio-tools: Add missing space for append
      python3-pykwalify: Do not unset _PYTHON_SYSCONFIGDATA_NAME
      thingsboard-gateway: Move under dynamic layers
      musl-nscd: Replace -fcommon with code patch
      musl-nscd: Add missing deps on flex and bison during build
      python3-pytest: Upgrade to 6.1.2
      python3-hypothesis: Add recipe
      python3-sortedcontainers: Add recipe
      heaptrack: Fix build on musl
      heaptrack: Mark RISCV host incompatible
      packagegroup-meta-oe: Exclude heaptrack for rv32/rv64
      chrony: Upgrade to 4.0
      canutils,can-utils: Add cansequence to u-a as well
      packagegroup-meta-python: Add newly added recipes to packagegroup-meta-python3
      pipewire: Link with libatomic for riscv32
      python3-matplotlib: Disable LTO for clang/riscv

Kory Maincent (1):
      libftdi: add swig-native to dependencies

Leon Anavi (37):
      python3-luma-oled: Upgrade 3.6.0 -> 3.7.0
      python3-cryptography-vectors: Upgrade 3.1.1 -> 3.2
      python3-pyexpect: Upgrade 1.0.20 -> 1.0.21
      python3-markdown: Upgrade 3.3.2 -> 3.3.3
      python3-sh: Upgrade 1.14.0 -> 1.14.1
      python3-kiwisolver: Upgrade 1.2.0 -> 1.3.0
      python3-aiohttp: Upgrade 3.7.1 -> 3.7.2
      python3-aiofiles: Upgrade 0.5.0 -> 0.6.0
      python3-regex: Upgrade 2020.10.23 -> 2020.10.28
      python3-dateparser: Upgrade 0.7.6 -> 1.0.0
      python3-langtable: Upgrade 0.0.53 -> 0.0.54
      python3-kiwisolver: Upgrade 1.3.0 -> 1.3.1
      python3-tornado: Upgrade 6.0.4 -> 6.1
      python3-ipython: Upgrade 7.18.1 -> 7.19.0
      python3-cmd2: Upgrade 1.3.11 -> 1.4.0
      python3-dill: Upgrade 0.3.2 -> 0.3.3
      python3-colorlog: Upgrade 4.4.0 -> 4.6.2
      python3-pandas: Upgrade 1.1.3 -> 1.1.4
      python3-attrs: 20.2.0 -> 20.3.0
      python3-gmqtt: Upgrade 0.6.7 -> 0.6.8
      python3-diskcache: Upgrade 5.0.3 -> 5.1.0
      python3-croniter: Upgrade 0.3.35 -> 0.3.36
      python3-bitarray: Upgrade 1.6.0 -> 1.6.1
      python3-certifi: Upgrade 2020.6.20 -> 2020.11.8
      python3-cantools: Upgrade 35.3.0 -> 35.5.0
      python3-arpeggio: Upgrade 1.9.2 -> 1.10.1
      python3-toml: Upgrade 0.10.1 -> 0.10.2
      python3-pyrad: Upgrade 2.3 -> 2.4
      python3-bitstruct: Upgrade 8.11.0 -> 8.11.1
      python3-yarl: Upgrade 1.6.2 -> 1.6.3
      python3-luma-core: Upgrade 1.17.3 -> 2.0.1
      python3-luma-oled: Upgrade 3.7.0 -> 3.8.1
      python3-fastnumbers: Upgrade 3.0.0 -> 3.1.0
      python3-ansi2html: Upgrade 1.5.2 -> 1.6.0
      python3-prettytable: Upgrade 1.0.1 -> 2.0.0
      python3-urllib3: Upgrade 1.25.11 -> 1.26.2
      python3-transitions: Upgrade 0.8.4 -> 0.8.5

Li Zhou (1):
      ptpd: Solve memory leak for function NTPDCrequest

Maciej Pijanowski (2):
      cdrkit: add native to BBCLASSEXTEND
      cdrkit: split into more packages

Mark Jonas (5):
      mbedtls: Fix typo in PACKAGECONFIG
      python3-pyinotify: Add missing ctypes dependency
      libsocketcan: Add PACKAGECONFIG options
      libsocketcan: Update to 0.0.12
      imagemagick: Add NOTICE to collected license texts

Max Kellermann (1):
      php: remove the failing ${D}/${TMPDIR} code

Mingli Yu (6):
      ndpi: add new recipe
      libmaxminddb: add new recipe
      ntopng: add new recipe
      ntop: remove the recipe
      packagegroup-meta-networking.bb: add ntopng related recipes
      traceroute: set VPATH

Nick Rosbrook (3):
      strongswan: add some PACKAGECONFIG options for EAP
      strongswan: do not use deprecated stroke and starter by default
      strongswan: remove ldap from default PACKAGECONFIG

Pierre-Jean Texier (1):
      inotify-tools: upgrade 3.20.2.2 -> 3.20.11.0

Randy Witt (1):
      numactl: Remove the recipe

Ricardo Salveti (3):
      wireguard-module: upgrade 1.0.20200712 -> 1.0.20200908
      wireguard-tools: upgrade 1.0.20200513 -> 1.0.20200827
      wireguard-module: upgrade 1.0.20200908 -> 1.0.20201112

Sakib Sajal (1):
      libssh2: fix ptest

Sinan Kaya (3):
      collectd: fix the test condition for dash compatibility
      heaptrack: add bitbake recipe
      cpp-netlib: add bitbake recipe

Tim Orling (16):
      python3-atomicwrites: drop (moved to oe-core)
      python3-attrs: drop (moved to oe-core)
      python3-iniconfig: drop (moved to oe-core)
      python3-more-itertools: drop (moved to oe-core)
      python3-pathlib2: drop (moved to oe-core)
      python3-toml: drop (moved to oe-core)
      python3-py: drop (moved to oe-core)
      python3-setuptools-scm: drop (moved to oe-core)
      python3-packaging: drop (moved to oe-core)
      python3-wcwidth: drop (moved to oe-core)
      python3-zipp: drop (moved to oe-core)
      python3-importlib-metadata: drop (moved to oe-core)
      python3-pluggy: drop (moved to oe-core)
      python3-pytest: drop (moved to oe-core)
      python3-hypothesis: drop (moved to oe-core)
      python3-sortedcontainers: drop (moved to oe-core)

Trevor Gamblin (2):
      python3-jinja2: Fix ptest RDEPENDS and file installation
      python3-markupsafe: Fix ptest RDEPENDS and installation

William A. Kennington III (1):
      span-lite: Bump e03d116..0.8.1

Yi Zhao (5):
      minifi-cpp: specify GCC_AR and GCC_RANLIB
      quagga: unify volatiles file name
      minifi-cpp: depend on nettle and lz4
      nss: upgrade 3.57 -> 3.59
      krb5: upgrade 1.17.1 -> 1.17.2

Zang Ruochen (19):
      libnftnl: upgrade 1.1.7 -> 1.1.8
      xfsprogs: upgrade 5.8.0 -> 5.9.0
      radvd: upgrade 2.18 -> 2.19
      fmt: upgrade 7.0.3 -> 7.1.0
      hidapi: upgrade 0.9.0 -> 0.10.0
      libkcapi: upgrade 1.2.0 -> 1.2.1
      modemmanager: upgrade 1.14.2 -> 1.14.6
      nvme-cli: upgrade 1.12 -> 1.13
      ostree: upgrade 2020.6 -> 2020.7
      poppler-data: upgrade 0.4.9 -> 0.4.10
      nftables: upgrade 0.9.6 -> 0.9.7
      toybox: upgrade 0.8.3 -> 0.8.4
      fbgrab: upgrade 1.3.3 -> 1.4
      mraa: upgrade 2.1.0 -> 2.2.0
      opensaf: upgrade 5.20.05 -> 5.20.08
      openvpn: upgrade 2.4.9 -> 2.5.0
      poppler: upgrade 20.10.0 -> 20.11.0
      tmux: upgrade 3.1b -> 3.1c
      xmlsec1: upgrade 1.2.30 -> 1.2.31

changqing.li@windriver.com (1):
      thin-provisioning-tools: switch branch from master to main

hasan.men (2):
      thingsboard-gateway: Add recipe for v2.5.2
      python3-jsonpath-rw: Add recipe for v1.4.0

richard (1):
      poco: Upgrade 1.9.4 -> 1.10.1

viatsk (1):
      tcpdump: Patch for CVE-2020-8037

zangrc (27):
      sshfs-fuse: upgrade 3.7.0 -> 3.7.1
      can-utils: upgrade 2020.02.04 -> 2020.11.0
      hwdata: upgrade 0.340 -> 0.341
      libio-pty-perl: upgrade 1.14 -> 1.15
      live555: upgrade 20200819 -> 20201105
      zile: upgrade 2.4.14 -> 2.4.15
      rdma-core: upgrade 31.1 -> 32.0
      strongswan: upgrade 5.8.4 -> 5.9.1
      fio: upgrade 3.22 -> 3.24
      libharu: Fix the packaging bug
      modemmanager: upgrade 1.14.6 -> 1.14.8
      openldap: upgrade 2.4.51 -> 2.4.56
      protobuf: upgrade 3.13.0.1 -> 3.14.0
      nghttp2: upgrade 2.41.0 -> 2.42.0
      nngpp: upgrade 1.2.4 -> 1.3.0
      snort: upgrade 2.9.16.1 -> 2.9.17
      weechat: upgrade 2.9 -> 3.0
      cjson: upgrade 1.7.13 -> 1.7.14
      cloc: upgrade 1.84 -> 1.88
      jpnevulator: upgrade 2.3.5 -> 2.3.6
      libjcat: upgrade 0.1.3 -> 0.1.4
      libsigc++-3: upgrade 3.0.3 -> 3.0.6
      ocl-icd: upgrade 2.2.12 -> 2.2.13
      opencl-clhpp: upgrade 2.0.11 -> 2.0.12
      ostree: upgrade 2020.7 -> 2020.8
      pkcs11-helper: upgrade 1.26 -> 1.27
      netplan: upgrade 0.99 -> 0.100

zhengruoqin (1):
      dnf-plugin-tui: Update to the latest version

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I286bb6d58bf30588516b35ec06ddfd0bedee2e64
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/bacnet.json
new file mode 100644
index 0000000..e36a216
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/ble.json
new file mode 100755
index 0000000..2a5da3f
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/can.json
new file mode 100644
index 0000000..b5cec00
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/custom_serial.json
new file mode 100755
index 0000000..0aee5cb
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/logs.conf
new file mode 100755
index 0000000..d66c2b8
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus.json
new file mode 100755
index 0000000..479d8aa
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/modbus_serial.json
new file mode 100755
index 0000000..19b38e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/mqtt.json
new file mode 100755
index 0000000..6b78a7c
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/odbc.json
new file mode 100644
index 0000000..c93992a
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/opcua.json
new file mode 100755
index 0000000..1deed7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/request.json
new file mode 100644
index 0000000..43237a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/rest.json
new file mode 100644
index 0000000..be6c6ff
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/snmp.json
new file mode 100644
index 0000000..b4ddb42
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/tb_gateway.yaml
new file mode 100755
index 0000000..e3eb8f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway/thingsboard-gateway.service
new file mode 100644
index 0000000..5dd352a
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_2.5.2.bb
new file mode 100644
index 0000000..2f0ef16
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/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