tb-mqtt-client


Nametb-mqtt-client JSON
Version 1.10.10 PyPI version JSON
download
home_pagehttps://github.com/thingsboard/thingsboard-python-client-sdk
SummaryThingsBoard python client SDK
upload_time2024-11-05 11:40:05
maintainerNone
docs_urlNone
authorThingsBoard
requires_python>=3.9
licenseApache Software License (Apache Software License 2.0)
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ThingsBoard MQTT and HTTP client Python SDK
[![Join the chat at https://gitter.im/thingsboard/chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/thingsboard/chat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

<a href="https://thingsboard.io"><img src="./logo.png?raw=true" width="100" height="100"></a>

ThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management.
This project is a Python library that provides convenient client SDK for both Device and [Gateway](https://thingsboard.io/docs/reference/gateway-mqtt-api/) APIs.

SDK supports:
- Unencrypted and encrypted (TLS v1.2) connection
- QoS 0 and 1 (MQTT only)
- Automatic reconnect
- All [Device MQTT](https://thingsboard.io/docs/reference/mqtt-api/) APIs provided by ThingsBoard
- All [Gateway MQTT](https://thingsboard.io/docs/reference/gateway-mqtt-api/) APIs provided by ThingsBoard
- Most [Device HTTP](https://thingsboard.io/docs/reference/http-api/) APIs provided by ThingsBoard
- Device Claiming
- Firmware updates

The [Device MQTT](https://thingsboard.io/docs/reference/mqtt-api/) API and the [Gateway MQTT](https://thingsboard.io/docs/reference/gateway-mqtt-api/) API are base on the Paho MQTT library. The [Device HTTP](https://thingsboard.io/docs/reference/http-api/) API is based on the Requests library.

## Installation

To install using pip:

```bash
pip3 install tb-mqtt-client
```

## Getting Started

Client initialization and telemetry publishing
### MQTT
```python
from tb_device_mqtt import TBDeviceMqttClient, TBPublishInfo


telemetry = {"temperature": 41.9, "enabled": False, "currentFirmwareVersion": "v1.2.2"}

# Initialize ThingsBoard client
client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
# Connect to ThingsBoard
client.connect()
# Sending telemetry without checking the delivery status
client.send_telemetry(telemetry) 
# Sending telemetry and checking the delivery status (QoS = 1 by default)
result = client.send_telemetry(telemetry)
# get is a blocking call that awaits delivery status  
success = result.get() == TBPublishInfo.TB_ERR_SUCCESS
# Disconnect from ThingsBoard
client.disconnect()

```

### MQTT using TLS

TLS connection to localhost. See https://thingsboard.io/docs/user-guide/mqtt-over-ssl/ for more information about client and ThingsBoard configuration.

```python
from tb_device_mqtt import TBDeviceMqttClient
import socket


client = TBDeviceMqttClient(socket.gethostname())
client.connect(tls=True,
               ca_certs="mqttserver.pub.pem",
               cert_file="mqttclient.nopass.pem")
client.disconnect()

```

### HTTP

````python
from tb_device_http import TBHTTPDevice


client = TBHTTPDevice('https://thingsboard.example.com', 'secret-token')
client.connect()
client.send_telemetry({'temperature': 41.9})

````

## Using Device APIs

**TBDeviceMqttClient** provides access to Device MQTT APIs of ThingsBoard platform. It allows to publish telemetry and attribute updates, subscribe to attribute changes, send and receive RPC commands, etc. Use **TBHTTPClient** for the Device HTTP API.
#### Subscription to attributes
You can subscribe to attribute updates from the server. The following example demonstrates how to subscribe to attribute updates from the server.
##### MQTT
```python
import time
from tb_device_mqtt import TBDeviceMqttClient


def on_attributes_change(client, result, exception):
    if exception is not None:
        print("Exception: " + str(exception))
    else:
        print(result)

        
client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
client.connect()
client.subscribe_to_attribute("uploadFrequency", on_attributes_change)
client.subscribe_to_all_attributes(on_attributes_change)
while True:
    time.sleep(1)

```

##### HTTP
Note: The HTTP API only allows a subscription to updates for all attribute.
```python
from tb_device_http import TBHTTPClient


client = TBHTTPClient('https://thingsboard.example.com', 'secret-token')

def callback(data):
    print(data)
    # ...

# Subscribe
client.subscribe('attributes', callback)
# Unsubscribe
client.unsubscribe('attributes')

```

#### Telemetry pack sending
You can send multiple telemetry messages at once. The following example demonstrates how to send multiple telemetry messages at once.
##### MQTT
```python

from tb_device_mqtt import TBDeviceMqttClient, TBPublishInfo
import time


telemetry_with_ts = {"ts": int(round(time.time() * 1000)), "values": {"temperature": 42.1, "humidity": 70}}
client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
# we set maximum amount of messages sent to send them at the same time. it may stress memory but increases performance
client.max_inflight_messages_set(100)
client.connect()
results = []
result = True
for i in range(0, 100):
    results.append(client.send_telemetry(telemetry_with_ts))
for tmp_result in results:
    result &= tmp_result.get() == TBPublishInfo.TB_ERR_SUCCESS
print("Result " + str(result))
client.disconnect()

```
##### HTTP
Unsupported, the HTTP API does not allow the packing of values.

#### Request attributes from server
You can request attributes from the server. The following example demonstrates how to request attributes from the server.

##### MQTT
```python

import time
from tb_device_mqtt import TBDeviceMqttClient


def on_attributes_change(client,result, exception):
    if exception is not None:
        print("Exception: " + str(exception))
    else:
        print(result)

        
client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
client.connect()
client.request_attributes(["configuration","targetFirmwareVersion"], callback=on_attributes_change)
while True:
    time.sleep(1)

```

##### HTTP
```python
from tb_device_http import TBHTTPClient


client = TBHTTPClient('https://thingsboard.example.com', 'secret-token')

client_keys = ['attr1', 'attr2']
shared_keys = ['shared1', 'shared2']
data = client.request_attributes(client_keys=client_keys, shared_keys=shared_keys)

```

#### Respond to server RPC call
You can respond to RPC calls from the server. The following example demonstrates how to respond to RPC calls from the server.
Please install psutil using 'pip install psutil' command before running the example.

##### MQTT
```python

try:
    import psutil
except ImportError:
    print("Please install psutil using 'pip install psutil' command")
    exit(1)
import time
import logging
from tb_device_mqtt import TBDeviceMqttClient

# dependently of request method we send different data back
def on_server_side_rpc_request(client, request_id, request_body):
    print(request_id, request_body)
    if request_body["method"] == "getCPULoad":
        client.send_rpc_reply(request_id, {"CPU percent": psutil.cpu_percent()})
    elif request_body["method"] == "getMemoryUsage":
        client.send_rpc_reply(request_id, {"Memory": psutil.virtual_memory().percent})

client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
client.set_server_side_rpc_request_handler(on_server_side_rpc_request)
client.connect()
while True:
    time.sleep(1)

```

##### HTTP
You can use HTTP API client in case you want to use HTTP API instead of MQTT API. 
```python
from tb_device_http import TBHTTPClient


client = TBHTTPClient('https://thingsboard.example.com', 'secret-token')

def callback(data):
    rpc_id = data['id']
    # ... do something with data['params'] and data['method']...
    response_params = {'result': 1}
    client.send_rpc(name='rpc_response', rpc_id=rpc_id, params=response_params)

# Subscribe
client.subscribe('rpc', callback)
# Unsubscribe
client.unsubscribe('rpc')

```

## Using Gateway APIs

**TBGatewayMqttClient** extends **TBDeviceMqttClient**, thus has access to all it's APIs as a regular device.
Besides, gateway is able to represent multiple devices connected to it. For example, sending telemetry or attributes on behalf of other, constrained, device. See more info about the gateway here: 
#### Telemetry and attributes sending 
```python
import time
from tb_gateway_mqtt import TBGatewayMqttClient


gateway = TBGatewayMqttClient("127.0.0.1", username="TEST_GATEWAY_TOKEN")
gateway.connect()
gateway.gw_connect_device("Test Device A1")

gateway.gw_send_telemetry("Test Device A1", {"ts": int(round(time.time() * 1000)), "values": {"temperature": 42.2}})
gateway.gw_send_attributes("Test Device A1", {"firmwareVersion": "2.3.1"})

gateway.gw_disconnect_device("Test Device A1")
gateway.disconnect()

```
#### Request attributes

You can request attributes from the server. The following example demonstrates how to request attributes from the server.

```python
import time
from tb_gateway_mqtt import TBGatewayMqttClient


def callback(result, exception):
    if exception is not None:
        print("Exception: " + str(exception))
    else:
        print(result)

        
gateway = TBGatewayMqttClient("127.0.0.1", username="TEST_GATEWAY_TOKEN")
gateway.connect()
gateway.gw_request_shared_attributes("Test Device A1", ["temperature"], callback)

while True:
    time.sleep(1)

```
#### Respond to RPC

You can respond to RPC calls from the server. The following example demonstrates how to respond to RPC calls from the server.
Please install psutil using 'pip install psutil' command before running the example.

```python
import time

from tb_gateway_mqtt import TBGatewayMqttClient
try:
    import psutil
except ImportError:
    print("Please install psutil using 'pip install psutil' command")
    exit(1)

    
def rpc_request_response(client, request_id, request_body):
    # request body contains id, method and other parameters
    print(request_body)
    method = request_body["data"]["method"]
    device = request_body["device"]
    req_id = request_body["data"]["id"]
    # dependently of request method we send different data back
    if method == 'getCPULoad':
        gateway.gw_send_rpc_reply(device, req_id, {"CPU load": psutil.cpu_percent()})
    elif method == 'getMemoryLoad':
        gateway.gw_send_rpc_reply(device, req_id, {"Memory": psutil.virtual_memory().percent})
    else:
        print('Unknown method: ' + method)

        
gateway = TBGatewayMqttClient("127.0.0.1", username="TEST_GATEWAY_TOKEN")
gateway.connect()
# now rpc_request_response will process rpc requests from servers
gateway.gw_set_server_side_rpc_request_handler(rpc_request_response)
# without device connection it is impossible to get any messages
gateway.gw_connect_device("Test Device A1")
while True:
    time.sleep(1)

```
## Other Examples

There are more examples for both [device](https://github.com/thingsboard/thingsboard-python-client-sdk/tree/master/examples/device) and [gateway](https://github.com/thingsboard/thingsboard-python-client-sdk/tree/master/examples/gateway) in corresponding [folders](https://github.com/thingsboard/thingsboard-python-client-sdk/tree/master/examples).

## Support

 - [Community chat](https://gitter.im/thingsboard/chat)
 - [Q&A forum](https://groups.google.com/forum/#!forum/thingsboard)
 - [Stackoverflow](http://stackoverflow.com/questions/tagged/thingsboard)

## Licenses

This project is released under [Apache 2.0 License](./LICENSE).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/thingsboard/thingsboard-python-client-sdk",
    "name": "tb-mqtt-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "ThingsBoard",
    "author_email": "info@thingsboard.io",
    "download_url": "https://files.pythonhosted.org/packages/7d/cc/8b3f8a2a2f92e054a97e2d7ad503fd40f822ce2a9000375075f7a634421b/tb_mqtt_client-1.10.10.tar.gz",
    "platform": null,
    "description": "# ThingsBoard MQTT and HTTP client Python SDK\n[![Join the chat at https://gitter.im/thingsboard/chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/thingsboard/chat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n<a href=\"https://thingsboard.io\"><img src=\"./logo.png?raw=true\" width=\"100\" height=\"100\"></a>\n\nThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management.\nThis project is a Python library that provides convenient client SDK for both Device and [Gateway](https://thingsboard.io/docs/reference/gateway-mqtt-api/) APIs.\n\nSDK supports:\n- Unencrypted and encrypted (TLS v1.2) connection\n- QoS 0 and 1 (MQTT only)\n- Automatic reconnect\n- All [Device MQTT](https://thingsboard.io/docs/reference/mqtt-api/) APIs provided by ThingsBoard\n- All [Gateway MQTT](https://thingsboard.io/docs/reference/gateway-mqtt-api/) APIs provided by ThingsBoard\n- Most [Device HTTP](https://thingsboard.io/docs/reference/http-api/) APIs provided by ThingsBoard\n- Device Claiming\n- Firmware updates\n\nThe [Device MQTT](https://thingsboard.io/docs/reference/mqtt-api/) API and the [Gateway MQTT](https://thingsboard.io/docs/reference/gateway-mqtt-api/) API are base on the Paho MQTT library. The [Device HTTP](https://thingsboard.io/docs/reference/http-api/) API is based on the Requests library.\n\n## Installation\n\nTo install using pip:\n\n```bash\npip3 install tb-mqtt-client\n```\n\n## Getting Started\n\nClient initialization and telemetry publishing\n### MQTT\n```python\nfrom tb_device_mqtt import TBDeviceMqttClient, TBPublishInfo\n\n\ntelemetry = {\"temperature\": 41.9, \"enabled\": False, \"currentFirmwareVersion\": \"v1.2.2\"}\n\n# Initialize ThingsBoard client\nclient = TBDeviceMqttClient(\"127.0.0.1\", username=\"A1_TEST_TOKEN\")\n# Connect to ThingsBoard\nclient.connect()\n# Sending telemetry without checking the delivery status\nclient.send_telemetry(telemetry) \n# Sending telemetry and checking the delivery status (QoS = 1 by default)\nresult = client.send_telemetry(telemetry)\n# get is a blocking call that awaits delivery status  \nsuccess = result.get() == TBPublishInfo.TB_ERR_SUCCESS\n# Disconnect from ThingsBoard\nclient.disconnect()\n\n```\n\n### MQTT using TLS\n\nTLS connection to localhost. See https://thingsboard.io/docs/user-guide/mqtt-over-ssl/ for more information about client and ThingsBoard configuration.\n\n```python\nfrom tb_device_mqtt import TBDeviceMqttClient\nimport socket\n\n\nclient = TBDeviceMqttClient(socket.gethostname())\nclient.connect(tls=True,\n               ca_certs=\"mqttserver.pub.pem\",\n               cert_file=\"mqttclient.nopass.pem\")\nclient.disconnect()\n\n```\n\n### HTTP\n\n````python\nfrom tb_device_http import TBHTTPDevice\n\n\nclient = TBHTTPDevice('https://thingsboard.example.com', 'secret-token')\nclient.connect()\nclient.send_telemetry({'temperature': 41.9})\n\n````\n\n## Using Device APIs\n\n**TBDeviceMqttClient** provides access to Device MQTT APIs of ThingsBoard platform. It allows to publish telemetry and attribute updates, subscribe to attribute changes, send and receive RPC commands, etc. Use **TBHTTPClient** for the Device HTTP API.\n#### Subscription to attributes\nYou can subscribe to attribute updates from the server. The following example demonstrates how to subscribe to attribute updates from the server.\n##### MQTT\n```python\nimport time\nfrom tb_device_mqtt import TBDeviceMqttClient\n\n\ndef on_attributes_change(client, result, exception):\n    if exception is not None:\n        print(\"Exception: \" + str(exception))\n    else:\n        print(result)\n\n        \nclient = TBDeviceMqttClient(\"127.0.0.1\", username=\"A1_TEST_TOKEN\")\nclient.connect()\nclient.subscribe_to_attribute(\"uploadFrequency\", on_attributes_change)\nclient.subscribe_to_all_attributes(on_attributes_change)\nwhile True:\n    time.sleep(1)\n\n```\n\n##### HTTP\nNote: The HTTP API only allows a subscription to updates for all attribute.\n```python\nfrom tb_device_http import TBHTTPClient\n\n\nclient = TBHTTPClient('https://thingsboard.example.com', 'secret-token')\n\ndef callback(data):\n    print(data)\n    # ...\n\n# Subscribe\nclient.subscribe('attributes', callback)\n# Unsubscribe\nclient.unsubscribe('attributes')\n\n```\n\n#### Telemetry pack sending\nYou can send multiple telemetry messages at once. The following example demonstrates how to send multiple telemetry messages at once.\n##### MQTT\n```python\n\nfrom tb_device_mqtt import TBDeviceMqttClient, TBPublishInfo\nimport time\n\n\ntelemetry_with_ts = {\"ts\": int(round(time.time() * 1000)), \"values\": {\"temperature\": 42.1, \"humidity\": 70}}\nclient = TBDeviceMqttClient(\"127.0.0.1\", username=\"A1_TEST_TOKEN\")\n# we set maximum amount of messages sent to send them at the same time. it may stress memory but increases performance\nclient.max_inflight_messages_set(100)\nclient.connect()\nresults = []\nresult = True\nfor i in range(0, 100):\n    results.append(client.send_telemetry(telemetry_with_ts))\nfor tmp_result in results:\n    result &= tmp_result.get() == TBPublishInfo.TB_ERR_SUCCESS\nprint(\"Result \" + str(result))\nclient.disconnect()\n\n```\n##### HTTP\nUnsupported, the HTTP API does not allow the packing of values.\n\n#### Request attributes from server\nYou can request attributes from the server. The following example demonstrates how to request attributes from the server.\n\n##### MQTT\n```python\n\nimport time\nfrom tb_device_mqtt import TBDeviceMqttClient\n\n\ndef on_attributes_change(client,result, exception):\n    if exception is not None:\n        print(\"Exception: \" + str(exception))\n    else:\n        print(result)\n\n        \nclient = TBDeviceMqttClient(\"127.0.0.1\", username=\"A1_TEST_TOKEN\")\nclient.connect()\nclient.request_attributes([\"configuration\",\"targetFirmwareVersion\"], callback=on_attributes_change)\nwhile True:\n    time.sleep(1)\n\n```\n\n##### HTTP\n```python\nfrom tb_device_http import TBHTTPClient\n\n\nclient = TBHTTPClient('https://thingsboard.example.com', 'secret-token')\n\nclient_keys = ['attr1', 'attr2']\nshared_keys = ['shared1', 'shared2']\ndata = client.request_attributes(client_keys=client_keys, shared_keys=shared_keys)\n\n```\n\n#### Respond to server RPC call\nYou can respond to RPC calls from the server. The following example demonstrates how to respond to RPC calls from the server.\nPlease install psutil using 'pip install psutil' command before running the example.\n\n##### MQTT\n```python\n\ntry:\n    import psutil\nexcept ImportError:\n    print(\"Please install psutil using 'pip install psutil' command\")\n    exit(1)\nimport time\nimport logging\nfrom tb_device_mqtt import TBDeviceMqttClient\n\n# dependently of request method we send different data back\ndef on_server_side_rpc_request(client, request_id, request_body):\n    print(request_id, request_body)\n    if request_body[\"method\"] == \"getCPULoad\":\n        client.send_rpc_reply(request_id, {\"CPU percent\": psutil.cpu_percent()})\n    elif request_body[\"method\"] == \"getMemoryUsage\":\n        client.send_rpc_reply(request_id, {\"Memory\": psutil.virtual_memory().percent})\n\nclient = TBDeviceMqttClient(\"127.0.0.1\", username=\"A1_TEST_TOKEN\")\nclient.set_server_side_rpc_request_handler(on_server_side_rpc_request)\nclient.connect()\nwhile True:\n    time.sleep(1)\n\n```\n\n##### HTTP\nYou can use HTTP API client in case you want to use HTTP API instead of MQTT API. \n```python\nfrom tb_device_http import TBHTTPClient\n\n\nclient = TBHTTPClient('https://thingsboard.example.com', 'secret-token')\n\ndef callback(data):\n    rpc_id = data['id']\n    # ... do something with data['params'] and data['method']...\n    response_params = {'result': 1}\n    client.send_rpc(name='rpc_response', rpc_id=rpc_id, params=response_params)\n\n# Subscribe\nclient.subscribe('rpc', callback)\n# Unsubscribe\nclient.unsubscribe('rpc')\n\n```\n\n## Using Gateway APIs\n\n**TBGatewayMqttClient** extends **TBDeviceMqttClient**, thus has access to all it's APIs as a regular device.\nBesides, gateway is able to represent multiple devices connected to it. For example, sending telemetry or attributes on behalf of other, constrained, device. See more info about the gateway here: \n#### Telemetry and attributes sending \n```python\nimport time\nfrom tb_gateway_mqtt import TBGatewayMqttClient\n\n\ngateway = TBGatewayMqttClient(\"127.0.0.1\", username=\"TEST_GATEWAY_TOKEN\")\ngateway.connect()\ngateway.gw_connect_device(\"Test Device A1\")\n\ngateway.gw_send_telemetry(\"Test Device A1\", {\"ts\": int(round(time.time() * 1000)), \"values\": {\"temperature\": 42.2}})\ngateway.gw_send_attributes(\"Test Device A1\", {\"firmwareVersion\": \"2.3.1\"})\n\ngateway.gw_disconnect_device(\"Test Device A1\")\ngateway.disconnect()\n\n```\n#### Request attributes\n\nYou can request attributes from the server. The following example demonstrates how to request attributes from the server.\n\n```python\nimport time\nfrom tb_gateway_mqtt import TBGatewayMqttClient\n\n\ndef callback(result, exception):\n    if exception is not None:\n        print(\"Exception: \" + str(exception))\n    else:\n        print(result)\n\n        \ngateway = TBGatewayMqttClient(\"127.0.0.1\", username=\"TEST_GATEWAY_TOKEN\")\ngateway.connect()\ngateway.gw_request_shared_attributes(\"Test Device A1\", [\"temperature\"], callback)\n\nwhile True:\n    time.sleep(1)\n\n```\n#### Respond to RPC\n\nYou can respond to RPC calls from the server. The following example demonstrates how to respond to RPC calls from the server.\nPlease install psutil using 'pip install psutil' command before running the example.\n\n```python\nimport time\n\nfrom tb_gateway_mqtt import TBGatewayMqttClient\ntry:\n    import psutil\nexcept ImportError:\n    print(\"Please install psutil using 'pip install psutil' command\")\n    exit(1)\n\n    \ndef rpc_request_response(client, request_id, request_body):\n    # request body contains id, method and other parameters\n    print(request_body)\n    method = request_body[\"data\"][\"method\"]\n    device = request_body[\"device\"]\n    req_id = request_body[\"data\"][\"id\"]\n    # dependently of request method we send different data back\n    if method == 'getCPULoad':\n        gateway.gw_send_rpc_reply(device, req_id, {\"CPU load\": psutil.cpu_percent()})\n    elif method == 'getMemoryLoad':\n        gateway.gw_send_rpc_reply(device, req_id, {\"Memory\": psutil.virtual_memory().percent})\n    else:\n        print('Unknown method: ' + method)\n\n        \ngateway = TBGatewayMqttClient(\"127.0.0.1\", username=\"TEST_GATEWAY_TOKEN\")\ngateway.connect()\n# now rpc_request_response will process rpc requests from servers\ngateway.gw_set_server_side_rpc_request_handler(rpc_request_response)\n# without device connection it is impossible to get any messages\ngateway.gw_connect_device(\"Test Device A1\")\nwhile True:\n    time.sleep(1)\n\n```\n## Other Examples\n\nThere are more examples for both [device](https://github.com/thingsboard/thingsboard-python-client-sdk/tree/master/examples/device) and [gateway](https://github.com/thingsboard/thingsboard-python-client-sdk/tree/master/examples/gateway) in corresponding [folders](https://github.com/thingsboard/thingsboard-python-client-sdk/tree/master/examples).\n\n## Support\n\n - [Community chat](https://gitter.im/thingsboard/chat)\n - [Q&A forum](https://groups.google.com/forum/#!forum/thingsboard)\n - [Stackoverflow](http://stackoverflow.com/questions/tagged/thingsboard)\n\n## Licenses\n\nThis project is released under [Apache 2.0 License](./LICENSE).\n",
    "bugtrack_url": null,
    "license": "Apache Software License (Apache Software License 2.0)",
    "summary": "ThingsBoard python client SDK",
    "version": "1.10.10",
    "project_urls": {
        "Download": "https://github.com/thingsboard/thingsboard-python-client-sdk/archive/1.10.10.tar.gz",
        "Homepage": "https://github.com/thingsboard/thingsboard-python-client-sdk"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7dcc8b3f8a2a2f92e054a97e2d7ad503fd40f822ce2a9000375075f7a634421b",
                "md5": "8c47ccc0b123e0b6d752ab27b000f5ea",
                "sha256": "70de31122186edb17a064e6ffda451bd75feb61e789e0baafc33d8ac9e4592aa"
            },
            "downloads": -1,
            "filename": "tb_mqtt_client-1.10.10.tar.gz",
            "has_sig": false,
            "md5_digest": "8c47ccc0b123e0b6d752ab27b000f5ea",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 28094,
            "upload_time": "2024-11-05T11:40:05",
            "upload_time_iso_8601": "2024-11-05T11:40:05.149186Z",
            "url": "https://files.pythonhosted.org/packages/7d/cc/8b3f8a2a2f92e054a97e2d7ad503fd40f822ce2a9000375075f7a634421b/tb_mqtt_client-1.10.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-05 11:40:05",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "thingsboard",
    "github_project": "thingsboard-python-client-sdk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "tb-mqtt-client"
}
        
Elapsed time: 0.36688s