Skip to content

Commit f2611e6

Browse files
committed
Merge remote-tracking branch 'origin/staging/4.3' into release/4.3
2 parents 6cfc5fc + cd5f8db commit f2611e6

113 files changed

Lines changed: 426 additions & 128 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

_data/paas-eu/api.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ toc:
4141
new: true
4242
section:
4343
- title: Python Client SDK
44-
path: /docs/reference/python-client-sdk
44+
path: /docs/paas/eu/reference/python-client-sdk/
4545
- title: MicroPython Client SDK
46-
path: /docs/reference/micropython-client-sdk/
46+
path: /docs/paas/eu/reference/micropython-client-sdk/
4747
- title: CircuitPython Client SDK
48-
path: /docs/reference/circuitpython-client-sdk/
48+
path: /docs/paas/eu/reference/circuitpython-client-sdk/

_data/paas/api.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ toc:
4141
new: true
4242
section:
4343
- title: Python Client SDK
44-
path: /docs/reference/python-client-sdk
44+
path: /docs/paas/reference/python-client-sdk/
4545
- title: MicroPython Client SDK
46-
path: /docs/reference/micropython-client-sdk/
46+
path: /docs/paas/reference/micropython-client-sdk/
4747
- title: CircuitPython Client SDK
48-
path: /docs/reference/circuitpython-client-sdk/
48+
path: /docs/paas/reference/circuitpython-client-sdk/

