1use serde::Deserialize;
2use serde::de::Unexpected;
3use serde::de;
4use serde::Deserializer;
5use zigbee2mqtt_types_base_types::LastSeen;
6#[cfg_attr(feature = "debug", derive(Debug))]
10#[cfg_attr(feature = "clone", derive(Clone))]
11#[derive(Deserialize)]
12pub struct ZigbeeAuDa1gsz9b27 {
13 pub brightness: f64,
15 pub linkquality: f64,
17 pub power_on_behavior: ZigbeeAuDa1gsz9b27Poweronbehavior,
19 #[serde(deserialize_with = "zigbeeauda1gsz9b27_state_deserializer")]
22 pub state: bool,
23 pub last_seen: Option<LastSeen>,
25 pub elapsed: Option<u64>,
27}
28fn zigbeeauda1gsz9b27_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
30where
31 D: Deserializer<'de>,
32{
33 match String::deserialize(deserializer)?.as_ref() {
34 "ON" => Ok(true),
35 "OFF" => Ok(false),
36 other => Err(de::Error::invalid_value(
37 Unexpected::Str(other),
38 &"Value expected was either ON or OFF",
39 )),
40 }
41}
42
43#[cfg_attr(feature = "debug", derive(Debug))]
47#[cfg_attr(feature = "clone", derive(Clone))]
48#[derive(Deserialize)]
49pub struct ZigbeeAuDa1gsz9rgbwUhvDgscxzb269k {
50 pub brightness: f64,
52 pub color_temp: f64,
54 pub color_temp_startup: f64,
56 pub linkquality: f64,
58 pub power_on_behavior: ZigbeeAuDa1gsz9rgbwUhvDgscxzb269kPoweronbehavior,
60 #[serde(deserialize_with = "zigbeeauda1gsz9rgbwuhvdgscxzb269k_state_deserializer")]
63 pub state: bool,
64 pub last_seen: Option<LastSeen>,
66 pub elapsed: Option<u64>,
68}
69fn zigbeeauda1gsz9rgbwuhvdgscxzb269k_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
71where
72 D: Deserializer<'de>,
73{
74 match String::deserialize(deserializer)?.as_ref() {
75 "ON" => Ok(true),
76 "OFF" => Ok(false),
77 other => Err(de::Error::invalid_value(
78 Unexpected::Str(other),
79 &"Value expected was either ON or OFF",
80 )),
81 }
82}
83
84#[cfg_attr(feature = "debug", derive(Debug))]
88#[cfg_attr(feature = "clone", derive(Clone))]
89#[derive(Deserialize)]
90pub struct ZigbeeAuDa1guzb530 {
91 pub brightness: f64,
93 pub linkquality: f64,
95 pub power_on_behavior: ZigbeeAuDa1guzb530Poweronbehavior,
97 #[serde(deserialize_with = "zigbeeauda1guzb530_state_deserializer")]
100 pub state: bool,
101 pub last_seen: Option<LastSeen>,
103 pub elapsed: Option<u64>,
105}
106fn zigbeeauda1guzb530_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
108where
109 D: Deserializer<'de>,
110{
111 match String::deserialize(deserializer)?.as_ref() {
112 "ON" => Ok(true),
113 "OFF" => Ok(false),
114 other => Err(de::Error::invalid_value(
115 Unexpected::Str(other),
116 &"Value expected was either ON or OFF",
117 )),
118 }
119}
120
121#[cfg_attr(feature = "debug", derive(Debug))]
125#[cfg_attr(feature = "clone", derive(Clone))]
126#[derive(Deserialize)]
127pub struct ZigbeeAuDa1guzbcx5 {
128 pub brightness: f64,
130 pub color_temp: f64,
132 pub color_temp_startup: f64,
134 pub linkquality: f64,
136 pub power_on_behavior: ZigbeeAuDa1guzbcx5Poweronbehavior,
138 #[serde(deserialize_with = "zigbeeauda1guzbcx5_state_deserializer")]
141 pub state: bool,
142 pub last_seen: Option<LastSeen>,
144 pub elapsed: Option<u64>,
146}
147fn zigbeeauda1guzbcx5_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
149where
150 D: Deserializer<'de>,
151{
152 match String::deserialize(deserializer)?.as_ref() {
153 "ON" => Ok(true),
154 "OFF" => Ok(false),
155 other => Err(de::Error::invalid_value(
156 Unexpected::Str(other),
157 &"Value expected was either ON or OFF",
158 )),
159 }
160}
161
162#[cfg_attr(feature = "debug", derive(Debug))]
166#[cfg_attr(feature = "clone", derive(Clone))]
167#[derive(Deserialize)]
168pub struct ZigbeeAuDa1guzbrgbw {
169 pub brightness: f64,
171 pub color_temp: f64,
173 pub color_temp_startup: f64,
175 pub linkquality: f64,
177 pub power_on_behavior: ZigbeeAuDa1guzbrgbwPoweronbehavior,
179 #[serde(deserialize_with = "zigbeeauda1guzbrgbw_state_deserializer")]
182 pub state: bool,
183 pub last_seen: Option<LastSeen>,
185 pub elapsed: Option<u64>,
187}
188fn zigbeeauda1guzbrgbw_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
190where
191 D: Deserializer<'de>,
192{
193 match String::deserialize(deserializer)?.as_ref() {
194 "ON" => Ok(true),
195 "OFF" => Ok(false),
196 other => Err(de::Error::invalid_value(
197 Unexpected::Str(other),
198 &"Value expected was either ON or OFF",
199 )),
200 }
201}
202
203#[cfg_attr(feature = "debug", derive(Debug))]
207#[cfg_attr(feature = "clone", derive(Clone))]
208#[derive(Deserialize)]
209pub struct ZigbeeAuDa1vg125z5e19 {
210 pub brightness: f64,
212 pub linkquality: f64,
214 pub power_on_behavior: ZigbeeAuDa1vg125z5e19Poweronbehavior,
216 #[serde(deserialize_with = "zigbeeauda1vg125z5e19_state_deserializer")]
219 pub state: bool,
220 pub last_seen: Option<LastSeen>,
222 pub elapsed: Option<u64>,
224}
225fn zigbeeauda1vg125z5e19_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
227where
228 D: Deserializer<'de>,
229{
230 match String::deserialize(deserializer)?.as_ref() {
231 "ON" => Ok(true),
232 "OFF" => Ok(false),
233 other => Err(de::Error::invalid_value(
234 Unexpected::Str(other),
235 &"Value expected was either ON or OFF",
236 )),
237 }
238}
239
240#[cfg_attr(feature = "debug", derive(Debug))]
244#[cfg_attr(feature = "clone", derive(Clone))]
245#[derive(Deserialize)]
246pub struct ZigbeeAuDa1vgsz5e19 {
247 pub brightness: f64,
249 pub linkquality: f64,
251 pub power_on_behavior: ZigbeeAuDa1vgsz5e19Poweronbehavior,
253 #[serde(deserialize_with = "zigbeeauda1vgsz5e19_state_deserializer")]
256 pub state: bool,
257 pub last_seen: Option<LastSeen>,
259 pub elapsed: Option<u64>,
261}
262fn zigbeeauda1vgsz5e19_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
264where
265 D: Deserializer<'de>,
266{
267 match String::deserialize(deserializer)?.as_ref() {
268 "ON" => Ok(true),
269 "OFF" => Ok(false),
270 other => Err(de::Error::invalid_value(
271 Unexpected::Str(other),
272 &"Value expected was either ON or OFF",
273 )),
274 }
275}
276
277#[cfg_attr(feature = "debug", derive(Debug))]
281#[cfg_attr(feature = "clone", derive(Clone))]
282#[derive(Deserialize)]
283pub struct ZigbeeAuDa1zb2wdm {
284 #[serde(deserialize_with = "zigbeeauda1zb2wdm_backlight_led_deserializer")]
287 pub backlight_led: bool,
288 pub brightness: f64,
290 pub linkquality: f64,
292 pub power_on_behavior: ZigbeeAuDa1zb2wdmPoweronbehavior,
294 #[serde(deserialize_with = "zigbeeauda1zb2wdm_state_deserializer")]
297 pub state: bool,
298 pub last_seen: Option<LastSeen>,
300 pub elapsed: Option<u64>,
302}
303fn zigbeeauda1zb2wdm_backlight_led_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
305where
306 D: Deserializer<'de>,
307{
308 match String::deserialize(deserializer)?.as_ref() {
309 "ON" => Ok(true),
310 "OFF" => Ok(false),
311 other => Err(de::Error::invalid_value(
312 Unexpected::Str(other),
313 &"Value expected was either ON or OFF",
314 )),
315 }
316}
317
318
319fn zigbeeauda1zb2wdm_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
321where
322 D: Deserializer<'de>,
323{
324 match String::deserialize(deserializer)?.as_ref() {
325 "ON" => Ok(true),
326 "OFF" => Ok(false),
327 other => Err(de::Error::invalid_value(
328 Unexpected::Str(other),
329 &"Value expected was either ON or OFF",
330 )),
331 }
332}
333
334#[cfg_attr(feature = "debug", derive(Debug))]
338#[cfg_attr(feature = "clone", derive(Clone))]
339#[derive(Deserialize)]
340pub struct ZigbeeAuDa1zbdss {
341 pub brightness: f64,
343 pub linkquality: f64,
345 pub power_left: f64,
347 pub power_right: f64,
349 #[serde(deserialize_with = "zigbeeauda1zbdss_state_left_deserializer")]
352 pub state_left: bool,
353 #[serde(deserialize_with = "zigbeeauda1zbdss_state_right_deserializer")]
356 pub state_right: bool,
357 pub last_seen: Option<LastSeen>,
359 pub elapsed: Option<u64>,
361}
362fn zigbeeauda1zbdss_state_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
364where
365 D: Deserializer<'de>,
366{
367 match String::deserialize(deserializer)?.as_ref() {
368 "ON" => Ok(true),
369 "OFF" => Ok(false),
370 other => Err(de::Error::invalid_value(
371 Unexpected::Str(other),
372 &"Value expected was either ON or OFF",
373 )),
374 }
375}
376
377
378fn zigbeeauda1zbdss_state_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
380where
381 D: Deserializer<'de>,
382{
383 match String::deserialize(deserializer)?.as_ref() {
384 "ON" => Ok(true),
385 "OFF" => Ok(false),
386 other => Err(de::Error::invalid_value(
387 Unexpected::Str(other),
388 &"Value expected was either ON or OFF",
389 )),
390 }
391}
392
393#[cfg_attr(feature = "debug", derive(Debug))]
397#[cfg_attr(feature = "clone", derive(Clone))]
398#[derive(Deserialize)]
399pub struct ZigbeeAuDa1zbdws {
400 pub battery: f64,
402 pub battery_low: bool,
405 pub contact: bool,
408 pub linkquality: f64,
410 pub tamper: bool,
413 pub last_seen: Option<LastSeen>,
415 pub elapsed: Option<u64>,
417}#[cfg_attr(feature = "debug", derive(Debug))]
421#[cfg_attr(feature = "clone", derive(Clone))]
422#[derive(Deserialize)]
423pub struct ZigbeeAuDa1zbmpro1zx {
424 pub brightness: f64,
426 pub color_temp: f64,
428 pub color_temp_startup: f64,
430 pub linkquality: f64,
432 pub power_on_behavior: ZigbeeAuDa1zbmpro1zxPoweronbehavior,
434 #[serde(deserialize_with = "zigbeeauda1zbmpro1zx_state_deserializer")]
437 pub state: bool,
438 pub last_seen: Option<LastSeen>,
440 pub elapsed: Option<u64>,
442}
443fn zigbeeauda1zbmpro1zx_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
445where
446 D: Deserializer<'de>,
447{
448 match String::deserialize(deserializer)?.as_ref() {
449 "ON" => Ok(true),
450 "OFF" => Ok(false),
451 other => Err(de::Error::invalid_value(
452 Unexpected::Str(other),
453 &"Value expected was either ON or OFF",
454 )),
455 }
456}
457
458#[cfg_attr(feature = "debug", derive(Debug))]
462#[cfg_attr(feature = "clone", derive(Clone))]
463#[derive(Deserialize)]
464pub struct ZigbeeAuDa1zbpia {
465 pub current: f64,
467 pub device_temperature: f64,
469 pub energy: f64,
471 pub linkquality: f64,
473 pub power: f64,
475 #[serde(deserialize_with = "zigbeeauda1zbpia_state_deserializer")]
478 pub state: bool,
479 pub voltage: f64,
481 pub last_seen: Option<LastSeen>,
483 pub elapsed: Option<u64>,
485}
486fn zigbeeauda1zbpia_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
488where
489 D: Deserializer<'de>,
490{
491 match String::deserialize(deserializer)?.as_ref() {
492 "ON" => Ok(true),
493 "OFF" => Ok(false),
494 other => Err(de::Error::invalid_value(
495 Unexpected::Str(other),
496 &"Value expected was either ON or OFF",
497 )),
498 }
499}
500
501#[cfg_attr(feature = "debug", derive(Debug))]
505#[cfg_attr(feature = "clone", derive(Clone))]
506#[derive(Deserialize)]
507pub struct ZigbeeAuDa1zbpiab {
508 pub current: f64,
510 pub linkquality: f64,
512 pub power: f64,
514 #[serde(deserialize_with = "zigbeeauda1zbpiab_state_deserializer")]
517 pub state: bool,
518 pub voltage: f64,
520 pub last_seen: Option<LastSeen>,
522 pub elapsed: Option<u64>,
524}
525fn zigbeeauda1zbpiab_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
527where
528 D: Deserializer<'de>,
529{
530 match String::deserialize(deserializer)?.as_ref() {
531 "ON" => Ok(true),
532 "OFF" => Ok(false),
533 other => Err(de::Error::invalid_value(
534 Unexpected::Str(other),
535 &"Value expected was either ON or OFF",
536 )),
537 }
538}
539
540#[cfg_attr(feature = "debug", derive(Debug))]
544#[cfg_attr(feature = "clone", derive(Clone))]
545#[derive(Deserialize)]
546pub struct ZigbeeAuDa1zbpirs {
547 pub battery_low: bool,
550 pub illuminance: f64,
552 pub illuminance_lux: f64,
554 pub linkquality: f64,
556 pub occupancy: bool,
559 pub tamper: bool,
562 pub last_seen: Option<LastSeen>,
564 pub elapsed: Option<u64>,
566}#[cfg_attr(feature = "debug", derive(Debug))]
570#[cfg_attr(feature = "clone", derive(Clone))]
571#[derive(Deserialize)]
572pub struct ZigbeeAuDa1zbr1gw {
573 pub action: ZigbeeAuDa1zbr1gwAction,
575 pub battery: f64,
577 pub linkquality: f64,
579 pub last_seen: Option<LastSeen>,
581 pub elapsed: Option<u64>,
583}#[cfg_attr(feature = "debug", derive(Debug))]
587#[cfg_attr(feature = "clone", derive(Clone))]
588#[derive(Deserialize)]
589pub struct ZigbeeAuDa1zbr2gw {
590 pub action: ZigbeeAuDa1zbr2gwAction,
592 pub battery: f64,
594 pub linkquality: f64,
596 pub last_seen: Option<LastSeen>,
598 pub elapsed: Option<u64>,
600}#[cfg_attr(feature = "debug", derive(Debug))]
604#[cfg_attr(feature = "clone", derive(Clone))]
605#[derive(Deserialize)]
606pub struct ZigbeeAuDa1zbrc {
607 pub action: ZigbeeAuDa1zbrcAction,
609 pub battery: f64,
611 pub linkquality: f64,
613 pub last_seen: Option<LastSeen>,
615 pub elapsed: Option<u64>,
617}
618#[cfg_attr(feature = "debug", derive(Debug))]
619#[cfg_attr(feature = "clone", derive(Clone))]
620#[derive(Deserialize, PartialEq)]
621pub enum ZigbeeAuDa1gsz9b27Poweronbehavior {
622 #[serde(rename = "off")]
623 Off,
624 #[serde(rename = "on")]
625 On,
626 #[serde(rename = "previous")]
627 Previous,
628 #[serde(rename = "toggle")]
629 Toggle,
630}
631#[cfg_attr(feature = "debug", derive(Debug))]
632#[cfg_attr(feature = "clone", derive(Clone))]
633#[derive(Deserialize, PartialEq)]
634pub enum ZigbeeAuDa1gsz9rgbwUhvDgscxzb269kPoweronbehavior {
635 #[serde(rename = "off")]
636 Off,
637 #[serde(rename = "on")]
638 On,
639 #[serde(rename = "previous")]
640 Previous,
641 #[serde(rename = "toggle")]
642 Toggle,
643}
644#[cfg_attr(feature = "debug", derive(Debug))]
645#[cfg_attr(feature = "clone", derive(Clone))]
646#[derive(Deserialize, PartialEq)]
647pub enum ZigbeeAuDa1guzb530Poweronbehavior {
648 #[serde(rename = "off")]
649 Off,
650 #[serde(rename = "on")]
651 On,
652 #[serde(rename = "previous")]
653 Previous,
654 #[serde(rename = "toggle")]
655 Toggle,
656}
657#[cfg_attr(feature = "debug", derive(Debug))]
658#[cfg_attr(feature = "clone", derive(Clone))]
659#[derive(Deserialize, PartialEq)]
660pub enum ZigbeeAuDa1guzbcx5Poweronbehavior {
661 #[serde(rename = "off")]
662 Off,
663 #[serde(rename = "on")]
664 On,
665 #[serde(rename = "previous")]
666 Previous,
667 #[serde(rename = "toggle")]
668 Toggle,
669}
670#[cfg_attr(feature = "debug", derive(Debug))]
671#[cfg_attr(feature = "clone", derive(Clone))]
672#[derive(Deserialize, PartialEq)]
673pub enum ZigbeeAuDa1guzbrgbwPoweronbehavior {
674 #[serde(rename = "off")]
675 Off,
676 #[serde(rename = "on")]
677 On,
678 #[serde(rename = "previous")]
679 Previous,
680 #[serde(rename = "toggle")]
681 Toggle,
682}
683#[cfg_attr(feature = "debug", derive(Debug))]
684#[cfg_attr(feature = "clone", derive(Clone))]
685#[derive(Deserialize, PartialEq)]
686pub enum ZigbeeAuDa1vg125z5e19Poweronbehavior {
687 #[serde(rename = "off")]
688 Off,
689 #[serde(rename = "on")]
690 On,
691 #[serde(rename = "previous")]
692 Previous,
693 #[serde(rename = "toggle")]
694 Toggle,
695}
696#[cfg_attr(feature = "debug", derive(Debug))]
697#[cfg_attr(feature = "clone", derive(Clone))]
698#[derive(Deserialize, PartialEq)]
699pub enum ZigbeeAuDa1vgsz5e19Poweronbehavior {
700 #[serde(rename = "off")]
701 Off,
702 #[serde(rename = "on")]
703 On,
704 #[serde(rename = "previous")]
705 Previous,
706 #[serde(rename = "toggle")]
707 Toggle,
708}
709#[cfg_attr(feature = "debug", derive(Debug))]
710#[cfg_attr(feature = "clone", derive(Clone))]
711#[derive(Deserialize, PartialEq)]
712pub enum ZigbeeAuDa1zb2wdmPoweronbehavior {
713 #[serde(rename = "off")]
714 Off,
715 #[serde(rename = "on")]
716 On,
717 #[serde(rename = "previous")]
718 Previous,
719 #[serde(rename = "toggle")]
720 Toggle,
721}
722#[cfg_attr(feature = "debug", derive(Debug))]
723#[cfg_attr(feature = "clone", derive(Clone))]
724#[derive(Deserialize, PartialEq)]
725pub enum ZigbeeAuDa1zbmpro1zxPoweronbehavior {
726 #[serde(rename = "off")]
727 Off,
728 #[serde(rename = "on")]
729 On,
730 #[serde(rename = "previous")]
731 Previous,
732 #[serde(rename = "toggle")]
733 Toggle,
734}
735#[cfg_attr(feature = "debug", derive(Debug))]
736#[cfg_attr(feature = "clone", derive(Clone))]
737#[derive(Deserialize, PartialEq)]
738pub enum ZigbeeAuDa1zbr1gwAction {
739 #[serde(rename = "brightness_step_down")]
740 BrightnessStepDown,
741 #[serde(rename = "brightness_step_up")]
742 BrightnessStepUp,
743 #[serde(rename = "color_temperature_step_down")]
744 ColorTemperatureStepDown,
745 #[serde(rename = "color_temperature_step_up")]
746 ColorTemperatureStepUp,
747 #[serde(rename = "off")]
748 Off,
749 #[serde(rename = "on")]
750 On,
751}
752#[cfg_attr(feature = "debug", derive(Debug))]
753#[cfg_attr(feature = "clone", derive(Clone))]
754#[derive(Deserialize, PartialEq)]
755pub enum ZigbeeAuDa1zbr2gwAction {
756 #[serde(rename = "brightness_step_down")]
757 BrightnessStepDown,
758 #[serde(rename = "brightness_step_up")]
759 BrightnessStepUp,
760 #[serde(rename = "color_temperature_step_down")]
761 ColorTemperatureStepDown,
762 #[serde(rename = "color_temperature_step_up")]
763 ColorTemperatureStepUp,
764 #[serde(rename = "off")]
765 Off,
766 #[serde(rename = "on")]
767 On,
768}
769#[cfg_attr(feature = "debug", derive(Debug))]
770#[cfg_attr(feature = "clone", derive(Clone))]
771#[derive(Deserialize, PartialEq)]
772pub enum ZigbeeAuDa1zbrcAction {
773 #[serde(rename = "brightness_step_down")]
774 BrightnessStepDown,
775 #[serde(rename = "brightness_step_up")]
776 BrightnessStepUp,
777 #[serde(rename = "off")]
778 Off,
779 #[serde(rename = "on")]
780 On,
781 #[serde(rename = "recall_1")]
782 Recall1,
783 #[serde(rename = "store_1")]
784 Store1,
785}
786#[cfg(all(feature = "last_seen_epoch", feature = "last_seen_iso_8601"))]
787compile_error!{"Feature last_seen epoch and iso_8601 are mutually exclusive and cannot be enabled together.
788This was done because it is a global setting in zigbee2mqtt and therefor can't see a reason both would be enabled.
789If you have a any reason to have both ways enabled please submit an issue to https://gitlab.com/seam345/zigbee2mqtt-types/-/issues"}