1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
use serde::Deserialize;
use serde::de::Unexpected;
use serde::de;
use serde::Deserializer;
use zigbee2mqtt_types_base_types::LastSeen;
/// woox:R7048 [zigbee2mqtt link](https://www.zigbee2mqtt.io/devices/R7048.html)
///
///
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize)]
pub struct ZigbeeR7048 {
///Remaining battery in %, can take up to 24 hours before reported.
pub battery: f64,
///Measured relative humidity
pub humidity: f64,
///Link quality (signal strength)
pub linkquality: f64,
///Measured temperature value
pub temperature: f64,
///Voltage of the battery in millivolts
pub voltage: f64,
/// Optional last_seen type, set as a global zigbee2mqtt setting
pub last_seen: Option<LastSeen>,
/// Optional elapsed type
pub elapsed: Option<u64>,
}/// woox:R7051 [zigbee2mqtt link](https://www.zigbee2mqtt.io/devices/R7051.html)
///
///
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize)]
pub struct ZigbeeR7051 {
///Zigbee herdsman description: "Is the device plugged in"
///Boolean values can be an unintuitive way round: value_on = true and value_off = false, consider double checking Zigbee2MQTT to understand what they mean
pub ac_connected: bool,
///Boolean values can be an unintuitive way round: value_on = true and value_off = false, consider double checking Zigbee2MQTT to understand what they mean
pub alarm: bool,
///Remaining battery in %, can take up to 24 hours before reported.
pub battery: f64,
///Duration of siren
pub duration: f64,
///Link quality (signal strength)
pub linkquality: f64,
///Voltage of the battery in millivolts
pub voltage: f64,
///Volume of siren
pub volume: f64,
/// Optional last_seen type, set as a global zigbee2mqtt setting
pub last_seen: Option<LastSeen>,
/// Optional elapsed type
pub elapsed: Option<u64>,
}/// woox:R7060 [zigbee2mqtt link](https://www.zigbee2mqtt.io/devices/R7060.html)
///
///
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize)]
pub struct ZigbeeR7060 {
///Remaining battery in %, can take up to 24 hours before reported.
pub battery: f64,
///Link quality (signal strength)
pub linkquality: f64,
///Zigbee herdsman description: "On/off state of the switch"
///The string values get converted into boolean with: ON = true and OFF = false
#[serde(deserialize_with = "zigbeer7060_state_deserializer")]
pub state: bool,
/// Optional last_seen type, set as a global zigbee2mqtt setting
pub last_seen: Option<LastSeen>,
/// Optional elapsed type
pub elapsed: Option<u64>,
}
/// Deserialize bool from String with custom value mapping
fn zigbeer7060_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
match String::deserialize(deserializer)?.as_ref() {
"ON" => Ok(true),
"OFF" => Ok(false),
other => Err(de::Error::invalid_value(
Unexpected::Str(other),
&"Value expected was either ON or OFF",
)),
}
}
/// woox:R9077 [zigbee2mqtt link](https://www.zigbee2mqtt.io/devices/R9077.html)
///
///
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize)]
pub struct ZigbeeR9077 {
///Brightness of this light
pub brightness: f64,
///Power on behavior state
pub color_power_on_behavior: ZigbeeR9077Colorpoweronbehavior,
///Color temperature of this light
pub color_temp: f64,
///Zigbee herdsman description: "Do not disturb mode, when enabled this function will keep the light OFF after a power outage"
///Boolean values can be an unintuitive way round: value_on = true and value_off = false, consider double checking Zigbee2MQTT to understand what they mean
pub do_not_disturb: bool,
///Link quality (signal strength)
pub linkquality: f64,
///Zigbee herdsman description: "On/off state of this light"
///The string values get converted into boolean with: ON = true and OFF = false
#[serde(deserialize_with = "zigbeer9077_state_deserializer")]
pub state: bool,
/// Optional last_seen type, set as a global zigbee2mqtt setting
pub last_seen: Option<LastSeen>,
/// Optional elapsed type
pub elapsed: Option<u64>,
}
/// Deserialize bool from String with custom value mapping
fn zigbeer9077_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
match String::deserialize(deserializer)?.as_ref() {
"ON" => Ok(true),
"OFF" => Ok(false),
other => Err(de::Error::invalid_value(
Unexpected::Str(other),
&"Value expected was either ON or OFF",
)),
}
}
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize, PartialEq)]
pub enum ZigbeeR9077Colorpoweronbehavior {
#[serde(rename = "cutomized")]
Cutomized,
#[serde(rename = "initial")]
Initial,
#[serde(rename = "previous")]
Previous,
}
#[cfg(all(feature = "last_seen_epoch", feature = "last_seen_iso_8601"))]
compile_error!{"Feature last_seen epoch and iso_8601 are mutually exclusive and cannot be enabled together.
This was done because it is a global setting in zigbee2mqtt and therefor can't see a reason both would be enabled.
If you have a any reason to have both ways enabled please submit an issue to https://gitlab.com/seam345/zigbee2mqtt-types/-/issues"}