_data/pages_info.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,6 +1852,9 @@
18521852
"/docs/paas/eu/mobile-center/mobile-center/":
18531853
url: "/docs/paas/eu/mobile-center/mobile-center/"
18541854
redirect_from: []
1855+
"/docs/paas/eu/reference/circuitpython-client-sdk/":
1856+
url: "/docs/paas/eu/reference/circuitpython-client-sdk/"
1857+
redirect_from: []
18551858
"/docs/paas/eu/reference/coap-api/":
18561859
url: "/docs/paas/eu/reference/coap-api/"
18571860
redirect_from:
@@ -1872,6 +1875,9 @@
18721875
"/docs/paas/eu/reference/mcp-server/":
18731876
url: "/docs/paas/eu/reference/mcp-server/"
18741877
redirect_from: []
1878+
"/docs/paas/eu/reference/micropython-client-sdk/":
1879+
url: "/docs/paas/eu/reference/micropython-client-sdk/"
1880+
redirect_from: []
18751881
"/docs/paas/eu/reference/mqtt-api/":
18761882
url: "/docs/paas/eu/reference/mqtt-api/"
18771883
redirect_from:
@@ -1898,6 +1904,9 @@
18981904
url: "/docs/paas/eu/reference/snmp-api/"
18991905
redirect_from:
19001906
- "/docs/paas/eu/reference/snmp-api"
1907+
"/docs/paas/eu/samples/abeeway/tracker/":
1908+
url: "/docs/paas/eu/samples/abeeway/tracker/"
1909+
redirect_from: []
19011910
"/docs/paas/eu/samples/analytics/ai-models/":
19021911
url: "/docs/paas/eu/samples/analytics/ai-models/"
19031912
redirect_from: []
@@ -2417,6 +2426,9 @@
24172426
"/docs/paas/mobile-center/mobile-center/":
24182427
url: "/docs/paas/mobile-center/mobile-center/"
24192428
redirect_from: []
2429+
"/docs/paas/reference/circuitpython-client-sdk/":
2430+
url: "/docs/paas/reference/circuitpython-client-sdk/"
2431+
redirect_from: []
24202432
"/docs/paas/reference/coap-api/":
24212433
url: "/docs/paas/reference/coap-api/"
24222434
redirect_from:
@@ -2437,6 +2449,9 @@
24372449
"/docs/paas/reference/mcp-server/":
24382450
url: "/docs/paas/reference/mcp-server/"
24392451
redirect_from: []
2452+
"/docs/paas/reference/micropython-client-sdk/":
2453+
url: "/docs/paas/reference/micropython-client-sdk/"
2454+
redirect_from: []
24402455
"/docs/paas/reference/mqtt-api/":
24412456
url: "/docs/paas/reference/mqtt-api/"
24422457
redirect_from:
@@ -2463,6 +2478,9 @@
24632478
url: "/docs/paas/reference/snmp-api/"
24642479
redirect_from:
24652480
- "/docs/paas/reference/snmp-api"
2481+
"/docs/paas/samples/abeeway/tracker/":
2482+
url: "/docs/paas/samples/abeeway/tracker/"
2483+
redirect_from: []
24662484
"/docs/paas/samples/analytics/ai-models/":
24672485
url: "/docs/paas/samples/analytics/ai-models/"
24682486
redirect_from: []
@@ -3883,6 +3901,9 @@
38833901
url: "/docs/pe/mqtt-broker/white-labeling/"
38843902
redirect_from:
38853903
- "/docs/mqtt-broker/white-labeling/"
3904+
"/docs/pe/reference/circuitpython-client-sdk/":
3905+
url: "/docs/pe/reference/circuitpython-client-sdk/"
3906+
redirect_from: []
38863907
"/docs/pe/reference/coap-api/":
38873908
url: "/docs/pe/reference/coap-api/"
38883909
redirect_from:
@@ -3906,6 +3927,9 @@
39063927
"/docs/pe/reference/mcp-server/":
39073928
url: "/docs/pe/reference/mcp-server/"
39083929
redirect_from: []
3930+
"/docs/pe/reference/micropython-client-sdk/":
3931+
url: "/docs/pe/reference/micropython-client-sdk/"
3932+
redirect_from: []
39093933
"/docs/pe/reference/monolithic/":
39103934
url: "/docs/pe/reference/monolithic/"
39113935
redirect_from: []
@@ -4002,6 +4026,9 @@
40024026
"/docs/pe/releases/roadmap/":
40034027
url: "/docs/pe/releases/roadmap/"
40044028
redirect_from: []
4029+
"/docs/pe/samples/abeeway/tracker/":
4030+
url: "/docs/pe/samples/abeeway/tracker/"
4031+
redirect_from: []
40054032
"/docs/pe/samples/analytics/ai-models/":
40064033
url: "/docs/pe/samples/analytics/ai-models/"
40074034
redirect_from: []
@@ -4674,6 +4701,9 @@
46744701
url: "/docs/reference/architecture/"
46754702
redirect_from:
46764703
- "/docs/user-guide/rule-engine-2-0/architecture/"
4704+
"/docs/reference/circuitpython-client-sdk/":
4705+
url: "/docs/reference/circuitpython-client-sdk/"
4706+
redirect_from: []
46774707
"/docs/reference/coap-api/":
46784708
url: "/docs/reference/coap-api/"
46794709
redirect_from:

_data/pe/api.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ toc:
4242
- title: Python Client SDK
4343
path: /docs/pe/reference/python-client-sdk/
4444
- title: MicroPython Client SDK
45-
path: /docs/reference/micropython-client-sdk/
45+
path: /docs/pe/reference/micropython-client-sdk/
4646
- title: CircuitPython Client SDK
47-
path: /docs/reference/circuitpython-client-sdk/
47+
path: /docs/pe/reference/circuitpython-client-sdk/
4848

_includes/docs/api.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Server-side API is available as REST API:
3030
Software development kits:
3131

3232
* [**Python Client SDK**](/docs/{{docsPrefix}}reference/python-client-sdk) - Software development kit for client-side integration of your Python projects.
33-
* [**MicroPython Client SDK**](/docs/reference/micropython-client-sdk) - Software development kit for client-side integration of your MicroPython projects.
34-
* [**CircuitPython Client SDK**](/docs/reference/circuitpython-client-sdk) - Software development kit for client-side integration of your CircuitPython projects.
33+
* [**MicroPython Client SDK**](/docs/{{docsPrefix}}reference/micropython-client-sdk) - Software development kit for client-side integration of your MicroPython projects.
34+
* [**CircuitPython Client SDK**](/docs/{{docsPrefix}}reference/circuitpython-client-sdk) - Software development kit for client-side integration of your CircuitPython projects.
3535

3636
{% endif %}

_includes/docs/mobile/getting-started.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ if the **{{appProject}}** project is currently running, please stop it and proce
375375
To confirm that Firebase has been integrated properly, run your application.
376376

377377
```
378-
flutter run
378+
flutter run --dart-define-from-file configs.json
379379
```
380380
{:.copy-code}
381381

@@ -442,8 +442,8 @@ Usage: Use Flutter commands prefixed with `fvm`, like this:
442442
Examples:
443443

444444
```bash
445-
fvm flutter run
446-
fvm flutter build apk
445+
fvm flutter run --dart-define-from-file configs.json
446+
fvm flutter build apk --dart-define-from-file configs.json
447447
```
448448

449449
**Option 2**: Manually set the global Flutter version **[Not recommended]**

_includes/docs/paas/subscription.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,15 @@ Please see table below to compare the API limits of the subscription plans. The
231231
<td>1000</td>
232232
<td>Total number of SMS sent</td>
233233
</tr>
234+
<tr>
235+
<td>AI credits</td>
236+
<td>500K</td>
237+
<td>2M</td>
238+
<td>4M</td>
239+
<td>8M</td>
240+
<td>16M</td>
241+
<td>Total number of AI credits</td>
242+
</tr>
234243
</tbody>
235244
</table>
236245

@@ -656,6 +665,11 @@ These packs allow you to extend the operational capacity of your solution, ensur
656665
<td>+100 SMS sent per month</td>
657666
<td>{{cloudCurrency}}15</td>
658667
</tr>
668+
<tr>
669+
<td>AI Credits Pack</td>
670+
<td>+1M AI credits</td>
671+
<td>{{cloudCurrency}}5</td>
672+
</tr>
659673
</tbody>
660674
</table>
661675

_includes/docs/reference/python-client-sdk.md

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -68,25 +68,26 @@ client.disconnect()
6868
**TBDeviceMqttClient** provides access to Device MQTT APIs of ThingsBoard platform.
6969
It allows publishing telemetry and attributes updates, subscribing to attribute changes, sending and receiving RPC commands, etc.
7070

71-
### Subscribtion to attributes
71+
### Subscription to attributes
7272

7373
If you need to receive shared attributes updates, you can use the code like the following:
7474

7575
```python
76-
from time import sleep
76+
import time
7777
from tb_device_mqtt import TBDeviceMqttClient
7878

7979

80-
def callback(result):
80+
def on_attributes_change(result, *args):
8181
print(result)
8282

83+
8384
client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
8485
client.connect()
85-
client.subscribe_to_attribute("uploadFrequency", callback)
86-
client.subscribe_to_all_attributes(callback)
87-
while True:
88-
sleep(1)
86+
client.subscribe_to_attribute("uploadFrequency", on_attributes_change)
87+
client.subscribe_to_all_attributes(on_attributes_change)
8988

89+
while True:
90+
time.sleep(1)
9091
```
9192
{:.copy-code}
9293

@@ -149,27 +150,30 @@ The following example connects to the ThingsBoard local instance and waits for R
149150
When RPC request is received, the client will send the response to ThingsBoard with data from machine with client for device with the name **Test Device A1**.
150151

