Skip to content

Commit e2972af

Browse files
committed
Merge branch 'staging/4.3' into release/4.3
2 parents 7610080 + f48e0e9 commit e2972af

36 files changed

Lines changed: 1340 additions & 658 deletions

File tree

_includes/docs/device-library/guides/sensy32.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,11 @@
1212

1313
## Introduction
1414

15-
![{{deviceName}}](https://img.thingsboard.io/devices-library/{{page.deviceImageFileName}}){: style="float: left; max-width: 200px; max-height: 200px; margin: 0px 10px 0px 0px"}
1615
[The Sensy32]({{deviceVendorLink}}){: target="_blank"} is an IoT board designed for sensor enthusiasts, developers, and IoT creators.
1716
Powered by ESP32-S3 and packed with a wide array of sensors, it enables seamless monitoring, analysis, and visualization of real-world data.
1817

19-
<br>
20-
2118
The Sensy32 supports Wi-Fi and Bluetooth connectivity, complemented by two USB Type-C ports that enable charging and power supply, programming and firmware uploads, data communication, peripheral connectivity, and powering external devices such as sensors.
2219

23-
<br>
24-
2520
The Sensy32 board includes the following components and sensors:
2621
- UV Light Sensor
2722
- IR Motion and Human Presence Sensor

_includes/docs/user-guide/advanced-guides-for-working-with-dashboard/advanced-dashboard-guide-lesson-4.md

Lines changed: 91 additions & 180 deletions
Large diffs are not rendered by default.

_includes/docs/user-guide/alarm-rules.md

Lines changed: 72 additions & 86 deletions
Large diffs are not rendered by default.

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

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,23 @@ In addition to real-time processing, ThingsBoard supports calculated field [repr
2727

2828
### Creating a calculated field
2929

30-
The process of creating a calculated field is the same for [Devices](/docs/pe/user-guide/ui/devices/){:target="_blank"}, [Assets](/docs/pe/user-guide/ui/assets/){:target="_blank"}, [Device profiles](/docs/pe/user-guide/device-profiles/){:target="_blank"}, or [Asset profiles](http://10.7.1.72:4000/docs/pe/user-guide/asset-profiles/){:target="_blank"}.
30+
> The process of creating a calculated field is the same for [Devices](/docs/{{docsPrefix}}user-guide/ui/devices/){:target="_blank"}, [Assets](/docs/{{docsPrefix}}user-guide/ui/assets/){:target="_blank"}, [Device profiles](/docs/{{docsPrefix}}user-guide/device-profiles/){:target="_blank"}, or [Asset profiles](/docs/{{docsPrefix}}user-guide/asset-profiles/){:target="_blank"}.
3131
3232
- Open the "Calculated fields" page from the left-hand menu.
33-
- Click "+" &#8702; "Create new calculated field".
33+
- Click the "**+**" button in the top-right corner.
34+
- Select **Create new calculated field** from the dropdown menu.
3435

3536
{% assign createCalculatedFieldCE = '
3637
===
3738
image: https://img.thingsboard.io/user-guide/calculated-fields/create-new-calculated-field-1-ce.png
38-
title: Open the **Calculated fields** page from the left-hand menu.<br>Click **+** &#8702; **Create new calculated field**.
39+
title: Open the **Calculated fields** page from the left-hand menu.<br>Click the "**+**" button in the top-right corner and select **Create new calculated field** from the dropdown menu.
3940
'
4041
%}
4142

4243
{% assign createCalculatedFieldPE = '
4344
===
4445
image: https://img.thingsboard.io/user-guide/calculated-fields/create-new-calculated-field-1-pe.png
45-
title: Open the **Calculated fields** page from the left-hand menu.<br>Click **+** &#8702; **Create new calculated field**.
46+
title: Open the **Calculated fields** page from the left-hand menu.<br>Click the "**+**" button in the top-right corner and select **Create new calculated field** from the dropdown menu.
4647
'
4748
%}
4849

@@ -189,7 +190,7 @@ The result can be stored as:
189190

190191
ThingsBoard provides built-in tools that help you validate and troubleshoot calculated fields in real time.
191192

192-
<br><b><font size="3">Enable debug mode</font></b> (_&#42; recommended during development_)
193+
<b><font size="3">Enable debug mode</font></b> (_&#42; recommended during development_)
193194

194195
Each calculated field can be switched to Debug mode. When enabled, ThingsBoard records execution details for every run, including the input arguments that triggered the execution (e.g. incoming telemetry or attribute updates) and the calculation result or any execution problems (script errors, missing arguments, invalid values).
195196

@@ -657,26 +658,20 @@ You can **export** the calculated field to a JSON file and **import** it into th
657658

658659
<br><b><font size="4">Export calculated field</font></b>
659660

660-
A calculated field can be exported either from the global **Calculated fields page** or from the **Calculated fields tab** of the target **entity or profile** to which the field is applied.
661-
Click the **Export** button located in the corresponding calculated field row.
661+
- Navigate to the **Calculated fields** page.
662+
- Click the **Export** button located in the corresponding calculated field row.
662663

663664
{% assign exportCalculatedFieldCE = '
664665
===
665666
image: https://img.thingsboard.io/user-guide/calculated-fields/export-calculated-field-1-ce.png,
666-
title: Navigate to the <b>Calculated fields</b> page and click the <b>Export<b> button located in the row of the specific calculated field.
667-
===
668-
image: https://img.thingsboard.io/user-guide/calculated-fields/export-calculated-field-2-ce.png,
669-
title: Navigate to the <b>Calculated fields</b> tab of the target entity or profile and click the <b>Export<b> button located in the row of the specific calculated field.
667+
title: Navigate to the <b>Calculated fields</b> page and click the <b>Export</b> button located in the row of the specific calculated field.
670668
'
671669
%}
672670

673671
{% assign exportCalculatedFieldPE = '
674672
===
675673
image: https://img.thingsboard.io/user-guide/calculated-fields/export-calculated-field-1-pe.png,
676-
title: Navigate to the <b>Calculated fields</b> page and click the <b>Export<b> button located in the row of the specific calculated field.
677-
===
678-
image: https://img.thingsboard.io/user-guide/calculated-fields/export-calculated-field-2-pe.png,
679-
title: Navigate to the <b>Calculated fields</b> tab of the target entity or profile and click the <b>Export<b> button located in the row of the specific calculated field.
674+
title: Navigate to the <b>Calculated fields</b> page and click the <b>Export</b> button located in the row of the specific calculated field.
680675
'
681676
%}
682677

@@ -703,7 +698,7 @@ Steps to import:
703698
title: In the opened window, upload the JSON file with the calculated field configuration and click **Import**.
704699
===
705700
image: https://img.thingsboard.io/user-guide/calculated-fields/import-calculated-field-3-ce.png,
706-
title: The edit window will open, allowing you to **specify the entity or profile** to which the calculated field will be applied.
701+
title: In the dialog that opens, **specify the entity or profile** to which the calculated field will be applied.
707702
===
708703
image: https://img.thingsboard.io/user-guide/calculated-fields/import-calculated-field-4-ce.png,
709704
title: If there are any problems with arguments, they will be highlighted.
@@ -728,7 +723,7 @@ Steps to import:
728723
title: In the opened window, upload the JSON file with the calculated field configuration and click **Import**.
729724
===
730725
image: https://img.thingsboard.io/user-guide/calculated-fields/import-calculated-field-3-pe.png,
731-
title: The edit window will open, allowing you to **specify the entity or profile** to which the calculated field will be applied.
726+
title: In the dialog that opens, **specify the entity or profile** to which the calculated field will be applied.
732727
===
733728
image: https://img.thingsboard.io/user-guide/calculated-fields/import-calculated-field-4-pe.png,
734729
title: If there are any problems with arguments, they will be highlighted.
@@ -748,7 +743,7 @@ Steps to import:
748743
{% include images-gallery.liquid showListImageTitles="true" imageCollection=importCalculatedFieldCE %}
749744
{% endif %}
750745
{% if docsPrefix == "pe/" or docsPrefix == "paas/" or docsPrefix == "paas/eu/" %}
751-
{% include images-gallery.liquid imageCollection=importCalculatedFieldPE %}
746+
{% include images-gallery.liquid showListImageTitles="true" imageCollection=importCalculatedFieldPE %}
752747
{% endif %}
753748

754749
> **Note**: ensure the imported field is correctly applied and update any necessary parameters:
@@ -791,7 +786,7 @@ Each calculated field includes an action panel for managing the field:
791786
{% include images-gallery.liquid imageCollection=calculatedFieldsParametersPE %}
792787
{% endif %}
793788

794-
<b><font size="4">View detailed information of the calculated field</font></b>
789+
<br><b><font size="4">View detailed information of the calculated field</font></b>
795790

796791
Click the calculated field to view its details.
797792

@@ -816,7 +811,7 @@ Click the calculated field to view its details.
816811
{% include images-gallery.liquid imageCollection=calculatedFieldsParameters2PE %}
817812
{% endif %}
818813

819-
<b><font size="4">Modify the calculated field</font></b>
814+
<br><b><font size="4">Modify the calculated field</font></b>
820815

821816
To modify the calculated field, click it to open the details view, then click the orange **pencil** button.
822817
After making your changes, click the orange **check** button to apply the updates.

_includes/docs/user-guide/calculated-fields/propagation-calculated-field.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,28 @@ Each HVAC device received the <span class="code-light">hvacMode</span> attribute
453453

454454
<hr>
455455

456+
## Troubleshooting
457+
458+
### Propagation path settings do not apply after the update
459+
460+
**Problem:** When editing an existing Calculated Field to change the **Relation direction** or **Relation type** (e.g., switching from *Contains* to *Manages*), the field ignores these changes and continues to propagate data using the originally configured path.
461+
462+
**Cause:** The Calculated Field logic caches the **Propagation path to related entities** defined during the initial creation. It does not correctly detect updates made specifically to the relation direction or relation type in the configuration, resulting in the field failing to re-initialize the path.
463+
464+
**Solution:** To force the Calculated Field to apply the new propagation path settings,
465+
the system requires a configuration change to the **Data to propagate** section.
466+
Any modification to the arguments will trigger the necessary re-initialization.
467+
468+
Choose one of the following safe methods:
469+
470+
1. Re-create the Field (Cleanest)
471+
If you must keep your current arguments exactly as they are (e.g., you cannot change default values), the only way to trigger the update is to delete the existing Calculated Field and create a new one with the correct propagation path settings.
472+
473+
2. Modify Default Value (Recommended Workaround)
474+
If you want to fix the issue without re-creating the field,
475+
edit an existing argument and change its **Default value** (e.g., set a value if it was empty, or update it).
476+
> If the source data is missing, the new default value will be used. However, if the source data is always present, this is the smartest method as it forces the update with zero impact on your data.
477+
456478
## Your feedback
457479

458480
Don&#39;t hesitate to star ThingsBoard on [github](https://github.com/thingsboard/thingsboard){:target="_blank"} to help us spread the word.

_includes/integrators.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,15 @@ function createBox(integrator) {
6464
textSite.textContent = 'Visit us at: ';
6565

6666
var linkSite = document.createElement('a');
67-
var link = integrator.site.href.replace('https://', '').replace('http://', '').replace('/', '');
67+
var link = integrator.site.href
68+
.replace(/^https?:\/\//, '')
69+
.replace(/^(.*?)(\/.*)?$/, (match, domain, path = '') => {
70+
if (path.startsWith('/thingsboard')) {
71+
return domain + path;
72+
}
73+
return domain;
74+
});
75+
6876
linkSite.href = 'https://' + link;
6977
linkSite.textContent = link.replace('www.', '');
7078
linkSite.target = integrator.site.target;

_includes/integrators.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,18 @@
335335
"target": "_blank"
336336
}
337337
},
338+
{
339+
"type": ["Europe"],
340+
"country": ["Germany"],
341+
"name": "Elbesoft IoT",
342+
"contact": {
343+
"href": "info@elbesoft-iot.com"
344+
},
345+
"site": {
346+
"href": "elbesoft-iot.de/thingsboard",
347+
"target": "_blank"
348+
}
349+
},
338350
{
339351
"type": ["Europe"],
340352
"country": ["Germany", "Austria", "Switzerland"],

_includes/pricing/calculator.sass

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,6 +1069,8 @@ $bg-white: #fff
10691069
border-radius: 3px
10701070
&::-webkit-scrollbar-thumb:hover
10711071
background-color: #A1A1A1
1072+
&:has(>.device-profiles-container.advanced)
1073+
padding-top: 10px
10721074
.actions-container
10731075
flex-shrink: 0
10741076
padding: 24px 0
@@ -1171,11 +1173,13 @@ $bg-white: #fff
11711173
width: 100%
11721174
max-width: 800px
11731175
margin: 16px
1176+
overflow-y: auto
11741177
.modal-wrapper
11751178
background-color: $bg-white
11761179
padding: 32px
11771180
border-radius: 16px
11781181
position: relative
1182+
flex: 1
11791183
.modal-header
11801184
display: flex
11811185
justify-content: space-between
@@ -1228,7 +1232,7 @@ $bg-white: #fff
12281232
top: -4px
12291233
width: 300px
12301234
line-height: 18px
1231-
#json-input
1235+
#tbPcJsonInput
12321236
width: 100%
12331237
height: 250px
12341238
font-family: 'Inconsolata', monospace
@@ -1496,7 +1500,7 @@ $bg-white: #fff
14961500
font-size: 18px
14971501
.input-group
14981502
flex: 1
1499-
#json-input
1503+
#tbPcJsonInput
15001504
height: 200px
15011505
.footer
15021506
flex-direction: column

_layouts/pricing.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,24 +485,24 @@ <h2>Add-ons</h2>
485485
<div class="card">
486486
<img src="https://img.thingsboard.io/pricing/edge-add-on-icon.svg" alt="Edge add on icon">
487487
<div class="text">
488-
<h3 data-faq-id="${addOnsPricing[product].edge.faq}" data-faq-link-size="50%">Edge Computing</h3>
488+
<h3 data-faq-id="${addOnsPricing[product].edge.faq}" data-faq-link-size="50%" data-faq-tooltip="Run a local on-prem instance to keep operations running even when the internet is down.">Edge Computing</h3>
489489
<p>Process data where it is collected</p>
490490
<p>Starting from <span>${edgePrice}</span></p>
491491
</div>
492492
</div>
493493
<div class="card">
494494
<img src="https://img.thingsboard.io/pricing/trendz-add-on-icon.svg" alt="Trendz add on icon">
495495
<div class="text">
496-
<h3 data-faq-id="${addOnsPricing[product].trendz.faq}" data-faq-link-size="50%">Trendz Analytics</h3>
496+
<h3 data-faq-id="${addOnsPricing[product].trendz.faq}" data-faq-link-size="50%" data-faq-tooltip="Turn raw IoT data into actionable insights with advanced analytics and trend prediction.">Trendz Analytics</h3>
497497
<p>Advanced analytics for your solution</p>
498498
<p>Starting from <span>${trendzPrice}</span></p>
499499
</div>
500500
</div>
501501
<div class="card">
502502
<img src="https://img.thingsboard.io/pricing/wl-add-on-icon.svg" alt="White-labeling add on icon">
503503
<div class="text">
504-
<h3 data-faq-id="${addOnsPricing[product].wl.faq}" data-faq-link-size="50%">White-labeled Mobile App</h3>
505-
<p>Сustomizable mobile application </p>
504+
<h3 data-faq-id="${addOnsPricing[product].wl.faq}" data-faq-link-size="50%" data-faq-tooltip="Launch a client-ready mobile app under your brand—your name, logo, colors, and a fully polished look & feel—so customers experience your product, not a third-party app.">White-labeled Mobile App</h3>
505+
<p>Сustomizable mobile application</p>
506506
<p>${wlPrice}</p>
507507
</div>
508508
</div>

0 commit comments

Comments
 (0)