29 changed files with 1465 additions and 171 deletions
@ -0,0 +1,104 @@ |
|||
/** |
|||
* Copyright © 2016-2023 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
package org.thingsboard.server.service.housekeeper; |
|||
|
|||
import com.google.common.util.concurrent.FutureCallback; |
|||
import com.google.common.util.concurrent.Futures; |
|||
import com.google.common.util.concurrent.ListenableFuture; |
|||
import com.google.common.util.concurrent.ListeningExecutorService; |
|||
import com.google.common.util.concurrent.MoreExecutors; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.jetbrains.annotations.NotNull; |
|||
import org.springframework.stereotype.Component; |
|||
import org.springframework.transaction.event.TransactionalEventListener; |
|||
import org.thingsboard.common.util.ThingsBoardThreadFactory; |
|||
import org.thingsboard.server.common.data.EntityType; |
|||
import org.thingsboard.server.common.data.User; |
|||
import org.thingsboard.server.common.data.id.AlarmId; |
|||
import org.thingsboard.server.common.data.id.EntityId; |
|||
import org.thingsboard.server.common.data.id.TenantId; |
|||
import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent; |
|||
import org.thingsboard.server.dao.housekeeper.HouseKeeperService; |
|||
import org.thingsboard.server.service.entitiy.alarm.TbAlarmService; |
|||
|
|||
import javax.annotation.PostConstruct; |
|||
import javax.annotation.PreDestroy; |
|||
import java.util.List; |
|||
import java.util.concurrent.Executors; |
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class InMemoryHouseKeeperServiceService implements HouseKeeperService { |
|||
|
|||
final TbAlarmService alarmService; |
|||
|
|||
ListeningExecutorService executor; |
|||
|
|||
AtomicInteger queueSize = new AtomicInteger(); |
|||
AtomicInteger totalProcessedCounter = new AtomicInteger(); |
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
log.debug("Starting HouseKeeper service"); |
|||
executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("housekeeper"))); |
|||
} |
|||
|
|||
@PreDestroy |
|||
public void destroy() { |
|||
if (executor != null) { |
|||
log.debug("Stopping HouseKeeper service"); |
|||
executor.shutdown(); |
|||
} |
|||
} |
|||
|
|||
@TransactionalEventListener(fallbackExecution = true) |
|||
public void handleEvent(DeleteEntityEvent<?> event) { |
|||
log.trace("[{}] DeleteEntityEvent handler: {}", event.getTenantId(), event); |
|||
EntityId entityId = event.getEntityId(); |
|||
if (EntityType.USER.equals(entityId.getEntityType())) { |
|||
unassignDeletedUserAlarms(event.getTenantId(), (User) event.getEntity(), event.getTs()); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public ListenableFuture<List<AlarmId>> unassignDeletedUserAlarms(TenantId tenantId, User user, long unassignTs) { |
|||
log.debug("[{}][{}] unassignDeletedUserAlarms submitting, pending queue size: {} ", tenantId, user.getId().getId(), queueSize.get()); |
|||
queueSize.incrementAndGet(); |
|||
ListenableFuture<List<AlarmId>> future = executor.submit(() -> alarmService.unassignDeletedUserAlarms(tenantId, user, unassignTs)); |
|||
Futures.addCallback(future, new FutureCallback<>() { |
|||
@Override |
|||
public void onSuccess(List<AlarmId> alarmIds) { |
|||
queueSize.decrementAndGet(); |
|||
totalProcessedCounter.incrementAndGet(); |
|||
log.debug("[{}][{}] unassignDeletedUserAlarms finished, pending queue size: {}, total processed count: {} ", |
|||
tenantId, user.getId().getId(), queueSize.get(), totalProcessedCounter.get()); |
|||
} |
|||
|
|||
@Override |
|||
public void onFailure(@NotNull Throwable throwable) { |
|||
queueSize.decrementAndGet(); |
|||
totalProcessedCounter.incrementAndGet(); |
|||
log.error("[{}][{}] unassignDeletedUserAlarms failed, pending queue size: {}, total processed count: {}", |
|||
tenantId, user.getId().getId(), queueSize.get(), totalProcessedCounter.get(), throwable); |
|||
} |
|||
}, MoreExecutors.directExecutor()); |
|||
return future; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
/** |
|||
* Copyright © 2016-2023 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
package org.thingsboard.server.dao.housekeeper; |
|||
|
|||
import com.google.common.util.concurrent.ListenableFuture; |
|||
import org.thingsboard.server.common.data.User; |
|||
import org.thingsboard.server.common.data.id.AlarmId; |
|||
import org.thingsboard.server.common.data.id.TenantId; |
|||
|
|||
import java.util.List; |
|||
|
|||
public interface HouseKeeperService { |
|||
|
|||
ListenableFuture<List<AlarmId>> unassignDeletedUserAlarms(TenantId tenantId, User user, long unassignTs); |
|||
|
|||
} |
|||
@ -0,0 +1,312 @@ |
|||
/** |
|||
* Copyright © 2016-2023 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
syntax = "proto3"; |
|||
|
|||
import "efento/proto_measurement_types.proto"; |
|||
import "efento/proto_rule.proto"; |
|||
|
|||
option java_package = "org.thingsboard.server.gen.transport.coap"; |
|||
option java_outer_classname = "ConfigProtos"; |
|||
|
|||
/* Message containing optional channels control parameters */ |
|||
message ProtoChannelControl { |
|||
|
|||
/* Channel index */ |
|||
uint32 channel_index = 1; |
|||
|
|||
/* Control parameters. Maximal number equals 4. This field is channel specific: */ |
|||
/* IO_control channel: */ |
|||
/* - control_params[0]: */ |
|||
/* - Byte 0: On state configuration */ |
|||
/* 0x01 - Low */ |
|||
/* 0x02 - High */ |
|||
/* 0x03 - High-Z (disconnected) */ |
|||
/* - Byte 1: Off state configuration */ |
|||
/* 0x01 - Low */ |
|||
/* 0x02 - High */ |
|||
/* 0x03 - High-Z (disconnected) */ |
|||
/* - Byte 2: Power on channel state */ |
|||
/* 0x01 - On */ |
|||
/* 0x02 - Off */ |
|||
repeated uint32 control_params = 2; |
|||
} |
|||
|
|||
/* Message containing request data for accesing calibration parameters */ |
|||
message ProtoCalibrationParameters { |
|||
|
|||
/* Request details. Bitmask: */ |
|||
/* - calibration_request[0:2] - requested channel number. */ |
|||
uint32 calibration_request = 1; |
|||
|
|||
/* Assignment of a channel. */ |
|||
uint32 channel_assignment = 2; |
|||
|
|||
/* Table of calibration parameters. Max size = 8. */ |
|||
repeated int32 parameters = 3; |
|||
} |
|||
|
|||
/* Main message sent in the payload. Each field in this message is independent of the others - only parameters that should be */ |
|||
/* changed need to be sent in the payload. */ |
|||
/* If the value of a selected parameter shall not be changed, do not include it in the payload */ |
|||
message ProtoConfig { |
|||
|
|||
/* DEPRECATED - Used for backward compatibility with fw versions 5.x */ |
|||
/* repeated Threshold thresholds = 1; */ |
|||
|
|||
/* 'Measurement_period_base' and 'measurement_period_factor' define how often the measurements are taken. */ |
|||
/* Sensors of 'Continuous' type take measurement each Measurement_period_base * measurement_period_factor. */ |
|||
/* Sensors of 'Binary' type take measurement each Measurement_period_base. */ |
|||
/* For backward compatibility with versions 5.x in case of binary/mixed sensors, if the 'measurement_period_factor' is */ |
|||
/* not sent (equal to 0), then the default value '14' shall be used for period calculation. */ |
|||
/* For backward compatibility with versions 5.x in case of continues sensors, if the measurement_period_factor is */ |
|||
/* not sent (equal to 0), then the default value '1' shall be used for period calculation. */ |
|||
/* measurement period base in seconds */ |
|||
/* Range [1:65535] - minimum value can vary depends on installed sensors */ |
|||
uint32 measurement_period_base = 2; |
|||
|
|||
/* Measurement period factor */ |
|||
/* Range [1:65535] - minimum value can vary depends on installed sensors */ |
|||
uint32 measurement_period_factor = 26; |
|||
|
|||
/* Transmission interval in seconds. Range: [60:604800] */ |
|||
uint32 transmission_interval = 3; |
|||
|
|||
/* BLE turnoff time in seconds. Once receiving this setting, BLE will be switched off after the set number of seconds. */ |
|||
/* If BLE is already switched off, it will switch on for the set number of seconds and switch off afterwards. */ |
|||
/* Range [60:604800] and 0xFFFFFFFF */ |
|||
/* 0xFFFFFFFF - always on */ |
|||
uint32 ble_turnoff_time = 4; |
|||
|
|||
/* ACK interval in seconds */ |
|||
/* Range [180:2592000] and 0xFFFFFFFF */ |
|||
/* 0xFFFFFFFF - always request ACK */ |
|||
uint32 ack_interval = 5; |
|||
|
|||
/* Specifies, if the additional device info is requested. If true, sensor will send a message to endpoint '/i' with the */ |
|||
/* device info. This field is only sent by server */ |
|||
bool request_device_info = 6; |
|||
|
|||
/* Specifies, if software update is available. This field is only sent by server */ |
|||
bool request_fw_update = 7; |
|||
|
|||
/* Current time in seconds sine 1st of January 1970 (epoch time). */ |
|||
uint32 current_time = 8; |
|||
|
|||
/* NB-IoT transfer limit */ |
|||
/* Range: [1:65535] */ |
|||
/* 65535 - disable transfer limit function */ |
|||
uint32 transfer_limit = 9; |
|||
|
|||
/* NB-IoT transfer limit timer in seconds */ |
|||
/* Range: [1:65535] */ |
|||
/* 65535 - disable transfer limit function */ |
|||
uint32 transfer_limit_timer = 10; |
|||
|
|||
/* Data (measurements) server IP address */ |
|||
/* IP of the data server as string in form x.x.x.x. For example: 18.184.24.239 */ |
|||
string data_server_ip = 11; |
|||
|
|||
/* Data (measurements) server port */ |
|||
/* Range: [1:65535] */ |
|||
uint32 data_server_port = 12; |
|||
|
|||
/* Update server IP address */ |
|||
/* IP of data server as string in form x.x.x.x. For example: 18.184.24.239 */ |
|||
string update_server_ip = 13; |
|||
|
|||
/* Update server port for UDP transmission */ |
|||
/* Range: [1:65535] */ |
|||
uint32 update_server_port_udp = 14; |
|||
|
|||
/* Update server port for CoAP transmission */ |
|||
/* Range: [1:65535] */ |
|||
uint32 update_server_port_coap = 15; |
|||
|
|||
/* APN as string. Max length 49 */ |
|||
/* String with special character 0x7F (DEL) only indicates that automatic apn is turn on */ |
|||
string apn = 16; |
|||
|
|||
/* PLMN selection */ |
|||
/* Range: [100:999999] */ |
|||
/* 0xFFFFFFFF or 1000000 - automatic selection */ |
|||
uint32 plmn_selection = 17; |
|||
|
|||
/* Device will power off its cellular modem for requested number of seconds. Maximum number of seconds 604800 (7 days) */ |
|||
/* This field is only sent by server */ |
|||
uint32 disable_modem_request = 18; |
|||
|
|||
/* If set, the device will send its configuration to the endpoint '/c' as a confirmable message */ |
|||
/* This field is only sent by server */ |
|||
bool request_configuration = 19; |
|||
|
|||
/* Device's error codes. */ |
|||
/* This field is only sent by device */ |
|||
repeated uint32 errors = 20; |
|||
|
|||
/* Identifier of current configuration - Every change of the configuration results in change of the value of this field */ |
|||
/* This field is only sent by device */ |
|||
uint32 hash = 21; |
|||
|
|||
/* If true, the device will accept the configuration without functional testing (eg. network connection) */ |
|||
bool accept_without_testing = 22; |
|||
|
|||
/* Cloud token configuration: */ |
|||
/* - 1: cloud token set to the value of cloud_token field */ |
|||
/* - 2: cloud token set to IMEI of the cellular module */ |
|||
/* - 255: do not send cloud_token field */ |
|||
uint32 cloud_token_config = 23; |
|||
|
|||
/* Cloud token that should be sent with each measurement frame */ |
|||
string cloud_token = 24; |
|||
|
|||
/* Serial number of the device */ |
|||
/* This field is only sent by device */ |
|||
bytes serial_number = 25; |
|||
|
|||
/* Type of channel */ |
|||
/* This field is only sent by device */ |
|||
repeated MeasurementType channel_types = 27; |
|||
|
|||
/* Edge logic rules set on the device. Up to 12 rules are supported */ |
|||
repeated ProtoRule rules = 28; |
|||
|
|||
/* Supervision period */ |
|||
/* Range: [180:604800] */ |
|||
/* 0xFFFFFFFF - Functionality disabled */ |
|||
uint32 supervision_period = 29; |
|||
|
|||
/* If true, sensor's measurement memory will be erased */ |
|||
bool memory_reset_request = 30; |
|||
|
|||
/* Bytes 0-4 - Band selection mask. Mask = 1 << position */ |
|||
/* Band | 1 | 2 | 3 | 4 | 5 | 8 | 12 | 13 | 17 | 18 | 19 | 20 | 25 | 26 | 28 | 66 | 71 | 85 | */ |
|||
/* Position: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | */ |
|||
/* example: To enable band 3, 8 and 20 set to (1 << 2) + (1 << 5) + (1 << 11) = 2084 */ |
|||
uint32 modem_bands_mask = 31; |
|||
|
|||
/* Data endpoint (string - max length 16) */ |
|||
string data_endpoint = 32; |
|||
|
|||
/* Configuration endpoint (string - max length 16) */ |
|||
string configuration_endpoint = 33; |
|||
|
|||
/* Device info endpoint (string - max length 16) */ |
|||
string device_info_endpoint = 34; |
|||
|
|||
/* Time endpoint (string - max length 16) */ |
|||
string time_endpoint = 35; |
|||
|
|||
/* Bluetooth TX power level. Value is the index of the absolute value of TX power, that depends on the BLE module */ |
|||
/* Range: [1:4] */ |
|||
uint32 ble_tx_power_level = 36; |
|||
|
|||
/* Deprecated field */ |
|||
/* If true, the sensor's runtime errors will be cleared */ |
|||
bool request_runtime_errors_clear = 37; |
|||
|
|||
/* Timestamp when a new error code was reported */ |
|||
uint32 error_timestamp = 38; |
|||
|
|||
/* Timestamp when the new configuration was set */ |
|||
uint32 hash_timestamp = 39; |
|||
|
|||
/* Cloud token CoAP option ID: */ |
|||
/* - [1:64999] - CoAP option ID containing cloud token */ |
|||
/* - 65000 - cloud token sent in the payload */ |
|||
uint32 cloud_token_coap_option = 40; |
|||
|
|||
/* ECDSA payload signature CoAP option ID: */ |
|||
/* - [1:64999] - CoAP option ID containing ECDSA payload signature */ |
|||
/* - 65000 - no payload signature in CoAP option */ |
|||
uint32 payload_signature_coap_option = 41; |
|||
|
|||
/* DNS server IP address grouped in the array as four octets. Set 255.255.255.255 to use a network DNS server */ |
|||
/* Note: when setting less than four octets the remaining will be filled with zeros. */ |
|||
repeated uint32 dns_server_ip = 42; |
|||
|
|||
/* DNS TTL configuration: */ |
|||
/* - [1:864000] - custom TTL in seconds (additionally, the DNS request when communication has failed) */ |
|||
/* - 864001 - accept TTL from the DNS server (additionally, the DNS request when communication has failed) */ |
|||
/* - 864002 - DNS request is only after communication failed */ |
|||
uint32 dns_ttl_config = 43; |
|||
|
|||
/* Configuration payload split information. Information about dividing the payload into parts */ |
|||
/* values < 0 - payload has been split, expect another part of the payload in the next message. */ |
|||
/* The absolute value indicates an index of the current message. */ |
|||
/* value = 0 - payload has not been splitted */ |
|||
/* values > 0 - last part of the split payload, the value indicates the total number of the messages sent */ |
|||
sint32 payload_split_info = 44; |
|||
|
|||
/* Modem update request (string - max length 48) */ |
|||
/* This field is only sent by server */ |
|||
/* For BC66 module, this field is a DFOTA URL */ |
|||
string modem_update_request = 45; |
|||
|
|||
/* Cellular configuration parameters. */ |
|||
/* 1st item - Number of used cellular parameters */ |
|||
/* 2nd - 12th items - Cellular parameters */ |
|||
repeated uint32 cellular_config_params = 46; |
|||
|
|||
/* Calendar configuration. Up to 6 calendars are supported */ |
|||
repeated ProtoCalendar calendars = 47; |
|||
|
|||
/* Control parameters for channels. Maximal number of requests equals 6 */ |
|||
/* This field is only sent by server */ |
|||
repeated ProtoChannelControl channels_control_request = 48; |
|||
|
|||
/* Set/get calibration parameters for single channel. */ |
|||
ProtoCalibrationParameters calibration_parameters_request = 49; |
|||
|
|||
/* LED behaviour configuration: */ |
|||
/* Period of LEDs flashing (5-600 seconds in 5 seconds resolution): */ |
|||
/* - led_config[0] - green LED */ |
|||
/* - led_config[1] - red LED */ |
|||
/* Time from entering the normal state, after which the LED indication is turned off */ |
|||
/* (0-240 minutes in 1 minute resolution, or 255 for always turned on): */ |
|||
/* - led_config[2] - flashing red led on communication problem */ |
|||
/* - led_config[3] - flashing red led on a sensor problem */ |
|||
/* - led_config[4] - flashing red led on a low power */ |
|||
/* - led_config[5] - flashing green led on measurement */ |
|||
/* - led_config[6] - flashing green led on transmission */ |
|||
/* - led_config[7] - flashing green led to indicate sensor's proper operation */ |
|||
/* - led_config[8] - Blink duration (20-1000ms in 5 ms resolution) */ |
|||
repeated uint32 led_config = 50; |
|||
|
|||
/* Network troubleshooting configuration, if bluetooth is turned off and communication with the server is faulty, */ |
|||
/* bluetooth will be automatically turned on until the connection is stabilized */ |
|||
/* - 1: network troubleshooting disabled */ |
|||
/* - 2: network troubleshooting enabled */ |
|||
uint32 network_troubleshooting = 51; |
|||
|
|||
/* Reserved by gateway client */ |
|||
reserved 52, 53; |
|||
|
|||
/* Encryption key configuration. Sensor sends in this field two last bytes of SHA256 hash calculated from its current */ |
|||
/* encryption_key configuration. */ |
|||
/* Max length: 16 bytes. */ |
|||
/* 0x7F - encryption key disabled. */ |
|||
bytes encryption_key = 54; |
|||
|
|||
/* User name as string. Max length 31 */ |
|||
/* String with special character 0x7F (DEL) only indicates that automatic user name is turn on */ |
|||
/* User name can only be set to custom value if apn has been configured (is not automatic) */ |
|||
string apn_user_name = 55; |
|||
|
|||
/* Password as string. Max length 31 */ |
|||
/* String with special character 0x7F (DEL) only indicates that automatic password is turn on */ |
|||
/* Password can only be set to custom value if apn_user_name has been configured (is not automatic) */ |
|||
string apn_password = 56; |
|||
} |
|||
@ -0,0 +1,197 @@ |
|||
/** |
|||
* Copyright © 2016-2023 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
syntax = "proto3"; |
|||
|
|||
option java_package = "org.thingsboard.server.gen.transport.coap"; |
|||
option java_outer_classname = "DeviceInfoProtos"; |
|||
|
|||
enum ModemType |
|||
{ |
|||
|
|||
/* Invalid value */ |
|||
MODEM_TYPE_UNSPECIFIED = 0; |
|||
|
|||
/* Quectel BC66 modem */ |
|||
MODEM_TYPE_BC66 = 1; |
|||
|
|||
/* Quectel BC66-NA modem */ |
|||
MODEM_TYPE_BC66NA = 2; |
|||
} |
|||
|
|||
message ProtoRuntime |
|||
{ |
|||
|
|||
/* Up-time in seconds (since reset) */ |
|||
uint32 up_time = 1; |
|||
|
|||
/* Message counters (since reset). There are 3 counters: */ |
|||
/* message_counters[0] - Counter of confirmable messages attempts */ |
|||
/* message_counters[1] - Counter of non-confirmable messages attempts */ |
|||
/* message_counters[2] - Counter of succeeded messages */ |
|||
repeated uint32 message_counters = 2; |
|||
|
|||
/* MCU temperature in Celsius */ |
|||
sint32 mcu_temperature = 3; |
|||
|
|||
/* Minimum battery voltage in mV */ |
|||
uint32 min_battery_voltage = 4; |
|||
|
|||
/* MCU temperature in Celsius, while the minimum battery voltage was reached */ |
|||
sint32 min_battery_mcu_temperature = 5; |
|||
|
|||
/* Battery reset timestamp (Unix timestamp) */ |
|||
uint32 battery_reset_timestamp = 6; |
|||
|
|||
/* Max MCU temperature in Celsius */ |
|||
sint32 max_mcu_temperature = 7; |
|||
|
|||
/* Min MCU temperature in Celsius */ |
|||
sint32 min_mcu_temperature = 8; |
|||
|
|||
/* Table of runtime errors. Max length: 20 */ |
|||
repeated uint32 runtime_errors = 9; |
|||
} |
|||
|
|||
message ProtoModem |
|||
{ |
|||
|
|||
ModemType type = 1; |
|||
|
|||
/* Parameters for BC66 modem: */ |
|||
/* parameters[0] - sc_EARFCN - Range: [0:262143]. Unknown value: -1 */ |
|||
/* parameters[1] - sc_EARNFCN_offset - Range: [0:4] mapped to [-2, -1, -0.5, 0, 1]. Unknown value: -1 */ |
|||
/* parameters[2] - sc_PCI - Range: [0:502]. Unknown value: -1 */ |
|||
/* parameters[3] - sc_Cell id - Range: [1:268435456]. Unknown value: 0 */ |
|||
/* parameters[4] - sc_RSRP - [dBm] - Range: [-140:-44]. Unknown value: 0 */ |
|||
/* parameters[5] - sc_RSRQ - [dB] - Range: [-20:-3]. Unknown value: 0 */ |
|||
/* parameters[6] - sc_RSSI - [dBm] - Range: [-110:-3] Unknown value: 0 */ |
|||
/* parameters[7] - sc_SINR - [dB] - Range: [-10:30]. Unknown value: 31 */ |
|||
/* parameters[8] - sc_Band - Range: [see module supported bands]. The current serving cell band. Unknown value: -1 */ |
|||
/* parameters[9] - sc_TAC - Range: [0:65536]. Unknown value: -1 */ |
|||
/* parameters[10] - sc_ECL - Range: [0:2]. Unknown value: -1 */ |
|||
/* parameters[11] - sc_TX_PWR - [0.1cBm] - Range [-440:230]. Unknown value: -1000 */ |
|||
/* parameters[12] - OP_MODE - Range: [0:3]. Unknown value: -1 */ |
|||
/* parameters[13] - nc_EARFCN - Range: [0:262143]. Unknown value: -1 */ |
|||
/* parameters[14] - nc_EARNFCN_offset - Range: [0:4] mapped to [-2, -1, -0.5, 0, 1]. Unknown value: -1 */ |
|||
/* parameters[15] - nc_PCI - Range: [0:502]. Unknown value: -1 */ |
|||
/* parameters[16] - nc_RSRP - [dBm] - Range: [-140:-44]. Unknown value: 0 */ |
|||
/* parameters[17] - RLC_UL_BLER - Range: [0:100]. Unknown value: -1 */ |
|||
/* parameters[18] - RLC_DL_BLER - Range: [0:100]. Unknown value: -1 */ |
|||
/* parameters[19] - MAC_UL_BLER - Range: [0:100]. Unknown value: -1 */ |
|||
/* parameters[20] - MAC_DL_BLER - Range: [0:100]. Unknown value: -1 */ |
|||
/* parameters[21] - MAC_UL_TOTAL_BYTES - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[22] - MAC_DL_TOTAL_BYTES - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[23] - MAC_UL_total_HARQ_Tx - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[24] - MAC_DL_total_HARQ_Tx - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[25] - MAC_UL_HARQ_re_Tx - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[26] - MAC_DL_HARQ_re_Tx - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[27] - RLC_UL_tput - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[28] - RLC_DL_tput - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[29] - MAC_UL_tput - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[30] - MAC_DL_tput - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[31] - sleep_duration - [0.1s] - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[32] - Rx_time - [0.1s] - Range: [0:2147483647]. Unknown value: -1 */ |
|||
/* parameters[33] - Tx_time - [0.1s] - Range: [0:2147483647]. Unknown value: -1 */ |
|||
repeated sint32 parameters = 2; |
|||
} |
|||
|
|||
message ProtoUpdateInfo |
|||
{ |
|||
|
|||
/* Timestamp of update (Unix timestamp) */ |
|||
uint32 timestamp = 1; |
|||
|
|||
/* Update status, possible values: */ |
|||
/* - 0x1 - No update yet */ |
|||
/* - 0x2 - No error */ |
|||
/* - 0x3 - UDP socekt error */ |
|||
/* - 0x4 - Hash error */ |
|||
/* - 0x5 - Missing packet error */ |
|||
/* - 0x6 - Invalid data error */ |
|||
/* - 0x7 - Sending timeout error */ |
|||
/* - 0x8 - No SW to update error */ |
|||
/* - 0x9 - Sending unexpected error */ |
|||
/* - 0x10 - Unexpected error */ |
|||
uint32 status = 2; |
|||
} |
|||
|
|||
message ProtoDeviceInfo |
|||
{ |
|||
|
|||
/* Serial number of device */ |
|||
bytes serial_num = 1; |
|||
|
|||
/* Deprecated field */ |
|||
reserved 2; |
|||
|
|||
/* Software version e.g ver 06.10 -> 0x060A -> 1546 */ |
|||
uint32 sw_version = 3; |
|||
|
|||
/* Deprecated fields */ |
|||
reserved 4,5,6,7,8,9,10,11,12; |
|||
|
|||
/* Structure with battery and temperature information */ |
|||
ProtoRuntime runtime_info = 13; |
|||
|
|||
/* Structure with modem specific runtime information */ |
|||
ProtoModem modem = 14; |
|||
|
|||
/* String up to 7 bytes long. Software commit id e.g. "e0e8556" */ |
|||
/* From version 06.07 the first two characters indicate the LTS version. */ |
|||
/* For example: the value "0bdd23f" means LTS version 11 and the beginning of the commit ID "dd23f" */ |
|||
string commit_id = 15; |
|||
|
|||
/* Optional string up to 36 bytes long. Can be set to any user define value or hold device's IMEI */ |
|||
string cloud_token = 16; |
|||
|
|||
/* Memory statistics: */ |
|||
/* memory_statistics[0] - Status of Nv storage: */ |
|||
/* - 0 - Nv storage hasn't errors */ |
|||
/* - 1 - Nv storage has some corrupted packet. Memory is read-only */ |
|||
/* - 2 - Nv storage is corrupted. Memory is unavailable */ |
|||
/* memory_statistics[1] - Timestamp of the end of collecting statistics. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[2] - Capacity of memory in bytes */ |
|||
/* memory_statistics[3] - Used space in bytes */ |
|||
/* memory_statistics[4] - Size of invalid (outdated) packets in bytes */ |
|||
/* memory_statistics[5] - Size of corrupted packets in bytes */ |
|||
/* memory_statistics[6] - Number of valid packets */ |
|||
/* memory_statistics[7] - Number of invalid (outdated) packets */ |
|||
/* memory_statistics[8] - Number of corrupted packets */ |
|||
/* memory_statistics[9] - Number of all samples for channel 1 (valid packets) */ |
|||
/* memory_statistics[10] - Number of all samples for channel 2 (valid packets) */ |
|||
/* memory_statistics[11] - Number of all samples for channel 3 (valid packets) */ |
|||
/* memory_statistics[12] - Number of all samples for channel 4 (valid packets) */ |
|||
/* memory_statistics[13] - Number of all samples for channel 5 (valid packets) */ |
|||
/* memory_statistics[14] - Number of all samples for channel 6 (valid packets) */ |
|||
/* memory_statistics[15] - Timestamp of the first binary measurement. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[16] - Timestamp of the last binary measurement. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[17] - Timestamp of the last binary measurement, that marked as sent. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[18] - Timestamp of the first continuous measurement. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[19] - Timestamp of the last continuous measurement. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[20] - Timestamp of the last continuous measurement, that marked as sent. */ |
|||
/* Value in seconds since UNIX EPOCH 01-01-1970. Undefined value: 4294967295 */ |
|||
/* memory_statistics[21] - NVM write counter */ |
|||
repeated uint32 memory_statistics = 17; |
|||
|
|||
/* Information about last sensor SW update */ |
|||
ProtoUpdateInfo last_update_info = 18; |
|||
} |
|||
@ -0,0 +1,267 @@ |
|||
/** |
|||
* Copyright © 2016-2023 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
syntax = "proto3"; |
|||
|
|||
option java_package = "org.thingsboard.server.gen.transport.coap"; |
|||
option java_outer_classname = "ProtoRuleProtos"; |
|||
|
|||
/* Encoding A: used to set absolute values in the Rules (e.g. upper and lower threshold values) */ |
|||
/* - TEMPERATURE - [°C] - Celsius degree. Resolution 0.1°C. Range [-273.2:4000.0]. */ |
|||
/* - HUMIDITY - [% RH] - Relative humidity. Resolution 1%. Range [0:100]. */ |
|||
/* - ATMOSPHERIC_PRESSURE - [hPa] - Hectopascal (1hPa = 100Pa). Resolution 0.1hPa. Range: [1.0:2000.0]. */ |
|||
/* - DIFERENTIAL_PRESSURE - [Pa] - Pascal. Resolution 1Pa. Range [-10000:10000] */ |
|||
/* - OK/ALARM - Not applicable */ |
|||
/* - IAQ - [IAQ] - IAQ index. Resolution 1IAQ. Range [0:500]. */ |
|||
/* - FLOODING - Not applicable */ |
|||
/* - PULSE_CNT - [NB] Number of pulses. Resolution 1 pulse. Range [0:8000000]. */ |
|||
/* - ELECTRICITY_METER - [W] - Watt; Resolution 1W. Range [0:8000000]. Average power consumption in period */ |
|||
/* - WATER_METER [l/min] - Liter per minute. Resolution 1l/min. Range [0:8000000]. Average water flow in period. */ |
|||
/* - SOIL_MOISTURE - [kPa] - Kilopascal (1kPa = 1000Pa); Resolution 1kPa. Range [-1000:0]. Soil moisture (tension). */ |
|||
/* - CO_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [0:1000000]. Carbon monoxide concentration. */ |
|||
/* - NO2_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [0:1000000]. Nitrogen dioxide concentration. */ |
|||
/* - H2S_GAS - [ppm] - Parts per million. Resolution 0.01ppm. Range [0.00:80000.00]. Hydrogen sulfide concentration. */ |
|||
/* - AMBIENT_LIGHT -[lx] - Lux. Resolution 0.1lx. Range [0.0:100000.0]. Illuminance. */ |
|||
/* - PM_1_0 - [µg/m^3] - Micro gram per cubic meter. Resolution 1µg/m^3 Range [0:1000]. */ |
|||
/* - PM_2_5 - [µg/m^3] - Micro gram per cubic meter. Resolution 1µg/m^3 Range [0:1000]. */ |
|||
/* - PM_10_0 - [µg/m^3] - Micro gram per cubic meter. Resolution 1µg/m^3 Range [0:1000]. */ |
|||
/* - NOISE_LEVEL - [dB] - Decibels. Resolution 0.1 dB. Range: [0.0:200.0]. Noise level. */ |
|||
/* - NH3_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [0:1000000]. Ammonia concentration. */ |
|||
/* - CH4_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [0:1000000]. Methane concentration. */ |
|||
/* - HIGH_PRESSURE - [kPa] - Kilopascal (1kPa = 1000Pa, 100kPa = 1bar). Resolution 1kPa. Range [0:200000]. Pressure. */ |
|||
/* - DISTANCE_MM - [mm] - Millimeter. Resolution 1mm. Range [0:100000]. Distance. */ |
|||
/* - WATER_METER_ACC_MINOR - [l] - Liter. Resolution 1l. Range [0:1000000]. Accumulative water meter (minor). */ |
|||
/* - WATER_METER_ACC_MAJOR - [hl] - Hectoliter. Resolution 1hl. Range [0:1000000]. Accumulative water meter (major). */ |
|||
/* - CO2_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [0:1000000]. Carbon dioxide concentration. */ |
|||
/* - HUMIDITY ACCURATE - [% RH] - Relative humidity. Resolution 0.1%. Range [0.0:100.0]. */ |
|||
/* - STATIC_IAQ - [sIAQ] - Static IAQ index. Resolution 1sIAQ. Range [0:10000]. */ |
|||
/* - CO2_EQUIVALENT - [ppm] - Parts per million. Resolution 1ppm. Range [0:1000000]. Carbon dioxide equivalent. */ |
|||
/* - BREATH_VOC - [ppm] - Parts per million. Resolution 1ppm. Range [0:100000]. Breath VOC estimate. */ |
|||
/* - PERCENTAGE - [%] - Percentage. Resolution 0.01%. Range [0.00:100.00]. */ |
|||
/* - PULSE_CNT_ACC_MINOR - [NB] - Number of pulses. Resolution 1 pulse. Range [0:1000000]. Accumulative pulse counter (minor). */ |
|||
/* - PULSE_CNT_ACC_MAJOR - [kNB] - Number of kilopulses. Resolution 1 kilopulse. Range [0:1000000]. */ |
|||
/* Accumulative pulse counter (major). */ |
|||
/* - ELEC_METER_ACC_MINOR - [Wh] - Watt-hour. Resolution 1Wh. Range [0:1000000]. Accumulative electricity meter (minor). */ |
|||
/* - ELEC_METER_ACC_MAJOR - [kWh] - Kilowatt-hour. Resolution 1kWh. Range [0:1000000]. Accumulative electricity meter (major). */ |
|||
|
|||
/* Encoding R: used to set relative values in the Rules (e.g. differential threshold and hysteresis) */ |
|||
/* - TEMPERATURE - [°C] - Celsius degree. Resolution 0.1°C. Range [0.1:4273.2]. */ |
|||
/* - HUMIDITY - [% RH] - Relative humidity. Resolution 1%. Range [1:100]. */ |
|||
/* - ATMOSPHERIC_PRESSURE - [hPa] - Hectopascal (1hPa = 100Pa). Resolution 0.1hPa. Range: [0.1:1999.0]. */ |
|||
/* - DIFERENTIAL_PRESSURE - [Pa] - Pascal. Resolution 1Pa. Range [1:20000] */ |
|||
/* - OK/ALARM - Not applicable */ |
|||
/* - VOC - [IAQ] - Iaq index. Resolution 1IAQ. Range [1:500]. */ |
|||
/* - FLOODING - Not applicable */ |
|||
/* - PULSE_CNT - [NB] Number of pulses. Resolution 1 pulse. Range [1:8000000]. */ |
|||
/* - ELECTRICITY_METER - [W] - Watt; Resolution 1W. Range [1:8000000]. Average power consumption in period */ |
|||
/* - WATER_METER [l/min] - Liter per minute. Resolution 1l/min. Range [1:8000000]. Average water flow in period. */ |
|||
/* - SOIL_MOISTURE - [kPa] - Kilopascal (1kPa = 1000Pa); Resolution 1kPa. Range [1:1000]. Soil moisture (tension). */ |
|||
/* - CO_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [1:1000000]. Carbon monoxide concentration. */ |
|||
/* - NO2_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [1:1000000]. Nitrogen dioxide concentration. */ |
|||
/* - H2S_GAS - [ppm] - Parts per million. Resolution 0.01ppm. Range [0.01:80000.00]. Hydrogen sulfide concentration. */ |
|||
/* - AMBIENT_LIGHT -[lx] - Lux. Resolution 0.1lx. Range [0.1:100000.0]. Illuminance. */ |
|||
/* - PM_1_0 - [µg/m^3] - Micro gram per cubic meter. Resolution 1µg/m^3 Range [1:1000]. */ |
|||
/* - PM_2_5 - [µg/m^3] - Micro gram per cubic meter. Resolution 1µg/m^3 Range [1:1000]. */ |
|||
/* - PM_10_0 - [µg/m^3] - Micro gram per cubic meter. Resolution 1µg/m^3 Range [1:1000]. */ |
|||
/* - NOISE_LEVEL - [dB] - Decibels. Resolution 0.1 dB. Range: [0.1:200.0]. Noise level. */ |
|||
/* - NH3_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [1:1000000]. Ammonia concentration. */ |
|||
/* - CH4_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [1:1000000]. Methane concentration. */ |
|||
/* - HIGH_PRESSURE - [kPa] - Kilopascal (1kPa = 1000Pa, 100kPa = 1bar). Resolution 1kPa. Range [1:200000]. Pressure. */ |
|||
/* - DISTANCE_MM - [mm] - Millimeter. Resolution 1mm. Range [1:100000]. Distance. */ |
|||
/* - WATER_METER_ACC_MINOR - [l] - Liter. Resolution 1l. Range [1:1000000]. Accumulative water meter (minor). */ |
|||
/* - WATER_METER_ACC_MAJOR - [hl] - Hectoliter. Resolution 1hl. Range [1:1000000]. Accumulative water meter (major). */ |
|||
/* - CO2_GAS - [ppm] - Parts per million. Resolution 1ppm. Range [1:1000000]. Carbon dioxide concentration. */ |
|||
/* - HUMIDITY ACCURATE - [% RH] - Relative humidity. Resolution 0.1%. Range [0.1:100.0]. */ |
|||
/* - STATIC_IAQ - [sIAQ] - Static IAQ index. Resolution 1sIAQ. Range [1:10000]. */ |
|||
/* - CO2_EQUIVALENT - [ppm] - Parts per million. Resolution 1ppm. Range [1:1000000]. Carbon dioxide equivalent. */ |
|||
/* - BREATH_VOC - [ppm] - Parts per million. Resolution 1ppm. Range [1:100000]. Breath VOC estimate. */ |
|||
/* - PERCENTAGE - [%] - Percentage. Resolution 0.01%. Range [0.01:100.00]. */ |
|||
/* - PULSE_CNT_ACC_MINOR - [NB] - Number of pulses. Resolution 1 pulse. Range [1:1000000]. Accumulative pulse counter (minor). */ |
|||
/* - PULSE_CNT_ACC_MAJOR - [kNB] - Number of kilopulses. Resolution 1 kilopulse. Range [1:1000000]. */ |
|||
/* Accumulative pulse counter (major). */ |
|||
/* - ELEC_METER_ACC_MINOR - [Wh] - Watt-hour. Resolution 1Wh. Range [1:1000000]. Accumulative electricity meter (minor). */ |
|||
/* - ELEC_METER_ACC_MAJOR - [kWh] - Kilowatt-hour. Resolution 1kWh. Range [1:1000000]. Accumulative electricity meter (major). */ |
|||
|
|||
/* Condition to be checked by the device. If the condition is true, an action is triggered */ |
|||
enum Condition { |
|||
|
|||
/* Invalid value */ |
|||
CONDITION_UNSPECIFIED = 0; |
|||
|
|||
/* Threshold function for given rule_id is disabled */ |
|||
CONDITION_DISABLED = 1; |
|||
|
|||
/* Upper threshold. Continuous sensors only. If the measurement (or average from a few measurements) is over the threshold, */ |
|||
/* an action is triggered. */ |
|||
/* parameter[0] - Threshold value in "Encoding A" format. Must match channel type */ |
|||
/* parameter[1] - Hysteresis value in "Encoding R" format. Must much channel type. Set to "0" to disable */ |
|||
/* parameter[2] - Triggering mode: */ |
|||
/* - 1 - moving average (a1=(n1+n2+n3)/3, a2=(n2+n3+n4)/3, etc.) */ |
|||
/* - 2 - window average (a1=(n1+n2+n3)/3, a2=(n4+n5+n6)/3, etc.) */ |
|||
/* - 3 - consecutive samples (number of consecutive samples above threshold) */ |
|||
/* parameter[3] - Number of measurements for trigger determination. E.g parameter[3] equals 3, average value from three */ |
|||
/* samples will be calculated and compared to the threshold value in average mode or the third consecutive */ |
|||
/* sample above threshold will trigger action in consecutive mode. Range: [1:10]. */ |
|||
/* parameter[4] - Type of measurement (as described in MeasurementType). */ |
|||
CONDITION_HIGH_THRESHOLD = 2; |
|||
|
|||
/* Lower threshold. Continuous sensors only. If the measurement (or average from a few measurements) is below the threshold, */ |
|||
/* an action is triggered. */ |
|||
/* parameter[0] - Threshold value in "Encoding A" format. Must match channel type */ |
|||
/* parameter[1] - Hysteresis value in "Encoding R" format. Must much channel type. Set to "0" to disable */ |
|||
/* parameter[2] - Triggering mode: */ |
|||
/* - 1 - moving average (a1=(n1+n2+n3)/3, a2=(n2+n3+n4)/3, etc.) */ |
|||
/* - 2 - window average (a1=(n1+n2+n3)/3, a2=(n4+n5+n6)/3, etc.) */ |
|||
/* - 3 - consecutive samples (number of consecutive samples above threshold) */ |
|||
/* parameter[3] - Number of measurements for trigger determination. E.g parameter[3] equals 3, average value from three */ |
|||
/* samples will be calculated and compared to the threshold value in average mode or the third consecutive */ |
|||
/* sample below threshold will trigger action in consecutive mode. Range: [1:10]. */ |
|||
/* parameter[4] - Type of measurement (as described in MeasurementType). */ |
|||
CONDITION_LOW_THRESHOLD = 3; |
|||
|
|||
/* Differential threshold. Continuous sensors only. If the absolute value of the difference between the last value sent to */ |
|||
/* the server and the measurement value (or average from a few measurements) is greater or equal to the value of */ |
|||
/* the threshold set, an action is triggered. */ |
|||
/* parameter[0] - Threshold value in "Encoding R" format. Must match channel type */ |
|||
/* parameter[1] - Triggering mode: */ |
|||
/* - 1 - moving average (a1=(n1+n2+n3)/3, a2=(n2+n3+n4)/3, etc.) */ |
|||
/* - 2 - window average (a1=(n1+n2+n3)/3, a2=(n4+n5+n6)/3, etc.) */ |
|||
/* - 3 - consecutive samples (number of consecutive samples above threshold) */ |
|||
/* parameter[2] - Number of measurements for trigger determination. E.g parameter[3] equals 3, average value from three */ |
|||
/* samples will be calculated and compared to the threshold value in average mode or the third consecutive */ |
|||
/* sample exceeding threshold will trigger action in consecutive mode. Range: [1:10]. */ |
|||
/* parameter[3] - Type of measurement (as described in MeasurementType). */ |
|||
CONDITION_DIFF_THRESHOLD = 4; |
|||
|
|||
/* Change of binary sensor's state. Binary sensors only. Each change of the binary's sensor state will trigger an action. */ |
|||
CONDITION_BINARY_CHANGE_STATE = 5; |
|||
|
|||
/* Logic operator. Used for combining multiple rules into more complex conditions. If the logic condition specified by */ |
|||
/* parameters (logic operator and selected rules) is met, an action is triggered. */ |
|||
/* parameter[0] - Logic operator (as described in LogicOperation). */ |
|||
/* parameter[1] - Rule selector (bit mask). Specifies which rules should be taken into account while determining */ |
|||
/* rules outcome. */ |
|||
/* parameter[2] - Rule negation (bit mask). Specifies which of chosen in parameter[1] rules should be negated */ |
|||
/* before determining rules outcome. */ |
|||
/* parameter[3] - Rule action delay [s]. Specifies time delay between the rule activation and rule action being triggered. */ |
|||
/* Range: [0:864000]. */ |
|||
/* parameter[4] - Rule return delay [s]. Specifies time delay between the rule deactivation and rule action being triggered. */ |
|||
/* Range: [0:864001]. Max parameter value disables action triggering on rule deactivation. */ |
|||
CONDITION_LOGIC_OPERATOR = 6; |
|||
|
|||
/* On measurement. Continous sensors only. The basic function is to trigger communication after measurement if at least 60s */ |
|||
/* have passed since the last one. Transmission may occur every x measurement. Optionally dependency on the other rule can */ |
|||
/* be configured, then, when all conditions are met, transmission is triggered. */ |
|||
/* parameter[0] - Send every n measurement. This parameter specifies every which measurement transmission will be triggered */ |
|||
/* if all other conditions are met. Range: [1:500]. If parameter[0] equals 1, transmission will occur after */ |
|||
/* every measurement. */ |
|||
/* parameter[1] - Optional. Rule selector (bit mask). Specifies which rule should be taken into account while determining */ |
|||
/* the measurement rule outcome. */ |
|||
/* parameter[2] - Optional. Rule negation (bit mask). Specifies which of chosen in parameter[1] rule should be negated */ |
|||
/* before determining the measurement rule outcome. */ |
|||
CONDITION_ON_MEASUREMENT = 7; |
|||
} |
|||
|
|||
/* Logic operators to be used for determining the outcome of rules with logic operator condition. */ |
|||
enum LogicOperator { |
|||
|
|||
/* Invalid use */ |
|||
LOGIC_OPERATOR_UNSPECIFIED = 0; |
|||
|
|||
/* Logic AND */ |
|||
LOGIC_OPERATOR_AND = 1; |
|||
|
|||
/* Logic OR */ |
|||
LOGIC_OPERATOR_OR = 2; |
|||
} |
|||
|
|||
/* Action to be triggered. Currently the only possible action is to trigger the transmission. */ |
|||
/* Other actions will be available in next SW releases. */ |
|||
enum Action { |
|||
|
|||
/* Invalid value */ |
|||
ACTION_UNSPECIFIED = 0; |
|||
|
|||
/* To trigger the transmission */ |
|||
ACTION_TRIGGER_TRANSMISSION = 1; |
|||
|
|||
/* To take no action. Possible for logic operator components */ |
|||
ACTION_NO_ACTION = 2; |
|||
|
|||
/* To trigger the transmission with ACK */ |
|||
ACTION_TRIGGER_TRANSMISSION_WITH_ACK = 3; |
|||
} |
|||
|
|||
/* Type of a rule calendars. */ |
|||
enum CalendarType { |
|||
|
|||
/* Invalid value */ |
|||
CALENDAR_TYPE_UNSPECIFIED = 0; |
|||
|
|||
/* Type for inactive calendars */ |
|||
CALENDAR_TYPE_DISABLED = 1; |
|||
|
|||
/* Week type. Enables selcted rules on specified days of the week in specified time periods. */ |
|||
/* parameter[0] - Week day mask. Bitmask of days when selected rules are enabled */ |
|||
/* - Bit 0 - Sunday */ |
|||
/* - Bit 1 - Monday */ |
|||
/* ... */ |
|||
/* - Bit 6 - Saturday */ |
|||
/* parameter[1] - 'From time' - point in time from which selected rules will be enabled (in minutes from midnight). */ |
|||
/* parameter[2] - 'To time' - point in time from which selected rules will be disabled (in minutes from midnight). */ |
|||
/* Note: if 'From time' is bigger than 'To time' there are two periods when rules are enabled - from 00:00 to 'To time' */ |
|||
/* and from 'From time' to 23:59. */ |
|||
/* parameter[3] - Timezone - desired timezone for date comparison. Encoded as number (N) of 15 minutes offsets */ |
|||
/* - example - if N = 4, then offset = 4 * 15min = 1h. I.e. timezone is UTC+1. */ |
|||
CALENDAR_TYPE_WEEK = 2; |
|||
} |
|||
|
|||
/* Rules calendars. Used for enabling/disabling rules based on date/time. */ |
|||
/* It is possible to configure up to 6 calendars. Each of them can affect any number of rules. */ |
|||
message ProtoCalendar { |
|||
|
|||
/* Bit mask of selected rules. Mask on bits [0:11] */ |
|||
/* - Bit 0 - Rule ID 0 */ |
|||
/* - Bit 1 - Rule ID 1 */ |
|||
/* ... */ |
|||
/* - Bit 11 - Rule ID 11 */ |
|||
uint32 rule_mask = 1; |
|||
|
|||
/* Calendars's parameters. Described in Type. */ |
|||
repeated sint32 parameters = 2; |
|||
|
|||
/* Calendar's type. Described in Type. */ |
|||
CalendarType type = 3; |
|||
} |
|||
|
|||
/* Rules used to define edge logic on the device. Rules are defined by conditions and actions: */ |
|||
/* If Condition is true, trigger Action. It is possible to configure up to 12 rules and assign them to different channels. */ |
|||
/* One rule can be assigned to any number of channels. For instance rule "If temperature is over 10 C, trigger the transmission"*/ |
|||
/* can be assigned to channels 1 and 2. No matter to how many channels a rule is assigned, it's still counted as one rule. */ |
|||
message ProtoRule { |
|||
|
|||
/* Channels to which the rule is assigned. One rule can be assigned to multiple channels as long as those are of the same type*/ |
|||
/* Bit mask on bits [0:5]. E.g. To assign the rule for channel 1: "000001", to assign rule to channels 2 and 4: "001010" */ |
|||
uint32 channel_mask = 1; |
|||
|
|||
/* Rule's condition (as described in Condition). */ |
|||
Condition condition = 2; |
|||
|
|||
/* Condition's parameters (as described in Condition). For binary sensors there are no parameters */ |
|||
repeated sint32 parameters = 3; |
|||
|
|||
/* Action to be triggered. */ |
|||
Action action = 4; |
|||
} |
|||
@ -0,0 +1,45 @@ |
|||
/** |
|||
* Copyright © 2016-2023 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
package org.thingsboard.server.dao.eventsourcing; |
|||
|
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
import static org.assertj.core.api.Assertions.assertThat; |
|||
import static org.assertj.core.api.BDDAssertions.byLessThan; |
|||
|
|||
class DeleteEntityEventTest { |
|||
|
|||
@Test |
|||
void testBuilderDefaultTs() { |
|||
assertThat(DeleteEntityEvent.builder().build().getTs()) |
|||
.isCloseTo(System.currentTimeMillis(), byLessThan(TimeUnit.MINUTES.toMillis(1))); |
|||
|
|||
assertThat(DeleteEntityEvent.builder().ts(Long.MIN_VALUE).build().getTs()) |
|||
.isEqualTo(Long.MIN_VALUE); |
|||
assertThat(DeleteEntityEvent.builder().ts(Long.MAX_VALUE).build().getTs()) |
|||
.isEqualTo(Long.MAX_VALUE); |
|||
assertThat(DeleteEntityEvent.builder().ts(-1L).build().getTs()) |
|||
.isEqualTo(-1L); |
|||
assertThat(DeleteEntityEvent.builder().ts(0L).build().getTs()) |
|||
.isEqualTo(0L); |
|||
|
|||
assertThat(DeleteEntityEvent.builder().ts(1692175215000L).build().getTs()) |
|||
.isEqualTo(1692175215000L); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue