1#![no_std]
2#![doc = include_str!("../README.md")]
3
4#[cfg(feature = "alloc")]
5extern crate alloc;
6
7pub mod devices;
8pub mod error;
9pub mod messages;
10
11pub use devices::*;
12pub use error::*;
13pub use messages::*;
14
15use serde::{Deserialize, Serialize};
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
19#[repr(u8)]
20pub enum TsmEvent {
21 NotApplicable = 0,
23 EventBased = 7,
25 EventBasedStateChange = 9,
27 Timebased = 10,
29 Startup = 11,
31 AssistanceRequest = 19,
33 AssistanceResponse = 20,
35 Error = 29,
37 ConfigCommand = 30,
39 ConfigResponse = 31,
41 InfoRequest = 32,
43 FirmwareResponse = 33,
45 RawPacketSend = 35,
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
51pub enum DeviceModel {
52 #[serde(rename = "TSAR01")]
54 ThingseeAir01,
55 #[serde(rename = "TSAR02")]
57 ThingseeAir02,
58 #[serde(rename = "TSAN01")]
60 ThingseeAngleRugged,
61 #[serde(rename = "TSTF04")]
63 ThingseeBeam,
64 #[serde(rename = "TSAP01")]
66 ThingseeCount,
67 #[serde(rename = "TSEN01")]
69 ThingseeEnvironment,
70 #[serde(rename = "TSRU01")]
72 ThingseeEnvironmentRugged01,
73 #[serde(rename = "TSRU02")]
75 ThingseeEnvironmentRugged02,
76 #[serde(rename = "TSPD04")]
78 ThingseeEnvironmentPd04,
79 #[serde(rename = "TSGW05")]
81 ThingseeGatewayLan,
82 #[serde(rename = "TSGW06")]
84 ThingseeGatewayGlobal,
85 #[serde(rename = "TSLK01")]
87 ThingseeLeakageRugged01,
88 #[serde(rename = "TSLK02")]
90 ThingseeLeakageRugged02,
91 #[serde(rename = "TSPC01")]
93 ThingseePowercover,
94 #[serde(rename = "TSPR04")]
96 ThingseePresence,
97 #[serde(rename = "TSRA01")]
99 HaltianRadar,
100}
101
102pub mod tsm_ids {
104 pub const SYSTEM_INFO: u16 = 1100;
107 pub const SYSTEM_INFO_UNAVAILABLE: u16 = 1102;
109 pub const BATTERY_INFO: u16 = 1110;
111 pub const ORIENTATION_INFO: u16 = 1111;
113 pub const UPTIME_INFO: u16 = 1112;
115 pub const WIREPAS_NETWORK_DIAGNOSTICS: u16 = 1200;
117 pub const WIREPAS_NODE_IDENTIFICATION: u16 = 1201;
119 pub const SENSOR_NETWORK_DIAGNOSTICS: u16 = 1202;
121 pub const SENSOR_NETWORK_IDENTIFICATION: u16 = 1205;
123 pub const CELLULAR_RF_DATA: u16 = 1211;
125 pub const CELLULAR_IDENTIFICATION: u16 = 1212;
127 pub const WIREPAS_NODE_DIAGNOSTICS: u16 = 1220;
129 pub const FIRMWARE_BINARY_VERSION: u16 = 1312;
131 pub const HARDWARE_IDENTIFICATION: u16 = 1313;
133 pub const ERROR_INFO: u16 = 1403;
135 pub const SENSOR_INTERVAL_CONFIG: u16 = 1500;
137 pub const WIREPAS_NODE_ROLE_CONFIG: u16 = 1501;
139
140 pub const OCCUPANCY_STATE_CHANGE: u16 = 2100;
143
144 pub const GATEWAY_HEARTBEAT_SUMMARY: u16 = 11200;
147 pub const GATEWAY_HEARTBEAT_STATE_CHANGE: u16 = 11201;
149 pub const GATEWAY_HEARTBEAT_CONFIG: u16 = 11210;
151 pub const GATEWAY_HEARTBEAT_REQUEST: u16 = 11211;
153 pub const GATEWAY_TIMESYNC_CONFIG: u16 = 11220;
155 pub const WIREPAS_RAW_PACKET_SEND: u16 = 11310;
157 pub const WIREPAS_RAW_PACKET_RECEIVE: u16 = 11311;
159 pub const WIREPAS_RAW_PACKET_CONFIG: u16 = 11312;
161 pub const WIREPAS_MESH_APP_CONFIG: u16 = 11320;
163
164 pub const ENVIRONMENT_DATA: u16 = 12100;
167 pub const MAGNETO_SWITCH_DATA: u16 = 12101;
169 pub const LEAKAGE_RESISTANCE_DATA: u16 = 12102;
171 pub const ENVIRONMENT_SENSOR_CONFIG: u16 = 12200;
173 pub const WEATHER_SENSOR_CONFIG: u16 = 12210;
175 pub const LEAKAGE_SENSOR_CONFIG: u16 = 12212;
177
178 pub const PRESENCE_MOVEMENT_COUNT: u16 = 13100;
181 pub const PRESENCE_COUNT_DATA: u16 = 13103;
183 pub const PRESENCE_SENSOR_CONFIG: u16 = 13200;
185
186 pub const MACHINE_USAGE_DATA: u16 = 16100;
189
190 pub const DISTANCE_MEASUREMENT: u16 = 17200;
193 pub const DISTANCE_SENSOR_CONFIG: u16 = 17220;
195
196 pub const ANGLE_DATA: u16 = 18100;
199 pub const ANGLE_TEMPERATURE: u16 = 18101;
201 pub const ANGLE_LED_CONTROL: u16 = 18200;
203
204 pub const CO2_DATA: u16 = 24100;
207 pub const TVOC_DATA: u16 = 24101;
209 pub const CO2_CONFIG: u16 = 24200;
211 pub const TVOC_CONFIG: u16 = 24202;
213
214 pub const RADAR_SET_TO_SLEEP: u16 = 28006;
217 pub const RADAR_MEASUREMENT: u16 = 28009;
219 pub const RADAR_ELA_STARTED: u16 = 28010;
221 pub const RADAR_ELA_CURVE: u16 = 28011;
223 pub const RADAR_ELA_CALIBRATION: u16 = 28037;
225}
226
227#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
229#[repr(u8)]
230pub enum SensorStatus {
231 Normal = 0,
233 WarmingUp = 1,
235 Error = 2,
237 Calibrating = 3,
239}
240
241pub type BatteryLevel = u8;
243
244pub type Temperature = i16;
246
247pub type Humidity = u16;
249
250pub type Pressure = u32;
252
253pub type LightLevel = u32;
255
256pub type Co2Level = u16;
258
259pub type TvocLevel = u16;
261
262pub type Distance = u16;
264
265pub type Angle = u16;
267
268pub type Resistance = u32;
270
271pub type Tuid = heapless::String<16>;
273
274pub type SoftwareVersion = heapless::String<32>;
276
277pub type ProductSerialNumber = heapless::String<32>;
279
280pub type BinaryType = heapless::String<16>;
282
283pub type BinaryVersion = heapless::String<32>;
285
286pub type HardwareId = heapless::String<16>;
288
289pub type RssiDbm = i8;
291
292pub type Rssi = u8;
294
295pub type RadioPower = u8;
297
298pub type RadioPowerDbm = i8;
300
301#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
303pub struct CellularSignal {
304 #[serde(skip_serializing_if = "Option::is_none")]
306 pub cell_rsrp: Option<i16>,
307 #[serde(skip_serializing_if = "Option::is_none")]
309 pub cell_rsrq: Option<i16>,
310 #[serde(skip_serializing_if = "Option::is_none")]
312 pub cell_sinr: Option<i16>,
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub cell_rssi: Option<i16>,
316 #[serde(skip_serializing_if = "Option::is_none")]
318 pub cell_rscp: Option<i16>,
319 #[serde(skip_serializing_if = "Option::is_none")]
321 pub cell_ecn0: Option<i16>,
322 #[serde(skip_serializing_if = "Option::is_none")]
324 pub cell_lac: Option<u16>,
325 #[serde(skip_serializing_if = "Option::is_none")]
327 pub cell_id: Option<u32>,
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub cell_tac: Option<u16>,
331 #[serde(skip_serializing_if = "Option::is_none")]
333 pub cell_rat: Option<u8>,
334}
335
336#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
338pub struct AccelerometerData {
339 pub accx: i16,
341 pub accy: i16,
343 pub accz: i16,
345}