151152
```python
152-
from psutil import cpu_percent, virtual_memory
153-
from time import sleep
153+
import time
154+
154155
from tb_device_mqtt import TBDeviceMqttClient
155156

157+
try:
158+
import psutil
159+
except ImportError:
160+
print("Please install psutil using 'pip install psutil' command")
161+
exit(1)
156162

157163
# dependently of request method we send different data back
158-
def on_server_side_rpc_request(client, request_id, request_body):
164+
def on_server_side_rpc_request(request_id, request_body):
159165
print(request_id, request_body)
160166
if request_body["method"] == "getCPULoad":
161-
client.send_rpc_reply(request_id, {"CPU percent": cpu_percent()})
167+
client.send_rpc_reply(request_id, {"CPU percent": psutil.cpu_percent()})
162168
elif request_body["method"] == "getMemoryUsage":
163-
client.send_rpc_reply(request_id, {"Memory": virtual_memory().percent})
169+
client.send_rpc_reply(request_id, {"Memory": psutil.virtual_memory().percent})
164170

165171
client = TBDeviceMqttClient("127.0.0.1", username="A1_TEST_TOKEN")
166172
client.set_server_side_rpc_request_handler(on_server_side_rpc_request)
167173
client.connect()
168174

169-
170175
while True:
171-
sleep(1)
172-
176+
time.sleep(1)
173177
```
174178
{:.copy-code}
175179

@@ -232,35 +236,40 @@ The following example will connect to the ThingsBoard local instance and wait fo
232236
When RPC request will be received, client will send response to ThingsBoard with data for device with name **Test Device A1**.
233237

234238
```python
235-
from time import sleep
236-
from psutil import cpu_percent, virtual_memory
239+
import time
240+
237241
from tb_gateway_mqtt import TBGatewayMqttClient
238242

243+
try:
244+
import psutil
245+
except ImportError:
246+
print("Please install psutil using 'pip install psutil' command")
247+
exit(1)
248+
239249

240-
def rpc_request_response(client, request_id, request_body):
250+
def rpc_request_response(request_id, request_body):
241251
# request body contains id, method and other parameters
242252
print(request_body)
243253
method = request_body["data"]["method"]
244254
device = request_body["device"]
245255
req_id = request_body["data"]["id"]
246256
# dependently of request method we send different data back
247257
if method == 'getCPULoad':
248-
gateway.gw_send_rpc_reply(device, req_id, {"CPU load": cpu_percent()})
258+
gateway.gw_send_rpc_reply(device, req_id, {"CPU load": psutil.cpu_percent()})
249259
elif method == 'getMemoryLoad':
250-
gateway.gw_send_rpc_reply(device, req_id, {"Memory": virtual_memory().percent})
260+
gateway.gw_send_rpc_reply(device, req_id, {"Memory": psutil.virtual_memory().percent})
251261
else:
252262
print('Unknown method: ' + method)
253263

264+
254265
gateway = TBGatewayMqttClient("127.0.0.1", username="TEST_GATEWAY_TOKEN")
255266
gateway.connect()
256267
# now rpc_request_response will process rpc requests from servers
257268
gateway.gw_set_server_side_rpc_request_handler(rpc_request_response)
258269
# without device connection it is impossible to get any messages
259270
gateway.gw_connect_device("Test Device A1")
260-
261271
while True:
262-
sleep(1)
263-
272+
time.sleep(1)
264273
```
265274
{:.copy-code}
266275

_includes/docs/samples/analytics/n8n-node.md

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ Before you begin, ensure you have the following:
7676
{% if docsPrefix == "paas/eu/" %}
7777
- **EU ThingsBoard Cloud**: Fully managed cloud service available at [eu.thingsboard.cloud](https://eu.thingsboard.cloud/signup){: target="_blank"}
7878
{% endif %}
79-
- **Authentication credentials**: Valid username and password with appropriate permissions on the ThingsBoard instance
79+
- **Authentication credentials**: API key or username and password (deprecated) with appropriate permissions on the ThingsBoard instance. See [API Keys](/docs/{{docsPrefix}}user-guide/security/api-keys/){: target="_blank"} for details on generating API keys.
8080
- **n8n instance**:
8181
- **Local n8n installation**: Self-hosted n8n on your infrastructure, or
8282
- **Docker-based n8n deployment**: n8n running in Docker containers
83-
- **Cloud n8n**: The ThingsBoard node requires official verification to be listed in the n8n Cloud catalog.
83+
- **Cloud n8n**: The ThingsBoard node is verified and available on [n8n Cloud](https://n8n.io/){: target="_blank"} — no manual installation required.
8484

8585
## Installation
8686

@@ -136,18 +136,30 @@ N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
136136

137137
### Configure Credentials
138138

139-
Connect n8n to your ThingsBoard instance:
139+
Connect n8n to your ThingsBoard instance. There are two authentication options:
140+
141+
#### Option A: API Key
140142

141143
1. Click **+** (top-left) → **Credentials**
142-
2. Search for **ThingsBoard API****Continue**
143-
3. Fill in your ThingsBoard details:
144+
2. Search for **ThingsBoard API Key****Continue**
145+
3. Fill in the required fields:
144146
- **Base URL**: Your instance URL (e.g., {% if docsPrefix == "paas/eu/" %}`https://eu.thingsboard.cloud`{% else %}`https://thingsboard.cloud`{% endif %})
147+
- **Connect using**: API Key
148+
- **API Key**: Generated from your ThingsBoard instance. See [API Keys](/docs/{{docsPrefix}}user-guide/security/api-keys/){: target="_blank"} for details.
149+
4. Click **Save**
150+
151+
#### Option B: Username/Password (Deprecated)
152+
153+
1. Click **+** (top-left) → **Credentials**
154+
2. Search for **ThingsBoard Username/Password****Continue**
155+
3. Fill in the required fields:
156+
- **Base URL**: Your instance URL (e.g., {% if docsPrefix == "paas/eu/" %}`https://eu.thingsboard.cloud`{% else %}`https://thingsboard.cloud`{% endif %})
157+
- **Connect using**: Username/Password
145158
- **Username**: Your email
146159
- **Password**: Your password
147160
4. Click **Save**
148161

149-
These credentials work across all ThingsBoard nodes in your workflows.
150-
162+
The credentials are encrypted and stored securely by n8n. You can reuse the same credentials across multiple ThingsBoard nodes in different workflows.
151163

152164
{% assign n8nGuiInstallation = '
153165
===
@@ -158,10 +170,10 @@ These credentials work across all ThingsBoard nodes in your workflows.
158170
title: Search and select **ThingsBoard API** to connect to and click **Continue**.
159171
===
160172
image: https://img.thingsboard.io/samples/analytics/n8n-node/credentials-configuration-3.png
161-
title: Fill in the required fields:<br>- **Base URL** — your ThingsBoard instance URL (without a trailing slash)<br>- **Username** — your ThingsBoard account username<br>- **Password** — your ThingsBoard account password.<br>Click **Save** to store the credentials.
173+
title: Fill in the **Base URL** — your ThingsBoard instance URL (without a trailing slash), and the **API Key**generated from your ThingsBoard instance. Click **Save** to store the credentials.
162174
===
163175
image: https://img.thingsboard.io/samples/analytics/n8n-node/credentials-configuration-4.png
164-
title: The credentials are encrypted and stored securely by n8n. You can reuse the same credentials across multiple ThingsBoard nodes in different workflows.
176+
title: The credentials are saved and the connection is tested successfully. You can reuse the same credentials across multiple ThingsBoard nodes in different workflows.
165177
'
166178
%}
167179

_includes/docs/user-guide/calculated-fields/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ It covers the core concepts, supported calculation types, and practical examples
851851
&nbsp;
852852
<div id="video">
853853
<div id="video_wrapper">
854-
<iframe src="https://www.youtube.com/embed/wBUcWMSH4QI" frameborder="0" allowfullscreen></iframe>
854+
<iframe referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wBUcWMSH4QI" frameborder="0" allowfullscreen></iframe>
855855
</div>
856856
</div>
857857

0 commit comments

Comments
 (0)