Skip to main content

shelly_core/model/
gen2_responses.rs

1use serde::Deserialize;
2
3/// Gen2/Gen3 `/shelly` endpoint response.
4#[derive(Debug, Deserialize)]
5pub struct Gen2ShellyResponse {
6    #[serde(default)]
7    pub id: String,
8    #[serde(default)]
9    pub mac: String,
10    #[serde(default = "default_unknown")]
11    pub model: String,
12    #[serde(default = "default_gen2", rename = "gen")]
13    pub generation: u64,
14    #[serde(default = "default_unknown")]
15    pub ver: String,
16    #[serde(default)]
17    pub auth_en: bool,
18    pub app: Option<String>,
19    pub name: Option<String>,
20}
21
22/// Gen2 Switch component status.
23#[derive(Debug, Deserialize)]
24pub struct Gen2SwitchStatus {
25    #[serde(default)]
26    pub id: u8,
27    #[serde(default)]
28    pub output: bool,
29    pub source: Option<String>,
30    pub apower: Option<f64>,
31    pub voltage: Option<f64>,
32    pub current: Option<f64>,
33    #[serde(rename = "freq")]
34    pub frequency: Option<f64>,
35    pub temperature: Option<Gen2SwitchTemperature>,
36    pub aenergy: Option<Gen2Energy>,
37    pub timer_started_at: Option<f64>,
38    pub timer_duration: Option<f64>,
39}
40
41/// Gen2 switch temperature sub-object.
42#[derive(Debug, Deserialize)]
43pub struct Gen2SwitchTemperature {
44    #[serde(rename = "tC")]
45    pub t_c: Option<f64>,
46}
47
48/// Gen2 energy sub-object.
49#[derive(Debug, Deserialize)]
50pub struct Gen2Energy {
51    pub total: Option<f64>,
52}
53
54/// Gen2 Wifi component status.
55#[derive(Debug, Deserialize)]
56pub struct Gen2WifiStatus {
57    pub sta_ip: Option<String>,
58    pub status: Option<String>,
59    pub ssid: Option<String>,
60    pub rssi: Option<i64>,
61}
62
63/// Gen2 Sys component status.
64#[derive(Debug, Deserialize)]
65pub struct Gen2SysStatus {
66    pub uptime: Option<u64>,
67    pub time: Option<String>,
68    pub ram_free: Option<u64>,
69}
70
71/// Gen2 cloud block.
72#[derive(Debug, Deserialize)]
73pub struct Gen2Cloud {
74    pub connected: Option<bool>,
75}
76
77/// Gen2 mqtt block.
78#[derive(Debug, Deserialize)]
79pub struct Gen2Mqtt {
80    pub connected: Option<bool>,
81}
82
83/// Gen2 input component.
84#[derive(Debug, Deserialize)]
85pub struct Gen2InputStatus {
86    #[serde(default)]
87    pub id: u8,
88    #[serde(default)]
89    pub state: bool,
90}
91
92fn default_unknown() -> String {
93    "unknown".to_string()
94}
95
96fn default_gen2() -> u64 {
97    2
98}