Merge branch 'rc' into features/add_tooltip_option_to_show_stack_mode_total_value_on_timeseries_chart_widgets
This commit is contained in:
commit
1129568dbb
@ -109,7 +109,7 @@ public class NetworkReceive implements Receive {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (buffer == null && requestedBufferSize != -1) { //we know the size we want but havent been able to allocate it yet
|
if (buffer == null && requestedBufferSize != -1) { // we know the size we want but haven't been able to allocate it yet
|
||||||
if (requestedBufferSize > TB_LOG_REQUESTED_BUFFER_SIZE) {
|
if (requestedBufferSize > TB_LOG_REQUESTED_BUFFER_SIZE) {
|
||||||
String stackTrace = Arrays.stream(Thread.currentThread().getStackTrace()).map(StackTraceElement::toString).collect(Collectors.joining("|"));
|
String stackTrace = Arrays.stream(Thread.currentThread().getStackTrace()).map(StackTraceElement::toString).collect(Collectors.joining("|"));
|
||||||
log.error("Allocating buffer of size {} for source {}", requestedBufferSize, source);
|
log.error("Allocating buffer of size {} for source {}", requestedBufferSize, source);
|
||||||
|
|||||||
@ -70,11 +70,12 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
|
|||||||
|
|
||||||
@AfterStartUp(order = AfterStartUp.CF_READ_CF_SERVICE)
|
@AfterStartUp(order = AfterStartUp.CF_READ_CF_SERVICE)
|
||||||
public void init() {
|
public void init() {
|
||||||
//TODO: move to separate place to avoid circular references with the ActorSystemContext (@Lazy for tsSubService)
|
|
||||||
PageDataIterable<CalculatedField> cfs = new PageDataIterable<>(calculatedFieldService::findAllCalculatedFields, initFetchPackSize);
|
PageDataIterable<CalculatedField> cfs = new PageDataIterable<>(calculatedFieldService::findAllCalculatedFields, initFetchPackSize);
|
||||||
cfs.forEach(cf -> {
|
cfs.forEach(cf -> {
|
||||||
|
if (cf != null) {
|
||||||
calculatedFields.putIfAbsent(cf.getId(), cf);
|
calculatedFields.putIfAbsent(cf.getId(), cf);
|
||||||
actorSystemContext.tell(new CalculatedFieldInitMsg(cf.getTenantId(), cf));
|
actorSystemContext.tell(new CalculatedFieldInitMsg(cf.getTenantId(), cf));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
calculatedFields.values().forEach(cf -> {
|
calculatedFields.values().forEach(cf -> {
|
||||||
entityIdCalculatedFields.computeIfAbsent(cf.getEntityId(), id -> new CopyOnWriteArrayList<>()).add(cf);
|
entityIdCalculatedFields.computeIfAbsent(cf.getEntityId(), id -> new CopyOnWriteArrayList<>()).add(cf);
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.server.common.data.cf.configuration;
|
package org.thingsboard.server.common.data.cf.configuration;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
import org.thingsboard.server.common.data.cf.CalculatedFieldLink;
|
import org.thingsboard.server.common.data.cf.CalculatedFieldLink;
|
||||||
@ -36,6 +37,7 @@ import java.util.Map;
|
|||||||
@JsonSubTypes.Type(value = SimpleCalculatedFieldConfiguration.class, name = "SIMPLE"),
|
@JsonSubTypes.Type(value = SimpleCalculatedFieldConfiguration.class, name = "SIMPLE"),
|
||||||
@JsonSubTypes.Type(value = ScriptCalculatedFieldConfiguration.class, name = "SCRIPT")
|
@JsonSubTypes.Type(value = ScriptCalculatedFieldConfiguration.class, name = "SCRIPT")
|
||||||
})
|
})
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public interface CalculatedFieldConfiguration {
|
public interface CalculatedFieldConfiguration {
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
|
|||||||
@ -79,7 +79,6 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
|
|||||||
JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
|
JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
|
||||||
long version = row.get("version") != null ? (long) row.get("version") : 0;
|
long version = row.get("version") != null ? (long) row.get("version") : 0;
|
||||||
String debugSettings = (String) row.get("debug_settings");
|
String debugSettings = (String) row.get("debug_settings");
|
||||||
Object externalIdObj = row.get("external_id");
|
|
||||||
|
|
||||||
CalculatedField calculatedField = new CalculatedField();
|
CalculatedField calculatedField = new CalculatedField();
|
||||||
calculatedField.setId(new CalculatedFieldId(id));
|
calculatedField.setId(new CalculatedFieldId(id));
|
||||||
@ -89,7 +88,12 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
|
|||||||
calculatedField.setType(type);
|
calculatedField.setType(type);
|
||||||
calculatedField.setName(name);
|
calculatedField.setName(name);
|
||||||
calculatedField.setConfigurationVersion(configurationVersion);
|
calculatedField.setConfigurationVersion(configurationVersion);
|
||||||
|
try {
|
||||||
calculatedField.setConfiguration(JacksonUtil.treeToValue(configuration, CalculatedFieldConfiguration.class));
|
calculatedField.setConfiguration(JacksonUtil.treeToValue(configuration, CalculatedFieldConfiguration.class));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Invalid configuration for CalculatedField [{}]. Skipping.", id, e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
calculatedField.setVersion(version);
|
calculatedField.setVersion(version);
|
||||||
calculatedField.setDebugSettings(JacksonUtil.fromString(debugSettings, DebugSettings.class));
|
calculatedField.setDebugSettings(JacksonUtil.fromString(debugSettings, DebugSettings.class));
|
||||||
|
|
||||||
@ -118,7 +122,6 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
|
|||||||
EntityType entityType = EntityType.valueOf((String) row.get("entity_type"));
|
EntityType entityType = EntityType.valueOf((String) row.get("entity_type"));
|
||||||
UUID entityId = (UUID) row.get("entity_id");
|
UUID entityId = (UUID) row.get("entity_id");
|
||||||
UUID calculatedFieldId = (UUID) row.get("calculated_field_id");
|
UUID calculatedFieldId = (UUID) row.get("calculated_field_id");
|
||||||
JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
|
|
||||||
|
|
||||||
CalculatedFieldLink calculatedFieldLink = new CalculatedFieldLink();
|
CalculatedFieldLink calculatedFieldLink = new CalculatedFieldLink();
|
||||||
calculatedFieldLink.setId(new CalculatedFieldLinkId(id));
|
calculatedFieldLink.setId(new CalculatedFieldLinkId(id));
|
||||||
|
|||||||
20
pom.xml
20
pom.xml
@ -42,19 +42,19 @@
|
|||||||
<jakarta.xml.bind-api.version>4.0.2</jakarta.xml.bind-api.version>
|
<jakarta.xml.bind-api.version>4.0.2</jakarta.xml.bind-api.version>
|
||||||
<javax.xml.bind-api.version>2.4.0-b180830.0359</javax.xml.bind-api.version>
|
<javax.xml.bind-api.version>2.4.0-b180830.0359</javax.xml.bind-api.version>
|
||||||
<jaxb-runtime.version>4.0.5</jaxb-runtime.version>
|
<jaxb-runtime.version>4.0.5</jaxb-runtime.version>
|
||||||
<tomcat.version>10.1.40</tomcat.version> <!-- Vulnerability fix, Remove after update spring-boot to new version-->
|
<tomcat.version>10.1.42</tomcat.version> <!-- Vulnerability fix, Remove after update spring-boot to new version-->
|
||||||
<net.minidev.json-smart>2.5.2</net.minidev.json-smart> <!-- Vulnerability fix, CVE-2024-57699, Remove after update spring-boot 3.2.12 to a newer version-->
|
<net.minidev.json-smart>2.5.2</net.minidev.json-smart> <!-- Vulnerability fix, CVE-2024-57699, Remove after update spring-boot 3.2.12 to a newer version-->
|
||||||
<spring-boot.version>3.2.12</spring-boot.version>
|
<spring-boot.version>3.2.12</spring-boot.version>
|
||||||
<spring-data.version>3.2.12</spring-data.version>
|
<spring-data.version>3.2.12</spring-data.version>
|
||||||
<spring-data-redis.version>3.2.12</spring-data-redis.version>
|
<spring-data-redis.version>3.2.12</spring-data-redis.version>
|
||||||
<spring.version>6.1.15</spring.version>
|
<spring.version>6.1.21</spring.version>
|
||||||
<spring-redis.version>6.2.11</spring-redis.version>
|
<spring-redis.version>6.2.11</spring-redis.version>
|
||||||
<spring-security.version>6.3.8</spring-security.version>
|
<spring-security.version>6.3.9</spring-security.version>
|
||||||
<jedis.version>5.1.5</jedis.version>
|
<jedis.version>5.1.5</jedis.version>
|
||||||
<jjwt.version>0.12.5</jjwt.version>
|
<jjwt.version>0.12.5</jjwt.version>
|
||||||
<slf4j.version>2.0.13</slf4j.version>
|
<slf4j.version>2.0.17</slf4j.version>
|
||||||
<log4j.version>2.23.1</log4j.version>
|
<log4j.version>2.24.3</log4j.version>
|
||||||
<logback.version>1.5.5</logback.version>
|
<logback.version>1.5.18</logback.version>
|
||||||
<rat.version>0.10</rat.version> <!-- unused -->
|
<rat.version>0.10</rat.version> <!-- unused -->
|
||||||
<cassandra.version>4.17.0</cassandra.version>
|
<cassandra.version>4.17.0</cassandra.version>
|
||||||
<metrics.version>4.2.25</metrics.version>
|
<metrics.version>4.2.25</metrics.version>
|
||||||
@ -83,7 +83,7 @@
|
|||||||
<freemarker.version>2.3.32</freemarker.version>
|
<freemarker.version>2.3.32</freemarker.version>
|
||||||
<mail.version>2.0.1</mail.version>
|
<mail.version>2.0.1</mail.version>
|
||||||
<curator.version>5.6.0</curator.version>
|
<curator.version>5.6.0</curator.version>
|
||||||
<zookeeper.version>3.9.2</zookeeper.version>
|
<zookeeper.version>3.9.3</zookeeper.version>
|
||||||
<protobuf.version>3.25.5</protobuf.version> <!-- A Major v4 does not support by the pubsub yet-->
|
<protobuf.version>3.25.5</protobuf.version> <!-- A Major v4 does not support by the pubsub yet-->
|
||||||
<grpc.version>1.63.0</grpc.version>
|
<grpc.version>1.63.0</grpc.version>
|
||||||
<tbel.version>1.2.6</tbel.version>
|
<tbel.version>1.2.6</tbel.version>
|
||||||
@ -103,7 +103,7 @@
|
|||||||
<jts.version>1.19.0</jts.version>
|
<jts.version>1.19.0</jts.version>
|
||||||
<bouncycastle.version>1.78.1</bouncycastle.version>
|
<bouncycastle.version>1.78.1</bouncycastle.version>
|
||||||
<winsw.version>2.0.1</winsw.version>
|
<winsw.version>2.0.1</winsw.version>
|
||||||
<postgresql.driver.version>42.7.5</postgresql.driver.version>
|
<postgresql.driver.version>42.7.7</postgresql.driver.version>
|
||||||
<sonar.exclusions>org/thingsboard/server/gen/**/*,
|
<sonar.exclusions>org/thingsboard/server/gen/**/*,
|
||||||
org/thingsboard/server/extensions/core/plugin/telemetry/gen/**/*
|
org/thingsboard/server/extensions/core/plugin/telemetry/gen/**/*
|
||||||
</sonar.exclusions>
|
</sonar.exclusions>
|
||||||
@ -113,7 +113,7 @@
|
|||||||
<!-- IMPORTANT: If you change the version of the kafka client, make sure to synchronize our overwritten implementation of the
|
<!-- IMPORTANT: If you change the version of the kafka client, make sure to synchronize our overwritten implementation of the
|
||||||
org.apache.kafka.common.network.NetworkReceive class in the application module. It addresses the issue https://issues.apache.org/jira/browse/KAFKA-4090.
|
org.apache.kafka.common.network.NetworkReceive class in the application module. It addresses the issue https://issues.apache.org/jira/browse/KAFKA-4090.
|
||||||
Here is the source to track https://github.com/apache/kafka/tree/trunk/clients/src/main/java/org/apache/kafka/common/network -->
|
Here is the source to track https://github.com/apache/kafka/tree/trunk/clients/src/main/java/org/apache/kafka/common/network -->
|
||||||
<kafka.version>3.7.2</kafka.version>
|
<kafka.version>3.9.1</kafka.version>
|
||||||
<bucket4j.version>8.10.1</bucket4j.version>
|
<bucket4j.version>8.10.1</bucket4j.version>
|
||||||
<antlr.version>3.5.3</antlr.version>
|
<antlr.version>3.5.3</antlr.version>
|
||||||
<snakeyaml.version>2.2</snakeyaml.version>
|
<snakeyaml.version>2.2</snakeyaml.version>
|
||||||
@ -158,7 +158,7 @@
|
|||||||
<allure-maven.version>2.12.0</allure-maven.version>
|
<allure-maven.version>2.12.0</allure-maven.version>
|
||||||
|
|
||||||
<opensmpp.version>3.0.2</opensmpp.version>
|
<opensmpp.version>3.0.2</opensmpp.version>
|
||||||
<jgit.version>6.9.0.202403050737-r</jgit.version>
|
<jgit.version>6.10.1.202505221210-r</jgit.version>
|
||||||
<exp4j.version>0.4.8</exp4j.version>
|
<exp4j.version>0.4.8</exp4j.version>
|
||||||
<aerogear-otp.version>1.0.0</aerogear-otp.version>
|
<aerogear-otp.version>1.0.0</aerogear-otp.version>
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ import {
|
|||||||
getTimewindowConfig,
|
getTimewindowConfig,
|
||||||
setTimewindowConfig
|
setTimewindowConfig
|
||||||
} from '@home/components/widget/config/timewindow-config-panel.component';
|
} from '@home/components/widget/config/timewindow-config-panel.component';
|
||||||
import { formatValue, isUndefined } from '@core/utils';
|
import { formatValue, isDefined, isUndefined } from '@core/utils';
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
convertLevelColorsSettingsToColorProcessor,
|
convertLevelColorsSettingsToColorProcessor,
|
||||||
@ -115,7 +115,7 @@ export class DigitalSimpleGaugeBasicConfigComponent extends BasicWidgetConfigCom
|
|||||||
minMaxColor: [settings.minMaxFont?.color, []],
|
minMaxColor: [settings.minMaxFont?.color, []],
|
||||||
|
|
||||||
showValue: [settings.showValue, []],
|
showValue: [settings.showValue, []],
|
||||||
decimals: [configData.config.decimals, []],
|
decimals: [isDefined(configData.config.decimals) ? configData.config.decimals : settings.decimals, []],
|
||||||
units: [configData.config.units, []],
|
units: [configData.config.units, []],
|
||||||
valueFont: [settings.valueFont, []],
|
valueFont: [settings.valueFont, []],
|
||||||
valueColor: [settings.valueFont?.color, []],
|
valueColor: [settings.valueFont?.color, []],
|
||||||
@ -157,6 +157,9 @@ export class DigitalSimpleGaugeBasicConfigComponent extends BasicWidgetConfigCom
|
|||||||
this.widgetConfig.config.settings.showValue = config.showValue;
|
this.widgetConfig.config.settings.showValue = config.showValue;
|
||||||
this.widgetConfig.config.units = config.units;
|
this.widgetConfig.config.units = config.units;
|
||||||
this.widgetConfig.config.decimals = config.decimals;
|
this.widgetConfig.config.decimals = config.decimals;
|
||||||
|
if (isDefined(this.widgetConfig.config.settings.decimals)) {
|
||||||
|
delete this.widgetConfig.config.settings.decimals;
|
||||||
|
}
|
||||||
this.widgetConfig.config.settings.valueFont = config.valueFont;
|
this.widgetConfig.config.settings.valueFont = config.valueFont;
|
||||||
this.widgetConfig.config.settings.valueFont.color = config.valueColor;
|
this.widgetConfig.config.settings.valueFont.color = config.valueColor;
|
||||||
|
|
||||||
|
|||||||
@ -57,6 +57,7 @@ export class KnobComponent extends BasicActionWidgetComponent implements OnInit,
|
|||||||
maxValue: number;
|
maxValue: number;
|
||||||
newValue = 0;
|
newValue = 0;
|
||||||
|
|
||||||
|
private decimals: number;
|
||||||
private startDeg = -1;
|
private startDeg = -1;
|
||||||
private currentDeg = 0;
|
private currentDeg = 0;
|
||||||
private rotation = 0;
|
private rotation = 0;
|
||||||
@ -143,9 +144,10 @@ export class KnobComponent extends BasicActionWidgetComponent implements OnInit,
|
|||||||
actionLabel: this.ctx.translate.instant('widgets.slider.on-value-change')};
|
actionLabel: this.ctx.translate.instant('widgets.slider.on-value-change')};
|
||||||
this.valueSetter = this.createValueSetter(valueChangeSettings);
|
this.valueSetter = this.createValueSetter(valueChangeSettings);
|
||||||
|
|
||||||
|
this.decimals = isDefined(this.ctx.decimals) ? this.ctx.decimals : 0;
|
||||||
this.valueFormat = ValueFormatProcessor.fromSettings(this.ctx.$injector, {
|
this.valueFormat = ValueFormatProcessor.fromSettings(this.ctx.$injector, {
|
||||||
units: this.ctx.units,
|
units: this.ctx.units,
|
||||||
decimals: this.ctx.decimals,
|
decimals: this.decimals,
|
||||||
showZeroDecimals: true
|
showZeroDecimals: true
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -299,7 +301,7 @@ export class KnobComponent extends BasicActionWidgetComponent implements OnInit,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private turn(ratio: number) {
|
private turn(ratio: number) {
|
||||||
this.newValue = Number((this.minValue + (this.maxValue - this.minValue) * ratio).toFixed(this.ctx.decimals));
|
this.newValue = Number((this.minValue + (this.maxValue - this.minValue) * ratio).toFixed(this.decimals));
|
||||||
if (this.canvasBar.value !== this.newValue) {
|
if (this.canvasBar.value !== this.newValue) {
|
||||||
this.canvasBar.value = this.newValue;
|
this.canvasBar.value = this.newValue;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,7 +57,7 @@ export class KnobControlWidgetSettingsComponent extends WidgetSettingsComponent
|
|||||||
|
|
||||||
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {
|
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {
|
||||||
const knobSettings = prepareKnobSettings(deepClone(settings) as any) as WidgetSettings;
|
const knobSettings = prepareKnobSettings(deepClone(settings) as any) as WidgetSettings;
|
||||||
knobSettings.valueDecimals = this.widgetConfig?.config?.decimals ?? 2;
|
knobSettings.valueDecimals = this.widgetConfig?.config?.decimals;
|
||||||
knobSettings.valueUnits = deepClone(this.widgetConfig?.config?.units);
|
knobSettings.valueUnits = deepClone(this.widgetConfig?.config?.units);
|
||||||
return super.prepareInputSettings(knobSettings);
|
return super.prepareInputSettings(knobSettings);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,7 +37,7 @@ import {
|
|||||||
digitalGaugeLayoutTranslations,
|
digitalGaugeLayoutTranslations,
|
||||||
DigitalGaugeType
|
DigitalGaugeType
|
||||||
} from '@home/components/widget/lib/digital-gauge.models';
|
} from '@home/components/widget/lib/digital-gauge.models';
|
||||||
import { formatValue } from '@core/utils';
|
import { formatValue, isDefined } from '@core/utils';
|
||||||
import {
|
import {
|
||||||
ColorSettings,
|
ColorSettings,
|
||||||
ColorType,
|
ColorType,
|
||||||
@ -247,6 +247,10 @@ export class DigitalGaugeWidgetSettingsComponent extends WidgetSettingsComponent
|
|||||||
settings.titleFont.color = this.digitalGaugeWidgetSettingsForm.get('titleColor').value;
|
settings.titleFont.color = this.digitalGaugeWidgetSettingsForm.get('titleColor').value;
|
||||||
settings.labelFont.color = this.digitalGaugeWidgetSettingsForm.get('labelColor').value;
|
settings.labelFont.color = this.digitalGaugeWidgetSettingsForm.get('labelColor').value;
|
||||||
|
|
||||||
|
if (isDefined(settings.decimals)) {
|
||||||
|
delete settings.decimals;
|
||||||
|
}
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -160,7 +160,7 @@ export const ZIP_TYPE: FileType = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const CSV_TYPE: FileType = {
|
export const CSV_TYPE: FileType = {
|
||||||
mimeType: 'attachament/csv',
|
mimeType: 'text/csv',
|
||||||
extension: 'csv'
|
extension: 'csv'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -431,7 +431,7 @@ export const initModelFromDefaultTimewindow = (value: Timewindow, quickIntervalO
|
|||||||
if (isDefined(value.history.quickInterval)) {
|
if (isDefined(value.history.quickInterval)) {
|
||||||
model.history.quickInterval = value.history.quickInterval;
|
model.history.quickInterval = value.history.quickInterval;
|
||||||
}
|
}
|
||||||
if (isDefined(value.history.fixedTimewindow)) {
|
if (isDefinedAndNotNull(value.history.fixedTimewindow)) {
|
||||||
if (isDefined(value.history.fixedTimewindow.startTimeMs)) {
|
if (isDefined(value.history.fixedTimewindow.startTimeMs)) {
|
||||||
model.history.fixedTimewindow.startTimeMs = value.history.fixedTimewindow.startTimeMs;
|
model.history.fixedTimewindow.startTimeMs = value.history.fixedTimewindow.startTimeMs;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@ export const knobWidgetDefaultSettings: KnobSettings = {
|
|||||||
defaultValue: 50,
|
defaultValue: 50,
|
||||||
executeRpc: {
|
executeRpc: {
|
||||||
method: 'getValue',
|
method: 'getValue',
|
||||||
requestTimeout: 500,
|
requestTimeout: 5000,
|
||||||
requestPersistent: false,
|
requestPersistent: false,
|
||||||
persistentPollingInterval: 5000
|
persistentPollingInterval: 5000
|
||||||
},
|
},
|
||||||
@ -70,7 +70,7 @@ export const knobWidgetDefaultSettings: KnobSettings = {
|
|||||||
action: SetValueAction.EXECUTE_RPC,
|
action: SetValueAction.EXECUTE_RPC,
|
||||||
executeRpc: {
|
executeRpc: {
|
||||||
method: 'setValue',
|
method: 'setValue',
|
||||||
requestTimeout: 500,
|
requestTimeout: 5000,
|
||||||
requestPersistent: false,
|
requestPersistent: false,
|
||||||
persistentPollingInterval: 5000
|
persistentPollingInterval: 5000
|
||||||
},
|
},
|
||||||
|
|||||||
@ -91,11 +91,5 @@ return [];
|
|||||||
{:copy-code}
|
{:copy-code}
|
||||||
```
|
```
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
You can see real life example, how to use this node in this tutorial:
|
|
||||||
|
|
||||||
- [Data function based on telemetry from 2 devices{:target="_blank"}](${siteBaseUrl}/docs${docPlatformPrefix}/user-guide/rule-engine-2-0/tutorials/function-based-on-telemetry-from-two-devices#delta-temperature-rule-chain)
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|||||||
@ -91,11 +91,5 @@ return [];
|
|||||||
{:copy-code}
|
{:copy-code}
|
||||||
```
|
```
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
You can see real life example, how to use this node in this tutorial:
|
|
||||||
|
|
||||||
- [Data function based on telemetry from 2 devices{:target="_blank"}](${siteBaseUrl}/docs${docPlatformPrefix}/user-guide/rule-engine-2-0/tutorials/function-based-on-telemetry-from-two-devices#delta-temperature-rule-chain)
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user