/ web / src / pages / panels / sensor_types.rs
sensor_types.rs
 1  #[derive(Clone, Copy, PartialEq)]
 2  pub enum MeasurementTab {
 3      Voltage,
 4      CarbonDioxide,
 5      TemperatureHumidity,
 6      Pressure,
 7  }
 8  
 9  impl MeasurementTab {
10      pub fn to_value(self) -> String {
11          match self {
12              Self::TemperatureHumidity => "temp_humidity",
13              Self::Voltage => "voltage",
14              Self::CarbonDioxide => "co2",
15              Self::Pressure => "pressure",
16          }
17          .to_string()
18      }
19  
20      pub fn from_value(s: &str) -> Self {
21          match s {
22              "temp_humidity" => Self::TemperatureHumidity,
23              "voltage" => Self::Voltage,
24              "co2" => Self::CarbonDioxide,
25              "pressure" => Self::Pressure,
26              _ => Self::TemperatureHumidity,
27          }
28      }
29  
30      pub fn label(&self) -> &'static str {
31          match self {
32              Self::TemperatureHumidity => "Temperature & Humidity",
33              Self::Voltage => "Voltage",
34              Self::CarbonDioxide => "CO\u{2082}",
35              Self::Pressure => "Pressure",
36          }
37      }
38  
39      pub fn is_available(&self, avail: &super::sensor_feed::SensorAvailability) -> bool {
40          match self {
41              Self::TemperatureHumidity => avail.temperature_humidity,
42              Self::Voltage => avail.voltage,
43              Self::CarbonDioxide => avail.co2,
44              Self::Pressure => avail.pressure,
45          }
46      }
47  }
48  
49  #[derive(Clone)]
50  pub struct Co2Row {
51      pub row: usize,
52      pub co2_ppm: f64,
53      pub temperature: f64,
54      pub humidity: f64,
55      pub time: String,
56  }
57  
58  #[derive(Clone)]
59  pub struct TemperatureHumidityReading {
60      pub read_ok: bool,
61      pub temperature_celsius: f64,
62      pub relative_humidity_percent: f64,
63  }
64  
65  #[derive(Clone)]
66  pub struct TemperatureHumidityRow {
67      pub row: usize,
68      pub sensors: Vec<TemperatureHumidityReading>,
69      pub default_model: String,
70      pub time: String,
71  }
72  
73  #[derive(Clone)]
74  pub struct VoltageRow {
75      pub row: usize,
76      pub gain: String,
77      pub channels: Vec<f64>,
78      pub time: String,
79  }
80  
81  #[derive(Clone)]
82  pub struct PressureRow {
83      pub row: usize,
84      pub model: String,
85      pub pressure_hpa: f64,
86      pub temperature_celsius: f64,
87      pub time: String,
88  }