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 ZigbeeBsmD300zb {
13    pub action: ZigbeeBsmD300zbAction,
15    pub battery: f64,
17    pub linkquality: f64,
19    pub voltage: f64,
21    pub last_seen: Option<LastSeen>,
23    pub elapsed: Option<u64>,
25}#[cfg_attr(feature = "debug", derive(Debug))]
29#[cfg_attr(feature = "clone", derive(Clone))]
30#[derive(Deserialize)]
31pub struct ZigbeeCsmD300zbUv2 {
32    pub battery: f64,
34    pub linkquality: f64,
36    pub people: f64,
38    pub status: ZigbeeCsmD300zbUv2Status,
40    pub voltage: f64,
42    pub last_seen: Option<LastSeen>,
44    pub elapsed: Option<u64>,
46}#[cfg_attr(feature = "debug", derive(Debug))]
50#[cfg_attr(feature = "clone", derive(Clone))]
51#[derive(Deserialize)]
52pub struct ZigbeeDlmD300z {
53    pub action: ZigbeeDlmD300zAction,
55    pub action_source_name: ZigbeeDlmD300zActionsourcename,
57    pub action_user: f64,
59    pub battery: f64,
61    pub door_state: ZigbeeDlmD300zDoorstate,
63    pub linkquality: f64,
65    pub lock_state: ZigbeeDlmD300zLockstate,
67    #[serde(deserialize_with = "zigbeedlmd300z_state_deserializer")]
70    pub state: bool,
71    pub last_seen: Option<LastSeen>,
73    pub elapsed: Option<u64>,
75}
76fn zigbeedlmd300z_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
78where
79    D: Deserializer<'de>,
80{
81    match String::deserialize(deserializer)?.as_ref() {
82        "LOCK" => Ok(true),
83        "UNLOCK" => Ok(false),
84        other => Err(de::Error::invalid_value(
85            Unexpected::Str(other),
86            &"Value expected was either LOCK or UNLOCK",
87        )),
88    }
89}
90
91#[cfg_attr(feature = "debug", derive(Debug))]
95#[cfg_attr(feature = "clone", derive(Clone))]
96#[derive(Deserialize)]
97pub struct ZigbeeDmsD300zb {
98    pub battery: f64,
100    pub linkquality: f64,
102    pub occupancy_and: bool,
105    pub occupancy_in: bool,
108    pub occupancy_or: bool,
111    pub occupancy_out: bool,
114    pub occupancy_timeout: f64,
115    pub voltage: f64,
117    pub last_seen: Option<LastSeen>,
119    pub elapsed: Option<u64>,
121}#[cfg_attr(feature = "debug", derive(Debug))]
125#[cfg_attr(feature = "clone", derive(Clone))]
126#[derive(Deserialize)]
127pub struct ZigbeeDsmD300zb {
128    pub battery: f64,
130    pub contact: bool,
133    pub linkquality: f64,
135    pub voltage: f64,
137    pub last_seen: Option<LastSeen>,
139    pub elapsed: Option<u64>,
141}#[cfg_attr(feature = "debug", derive(Debug))]
145#[cfg_attr(feature = "clone", derive(Clone))]
146#[derive(Deserialize)]
147pub struct ZigbeeIsm300z3 {
148    pub linkquality: f64,
150    pub operation_mode: ZigbeeIsm300z3Operationmode,
152    #[serde(deserialize_with = "zigbeeism300z3_state_l1_deserializer")]
155    pub state_l1: bool,
156    #[serde(deserialize_with = "zigbeeism300z3_state_l2_deserializer")]
159    pub state_l2: bool,
160    #[serde(deserialize_with = "zigbeeism300z3_state_l3_deserializer")]
163    pub state_l3: bool,
164    pub last_seen: Option<LastSeen>,
166    pub elapsed: Option<u64>,
168}
169fn zigbeeism300z3_state_l1_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
171where
172    D: Deserializer<'de>,
173{
174    match String::deserialize(deserializer)?.as_ref() {
175        "ON" => Ok(true),
176        "OFF" => Ok(false),
177        other => Err(de::Error::invalid_value(
178            Unexpected::Str(other),
179            &"Value expected was either ON or OFF",
180        )),
181    }
182}
183
184
185fn zigbeeism300z3_state_l2_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
187where
188    D: Deserializer<'de>,
189{
190    match String::deserialize(deserializer)?.as_ref() {
191        "ON" => Ok(true),
192        "OFF" => Ok(false),
193        other => Err(de::Error::invalid_value(
194            Unexpected::Str(other),
195            &"Value expected was either ON or OFF",
196        )),
197    }
198}
199
200
201fn zigbeeism300z3_state_l3_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
203where
204    D: Deserializer<'de>,
205{
206    match String::deserialize(deserializer)?.as_ref() {
207        "ON" => Ok(true),
208        "OFF" => Ok(false),
209        other => Err(de::Error::invalid_value(
210            Unexpected::Str(other),
211            &"Value expected was either ON or OFF",
212        )),
213    }
214}
215
216#[cfg_attr(feature = "debug", derive(Debug))]
220#[cfg_attr(feature = "clone", derive(Clone))]
221#[derive(Deserialize)]
222pub struct ZigbeeMsmD300zb {
223    pub action: ZigbeeMsmD300zbAction,
225    pub battery: f64,
227    pub linkquality: f64,
229    pub voltage: f64,
231    pub last_seen: Option<LastSeen>,
233    pub elapsed: Option<u64>,
235}#[cfg_attr(feature = "debug", derive(Debug))]
239#[cfg_attr(feature = "clone", derive(Clone))]
240#[derive(Deserialize)]
241pub struct ZigbeePmmD300z1 {
242    pub energy: f64,
244    pub linkquality: f64,
246    pub power: f64,
248    pub last_seen: Option<LastSeen>,
250    pub elapsed: Option<u64>,
252}#[cfg_attr(feature = "debug", derive(Debug))]
256#[cfg_attr(feature = "clone", derive(Clone))]
257#[derive(Deserialize)]
258pub struct ZigbeePmmD300z2 {
259    pub ac_frequency: f64,
261    pub current: f64,
263    pub energy: f64,
265    pub linkquality: f64,
267    pub power: f64,
269    pub power_factor: f64,
271    pub temperature: f64,
273    pub voltage: f64,
275    pub last_seen: Option<LastSeen>,
277    pub elapsed: Option<u64>,
279}#[cfg_attr(feature = "debug", derive(Debug))]
283#[cfg_attr(feature = "clone", derive(Clone))]
284#[derive(Deserialize)]
285pub struct ZigbeePmmD300z3 {
286    pub ac_frequency: f64,
288    pub current: f64,
290    pub energy: f64,
292    pub linkquality: f64,
294    pub power: f64,
296    pub power_factor: f64,
298    pub temperature: f64,
300    pub voltage: f64,
302    pub last_seen: Option<LastSeen>,
304    pub elapsed: Option<u64>,
306}#[cfg_attr(feature = "debug", derive(Debug))]
310#[cfg_attr(feature = "clone", derive(Clone))]
311#[derive(Deserialize)]
312pub struct ZigbeeSbm300z1 {
313    pub linkquality: f64,
315    pub power_on_behavior: ZigbeeSbm300z1Poweronbehavior,
317    #[serde(deserialize_with = "zigbeesbm300z1_state_deserializer")]
320    pub state: bool,
321    pub last_seen: Option<LastSeen>,
323    pub elapsed: Option<u64>,
325}
326fn zigbeesbm300z1_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
328where
329    D: Deserializer<'de>,
330{
331    match String::deserialize(deserializer)?.as_ref() {
332        "ON" => Ok(true),
333        "OFF" => Ok(false),
334        other => Err(de::Error::invalid_value(
335            Unexpected::Str(other),
336            &"Value expected was either ON or OFF",
337        )),
338    }
339}
340
341#[cfg_attr(feature = "debug", derive(Debug))]
345#[cfg_attr(feature = "clone", derive(Clone))]
346#[derive(Deserialize)]
347pub struct ZigbeeSbm300z2 {
348    pub linkquality: f64,
350    #[serde(deserialize_with = "zigbeesbm300z2_state_bottom_deserializer")]
353    pub state_bottom: bool,
354    #[serde(deserialize_with = "zigbeesbm300z2_state_top_deserializer")]
357    pub state_top: bool,
358    pub last_seen: Option<LastSeen>,
360    pub elapsed: Option<u64>,
362}
363fn zigbeesbm300z2_state_bottom_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
365where
366    D: Deserializer<'de>,
367{
368    match String::deserialize(deserializer)?.as_ref() {
369        "ON" => Ok(true),
370        "OFF" => Ok(false),
371        other => Err(de::Error::invalid_value(
372            Unexpected::Str(other),
373            &"Value expected was either ON or OFF",
374        )),
375    }
376}
377
378
379fn zigbeesbm300z2_state_top_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
381where
382    D: Deserializer<'de>,
383{
384    match String::deserialize(deserializer)?.as_ref() {
385        "ON" => Ok(true),
386        "OFF" => Ok(false),
387        other => Err(de::Error::invalid_value(
388            Unexpected::Str(other),
389            &"Value expected was either ON or OFF",
390        )),
391    }
392}
393
394#[cfg_attr(feature = "debug", derive(Debug))]
398#[cfg_attr(feature = "clone", derive(Clone))]
399#[derive(Deserialize)]
400pub struct ZigbeeSbm300z3 {
401    pub linkquality: f64,
403    #[serde(deserialize_with = "zigbeesbm300z3_state_bottom_deserializer")]
406    pub state_bottom: bool,
407    #[serde(deserialize_with = "zigbeesbm300z3_state_center_deserializer")]
410    pub state_center: bool,
411    #[serde(deserialize_with = "zigbeesbm300z3_state_top_deserializer")]
414    pub state_top: bool,
415    pub last_seen: Option<LastSeen>,
417    pub elapsed: Option<u64>,
419}
420fn zigbeesbm300z3_state_bottom_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
422where
423    D: Deserializer<'de>,
424{
425    match String::deserialize(deserializer)?.as_ref() {
426        "ON" => Ok(true),
427        "OFF" => Ok(false),
428        other => Err(de::Error::invalid_value(
429            Unexpected::Str(other),
430            &"Value expected was either ON or OFF",
431        )),
432    }
433}
434
435
436fn zigbeesbm300z3_state_center_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
438where
439    D: Deserializer<'de>,
440{
441    match String::deserialize(deserializer)?.as_ref() {
442        "ON" => Ok(true),
443        "OFF" => Ok(false),
444        other => Err(de::Error::invalid_value(
445            Unexpected::Str(other),
446            &"Value expected was either ON or OFF",
447        )),
448    }
449}
450
451
452fn zigbeesbm300z3_state_top_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
454where
455    D: Deserializer<'de>,
456{
457    match String::deserialize(deserializer)?.as_ref() {
458        "ON" => Ok(true),
459        "OFF" => Ok(false),
460        other => Err(de::Error::invalid_value(
461            Unexpected::Str(other),
462            &"Value expected was either ON or OFF",
463        )),
464    }
465}
466
467#[cfg_attr(feature = "debug", derive(Debug))]
471#[cfg_attr(feature = "clone", derive(Clone))]
472#[derive(Deserialize)]
473pub struct ZigbeeSbm300z4 {
474    pub linkquality: f64,
476    #[serde(deserialize_with = "zigbeesbm300z4_state_bottom_left_deserializer")]
479    pub state_bottom_left: bool,
480    #[serde(deserialize_with = "zigbeesbm300z4_state_bottom_right_deserializer")]
483    pub state_bottom_right: bool,
484    #[serde(deserialize_with = "zigbeesbm300z4_state_top_left_deserializer")]
487    pub state_top_left: bool,
488    #[serde(deserialize_with = "zigbeesbm300z4_state_top_right_deserializer")]
491    pub state_top_right: bool,
492    pub last_seen: Option<LastSeen>,
494    pub elapsed: Option<u64>,
496}
497fn zigbeesbm300z4_state_bottom_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
499where
500    D: Deserializer<'de>,
501{
502    match String::deserialize(deserializer)?.as_ref() {
503        "ON" => Ok(true),
504        "OFF" => Ok(false),
505        other => Err(de::Error::invalid_value(
506            Unexpected::Str(other),
507            &"Value expected was either ON or OFF",
508        )),
509    }
510}
511
512
513fn zigbeesbm300z4_state_bottom_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
515where
516    D: Deserializer<'de>,
517{
518    match String::deserialize(deserializer)?.as_ref() {
519        "ON" => Ok(true),
520        "OFF" => Ok(false),
521        other => Err(de::Error::invalid_value(
522            Unexpected::Str(other),
523            &"Value expected was either ON or OFF",
524        )),
525    }
526}
527
528
529fn zigbeesbm300z4_state_top_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
531where
532    D: Deserializer<'de>,
533{
534    match String::deserialize(deserializer)?.as_ref() {
535        "ON" => Ok(true),
536        "OFF" => Ok(false),
537        other => Err(de::Error::invalid_value(
538            Unexpected::Str(other),
539            &"Value expected was either ON or OFF",
540        )),
541    }
542}
543
544
545fn zigbeesbm300z4_state_top_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
547where
548    D: Deserializer<'de>,
549{
550    match String::deserialize(deserializer)?.as_ref() {
551        "ON" => Ok(true),
552        "OFF" => Ok(false),
553        other => Err(de::Error::invalid_value(
554            Unexpected::Str(other),
555            &"Value expected was either ON or OFF",
556        )),
557    }
558}
559
560#[cfg_attr(feature = "debug", derive(Debug))]
564#[cfg_attr(feature = "clone", derive(Clone))]
565#[derive(Deserialize)]
566pub struct ZigbeeSbm300z5 {
567    pub linkquality: f64,
569    #[serde(deserialize_with = "zigbeesbm300z5_state_bottom_left_deserializer")]
572    pub state_bottom_left: bool,
573    #[serde(deserialize_with = "zigbeesbm300z5_state_bottom_right_deserializer")]
576    pub state_bottom_right: bool,
577    #[serde(deserialize_with = "zigbeesbm300z5_state_center_left_deserializer")]
580    pub state_center_left: bool,
581    #[serde(deserialize_with = "zigbeesbm300z5_state_top_left_deserializer")]
584    pub state_top_left: bool,
585    #[serde(deserialize_with = "zigbeesbm300z5_state_top_right_deserializer")]
588    pub state_top_right: bool,
589    pub last_seen: Option<LastSeen>,
591    pub elapsed: Option<u64>,
593}
594fn zigbeesbm300z5_state_bottom_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
596where
597    D: Deserializer<'de>,
598{
599    match String::deserialize(deserializer)?.as_ref() {
600        "ON" => Ok(true),
601        "OFF" => Ok(false),
602        other => Err(de::Error::invalid_value(
603            Unexpected::Str(other),
604            &"Value expected was either ON or OFF",
605        )),
606    }
607}
608
609
610fn zigbeesbm300z5_state_bottom_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
612where
613    D: Deserializer<'de>,
614{
615    match String::deserialize(deserializer)?.as_ref() {
616        "ON" => Ok(true),
617        "OFF" => Ok(false),
618        other => Err(de::Error::invalid_value(
619            Unexpected::Str(other),
620            &"Value expected was either ON or OFF",
621        )),
622    }
623}
624
625
626fn zigbeesbm300z5_state_center_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
628where
629    D: Deserializer<'de>,
630{
631    match String::deserialize(deserializer)?.as_ref() {
632        "ON" => Ok(true),
633        "OFF" => Ok(false),
634        other => Err(de::Error::invalid_value(
635            Unexpected::Str(other),
636            &"Value expected was either ON or OFF",
637        )),
638    }
639}
640
641
642fn zigbeesbm300z5_state_top_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
644where
645    D: Deserializer<'de>,
646{
647    match String::deserialize(deserializer)?.as_ref() {
648        "ON" => Ok(true),
649        "OFF" => Ok(false),
650        other => Err(de::Error::invalid_value(
651            Unexpected::Str(other),
652            &"Value expected was either ON or OFF",
653        )),
654    }
655}
656
657
658fn zigbeesbm300z5_state_top_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
660where
661    D: Deserializer<'de>,
662{
663    match String::deserialize(deserializer)?.as_ref() {
664        "ON" => Ok(true),
665        "OFF" => Ok(false),
666        other => Err(de::Error::invalid_value(
667            Unexpected::Str(other),
668            &"Value expected was either ON or OFF",
669        )),
670    }
671}
672
673#[cfg_attr(feature = "debug", derive(Debug))]
677#[cfg_attr(feature = "clone", derive(Clone))]
678#[derive(Deserialize)]
679pub struct ZigbeeSbm300z6 {
680    pub linkquality: f64,
682    #[serde(deserialize_with = "zigbeesbm300z6_state_bottom_left_deserializer")]
685    pub state_bottom_left: bool,
686    #[serde(deserialize_with = "zigbeesbm300z6_state_bottom_right_deserializer")]
689    pub state_bottom_right: bool,
690    #[serde(deserialize_with = "zigbeesbm300z6_state_center_left_deserializer")]
693    pub state_center_left: bool,
694    #[serde(deserialize_with = "zigbeesbm300z6_state_center_right_deserializer")]
697    pub state_center_right: bool,
698    #[serde(deserialize_with = "zigbeesbm300z6_state_top_left_deserializer")]
701    pub state_top_left: bool,
702    #[serde(deserialize_with = "zigbeesbm300z6_state_top_right_deserializer")]
705    pub state_top_right: bool,
706    pub last_seen: Option<LastSeen>,
708    pub elapsed: Option<u64>,
710}
711fn zigbeesbm300z6_state_bottom_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
713where
714    D: Deserializer<'de>,
715{
716    match String::deserialize(deserializer)?.as_ref() {
717        "ON" => Ok(true),
718        "OFF" => Ok(false),
719        other => Err(de::Error::invalid_value(
720            Unexpected::Str(other),
721            &"Value expected was either ON or OFF",
722        )),
723    }
724}
725
726
727fn zigbeesbm300z6_state_bottom_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
729where
730    D: Deserializer<'de>,
731{
732    match String::deserialize(deserializer)?.as_ref() {
733        "ON" => Ok(true),
734        "OFF" => Ok(false),
735        other => Err(de::Error::invalid_value(
736            Unexpected::Str(other),
737            &"Value expected was either ON or OFF",
738        )),
739    }
740}
741
742
743fn zigbeesbm300z6_state_center_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
745where
746    D: Deserializer<'de>,
747{
748    match String::deserialize(deserializer)?.as_ref() {
749        "ON" => Ok(true),
750        "OFF" => Ok(false),
751        other => Err(de::Error::invalid_value(
752            Unexpected::Str(other),
753            &"Value expected was either ON or OFF",
754        )),
755    }
756}
757
758
759fn zigbeesbm300z6_state_center_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
761where
762    D: Deserializer<'de>,
763{
764    match String::deserialize(deserializer)?.as_ref() {
765        "ON" => Ok(true),
766        "OFF" => Ok(false),
767        other => Err(de::Error::invalid_value(
768            Unexpected::Str(other),
769            &"Value expected was either ON or OFF",
770        )),
771    }
772}
773
774
775fn zigbeesbm300z6_state_top_left_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
777where
778    D: Deserializer<'de>,
779{
780    match String::deserialize(deserializer)?.as_ref() {
781        "ON" => Ok(true),
782        "OFF" => Ok(false),
783        other => Err(de::Error::invalid_value(
784            Unexpected::Str(other),
785            &"Value expected was either ON or OFF",
786        )),
787    }
788}
789
790
791fn zigbeesbm300z6_state_top_right_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
793where
794    D: Deserializer<'de>,
795{
796    match String::deserialize(deserializer)?.as_ref() {
797        "ON" => Ok(true),
798        "OFF" => Ok(false),
799        other => Err(de::Error::invalid_value(
800            Unexpected::Str(other),
801            &"Value expected was either ON or OFF",
802        )),
803    }
804}
805
806#[cfg_attr(feature = "debug", derive(Debug))]
810#[cfg_attr(feature = "clone", derive(Clone))]
811#[derive(Deserialize)]
812pub struct ZigbeeSbm300zb1 {
813    pub action: ZigbeeSbm300zb1Action,
815    pub battery: f64,
817    pub linkquality: f64,
819    pub voltage: f64,
821    pub last_seen: Option<LastSeen>,
823    pub elapsed: Option<u64>,
825}#[cfg_attr(feature = "debug", derive(Debug))]
829#[cfg_attr(feature = "clone", derive(Clone))]
830#[derive(Deserialize)]
831pub struct ZigbeeSbm300zb2 {
832    pub action: ZigbeeSbm300zb2Action,
834    pub battery: f64,
836    pub linkquality: f64,
838    pub voltage: f64,
840    pub last_seen: Option<LastSeen>,
842    pub elapsed: Option<u64>,
844}#[cfg_attr(feature = "debug", derive(Debug))]
848#[cfg_attr(feature = "clone", derive(Clone))]
849#[derive(Deserialize)]
850pub struct ZigbeeSbm300zb3 {
851    pub action: ZigbeeSbm300zb3Action,
853    pub battery: f64,
855    pub linkquality: f64,
857    pub voltage: f64,
859    pub last_seen: Option<LastSeen>,
861    pub elapsed: Option<u64>,
863}#[cfg_attr(feature = "debug", derive(Debug))]
867#[cfg_attr(feature = "clone", derive(Clone))]
868#[derive(Deserialize)]
869pub struct ZigbeeSbm300zb4 {
870    pub action: ZigbeeSbm300zb4Action,
872    pub battery: f64,
874    pub linkquality: f64,
876    pub voltage: f64,
878    pub last_seen: Option<LastSeen>,
880    pub elapsed: Option<u64>,
882}#[cfg_attr(feature = "debug", derive(Debug))]
886#[cfg_attr(feature = "clone", derive(Clone))]
887#[derive(Deserialize)]
888pub struct ZigbeeSbm300zc1 {
889    pub action: ZigbeeSbm300zc1Action,
891    pub battery: f64,
893    pub linkquality: f64,
895    pub voltage: f64,
897    pub last_seen: Option<LastSeen>,
899    pub elapsed: Option<u64>,
901}#[cfg_attr(feature = "debug", derive(Debug))]
905#[cfg_attr(feature = "clone", derive(Clone))]
906#[derive(Deserialize)]
907pub struct ZigbeeSbm300zc2 {
908    pub action: ZigbeeSbm300zc2Action,
910    pub battery: f64,
912    pub linkquality: f64,
914    pub voltage: f64,
916    pub last_seen: Option<LastSeen>,
918    pub elapsed: Option<u64>,
920}#[cfg_attr(feature = "debug", derive(Debug))]
924#[cfg_attr(feature = "clone", derive(Clone))]
925#[derive(Deserialize)]
926pub struct ZigbeeSbm300zc3 {
927    pub action: ZigbeeSbm300zc3Action,
929    pub battery: f64,
931    pub linkquality: f64,
933    pub voltage: f64,
935    pub last_seen: Option<LastSeen>,
937    pub elapsed: Option<u64>,
939}#[cfg_attr(feature = "debug", derive(Debug))]
943#[cfg_attr(feature = "clone", derive(Clone))]
944#[derive(Deserialize)]
945pub struct ZigbeeSbm300zc4 {
946    pub action: ZigbeeSbm300zc4Action,
948    pub battery: f64,
950    pub linkquality: f64,
952    pub voltage: f64,
954    pub last_seen: Option<LastSeen>,
956    pub elapsed: Option<u64>,
958}#[cfg_attr(feature = "debug", derive(Debug))]
962#[cfg_attr(feature = "clone", derive(Clone))]
963#[derive(Deserialize)]
964pub struct ZigbeeTsmD300zb {
965    pub battery: f64,
967    pub humidity: f64,
969    pub linkquality: f64,
971    pub temperature: f64,
973    pub voltage: f64,
975    pub last_seen: Option<LastSeen>,
977    pub elapsed: Option<u64>,
979}#[cfg_attr(feature = "debug", derive(Debug))]
983#[cfg_attr(feature = "clone", derive(Clone))]
984#[derive(Deserialize)]
985pub struct ZigbeeUsmD300zb {
986    pub battery: f64,
988    pub humidity: f64,
990    pub illuminance: f64,
992    pub linkquality: f64,
994    pub occupancy: bool,
997    pub temperature: f64,
999    pub voltage: f64,
1001    pub last_seen: Option<LastSeen>,
1003    pub elapsed: Option<u64>,
1005}
1006#[cfg_attr(feature = "debug", derive(Debug))]
1007#[cfg_attr(feature = "clone", derive(Clone))]
1008#[derive(Deserialize, PartialEq)]
1009pub enum ZigbeeBsmD300zbAction {
1010    #[serde(rename = "double")]
1011    Double,
1012    #[serde(rename = "long")]
1013    Long,
1014    #[serde(rename = "single")]
1015    Single,
1016}
1017#[cfg_attr(feature = "debug", derive(Debug))]
1018#[cfg_attr(feature = "clone", derive(Clone))]
1019#[derive(Deserialize, PartialEq)]
1020pub enum ZigbeeCsmD300zbUv2Status {
1021    #[serde(rename = "idle")]
1022    Idle,
1023    #[serde(rename = "in")]
1024    In,
1025    #[serde(rename = "out")]
1026    Out,
1027}
1028#[cfg_attr(feature = "debug", derive(Debug))]
1029#[cfg_attr(feature = "clone", derive(Clone))]
1030#[derive(Deserialize, PartialEq)]
1031pub enum ZigbeeDlmD300zAction {
1032    #[serde(rename = "auto_lock")]
1033    AutoLock,
1034    #[serde(rename = "key_lock")]
1035    KeyLock,
1036    #[serde(rename = "key_unlock")]
1037    KeyUnlock,
1038    #[serde(rename = "lock")]
1039    Lock,
1040    #[serde(rename = "lock_failure_invalid_pin_or_id")]
1041    LockFailureInvalidPinOrId,
1042    #[serde(rename = "lock_failure_invalid_schedule")]
1043    LockFailureInvalidSchedule,
1044    #[serde(rename = "manual_lock")]
1045    ManualLock,
1046    #[serde(rename = "manual_unlock")]
1047    ManualUnlock,
1048    #[serde(rename = "non_access_user_operational_event")]
1049    NonAccessUserOperationalEvent,
1050    #[serde(rename = "one_touch_lock")]
1051    OneTouchLock,
1052    #[serde(rename = "schedule_lock")]
1053    ScheduleLock,
1054    #[serde(rename = "schedule_unlock")]
1055    ScheduleUnlock,
1056    #[serde(rename = "unknown")]
1057    Unknown,
1058    #[serde(rename = "unlock")]
1059    Unlock,
1060    #[serde(rename = "unlock_failure_invalid_pin_or_id")]
1061    UnlockFailureInvalidPinOrId,
1062    #[serde(rename = "unlock_failure_invalid_schedule")]
1063    UnlockFailureInvalidSchedule,
1064}
1065#[cfg_attr(feature = "debug", derive(Debug))]
1066#[cfg_attr(feature = "clone", derive(Clone))]
1067#[derive(Deserialize, PartialEq)]
1068pub enum ZigbeeDlmD300zActionsourcename {
1069    #[serde(rename = "keypad")]
1070    Keypad,
1071    #[serde(rename = "manual")]
1072    Manual,
1073    #[serde(rename = "rf")]
1074    Rf,
1075    #[serde(rename = "rfid")]
1076    Rfid,
1077}
1078#[cfg_attr(feature = "debug", derive(Debug))]
1079#[cfg_attr(feature = "clone", derive(Clone))]
1080#[derive(Deserialize, PartialEq)]
1081pub enum ZigbeeDlmD300zDoorstate {
1082    #[serde(rename = "closed")]
1083    Closed,
1084    #[serde(rename = "open")]
1085    Open,
1086}
1087#[cfg_attr(feature = "debug", derive(Debug))]
1088#[cfg_attr(feature = "clone", derive(Clone))]
1089#[derive(Deserialize, PartialEq)]
1090pub enum ZigbeeDlmD300zLockstate {
1091    #[serde(rename = "locked")]
1092    Locked,
1093    #[serde(rename = "not_fully_locked")]
1094    NotFullyLocked,
1095    #[serde(rename = "unlocked")]
1096    Unlocked,
1097}
1098#[cfg_attr(feature = "debug", derive(Debug))]
1099#[cfg_attr(feature = "clone", derive(Clone))]
1100#[derive(Deserialize, PartialEq)]
1101pub enum ZigbeeIsm300z3Operationmode {
1102    #[serde(rename = "auto")]
1103    Auto,
1104    #[serde(rename = "latch")]
1105    Latch,
1106    #[serde(rename = "push")]
1107    Push,
1108}
1109#[cfg_attr(feature = "debug", derive(Debug))]
1110#[cfg_attr(feature = "clone", derive(Clone))]
1111#[derive(Deserialize, PartialEq)]
1112pub enum ZigbeeMsmD300zbAction {
1113    #[serde(rename = "1_double")]
1114    Number1Double,
1115    #[serde(rename = "1_long")]
1116    Number1Long,
1117    #[serde(rename = "1_single")]
1118    Number1Single,
1119    #[serde(rename = "2_double")]
1120    Number2Double,
1121    #[serde(rename = "2_long")]
1122    Number2Long,
1123    #[serde(rename = "2_single")]
1124    Number2Single,
1125    #[serde(rename = "3_double")]
1126    Number3Double,
1127    #[serde(rename = "3_long")]
1128    Number3Long,
1129    #[serde(rename = "3_single")]
1130    Number3Single,
1131    #[serde(rename = "4_double")]
1132    Number4Double,
1133    #[serde(rename = "4_long")]
1134    Number4Long,
1135    #[serde(rename = "4_single")]
1136    Number4Single,
1137}
1138#[cfg_attr(feature = "debug", derive(Debug))]
1139#[cfg_attr(feature = "clone", derive(Clone))]
1140#[derive(Deserialize, PartialEq)]
1141pub enum ZigbeeSbm300z1Poweronbehavior {
1142    #[serde(rename = "off")]
1143    Off,
1144    #[serde(rename = "on")]
1145    On,
1146    #[serde(rename = "previous")]
1147    Previous,
1148    #[serde(rename = "toggle")]
1149    Toggle,
1150}
1151#[cfg_attr(feature = "debug", derive(Debug))]
1152#[cfg_attr(feature = "clone", derive(Clone))]
1153#[derive(Deserialize, PartialEq)]
1154pub enum ZigbeeSbm300zb1Action {
1155    #[serde(rename = "double")]
1156    Double,
1157    #[serde(rename = "long")]
1158    Long,
1159    #[serde(rename = "single")]
1160    Single,
1161}
1162#[cfg_attr(feature = "debug", derive(Debug))]
1163#[cfg_attr(feature = "clone", derive(Clone))]
1164#[derive(Deserialize, PartialEq)]
1165pub enum ZigbeeSbm300zb2Action {
1166    #[serde(rename = "1_double")]
1167    Number1Double,
1168    #[serde(rename = "1_long")]
1169    Number1Long,
1170    #[serde(rename = "1_single")]
1171    Number1Single,
1172    #[serde(rename = "2_double")]
1173    Number2Double,
1174    #[serde(rename = "2_long")]
1175    Number2Long,
1176    #[serde(rename = "2_single")]
1177    Number2Single,
1178}
1179#[cfg_attr(feature = "debug", derive(Debug))]
1180#[cfg_attr(feature = "clone", derive(Clone))]
1181#[derive(Deserialize, PartialEq)]
1182pub enum ZigbeeSbm300zb3Action {
1183    #[serde(rename = "1_double")]
1184    Number1Double,
1185    #[serde(rename = "1_long")]
1186    Number1Long,
1187    #[serde(rename = "1_single")]
1188    Number1Single,
1189    #[serde(rename = "2_double")]
1190    Number2Double,
1191    #[serde(rename = "2_long")]
1192    Number2Long,
1193    #[serde(rename = "2_single")]
1194    Number2Single,
1195    #[serde(rename = "3_double")]
1196    Number3Double,
1197    #[serde(rename = "3_long")]
1198    Number3Long,
1199    #[serde(rename = "3_single")]
1200    Number3Single,
1201}
1202#[cfg_attr(feature = "debug", derive(Debug))]
1203#[cfg_attr(feature = "clone", derive(Clone))]
1204#[derive(Deserialize, PartialEq)]
1205pub enum ZigbeeSbm300zb4Action {
1206    #[serde(rename = "1_double")]
1207    Number1Double,
1208    #[serde(rename = "1_long")]
1209    Number1Long,
1210    #[serde(rename = "1_single")]
1211    Number1Single,
1212    #[serde(rename = "2_double")]
1213    Number2Double,
1214    #[serde(rename = "2_long")]
1215    Number2Long,
1216    #[serde(rename = "2_single")]
1217    Number2Single,
1218    #[serde(rename = "3_double")]
1219    Number3Double,
1220    #[serde(rename = "3_long")]
1221    Number3Long,
1222    #[serde(rename = "3_single")]
1223    Number3Single,
1224    #[serde(rename = "4_double")]
1225    Number4Double,
1226    #[serde(rename = "4_long")]
1227    Number4Long,
1228    #[serde(rename = "4_single")]
1229    Number4Single,
1230}
1231#[cfg_attr(feature = "debug", derive(Debug))]
1232#[cfg_attr(feature = "clone", derive(Clone))]
1233#[derive(Deserialize, PartialEq)]
1234pub enum ZigbeeSbm300zc1Action {
1235    #[serde(rename = "double")]
1236    Double,
1237    #[serde(rename = "long")]
1238    Long,
1239    #[serde(rename = "single")]
1240    Single,
1241}
1242#[cfg_attr(feature = "debug", derive(Debug))]
1243#[cfg_attr(feature = "clone", derive(Clone))]
1244#[derive(Deserialize, PartialEq)]
1245pub enum ZigbeeSbm300zc2Action {
1246    #[serde(rename = "1_double")]
1247    Number1Double,
1248    #[serde(rename = "1_long")]
1249    Number1Long,
1250    #[serde(rename = "1_single")]
1251    Number1Single,
1252    #[serde(rename = "2_double")]
1253    Number2Double,
1254    #[serde(rename = "2_long")]
1255    Number2Long,
1256    #[serde(rename = "2_single")]
1257    Number2Single,
1258}
1259#[cfg_attr(feature = "debug", derive(Debug))]
1260#[cfg_attr(feature = "clone", derive(Clone))]
1261#[derive(Deserialize, PartialEq)]
1262pub enum ZigbeeSbm300zc3Action {
1263    #[serde(rename = "1_double")]
1264    Number1Double,
1265    #[serde(rename = "1_long")]
1266    Number1Long,
1267    #[serde(rename = "1_single")]
1268    Number1Single,
1269    #[serde(rename = "2_double")]
1270    Number2Double,
1271    #[serde(rename = "2_long")]
1272    Number2Long,
1273    #[serde(rename = "2_single")]
1274    Number2Single,
1275    #[serde(rename = "3_double")]
1276    Number3Double,
1277    #[serde(rename = "3_long")]
1278    Number3Long,
1279    #[serde(rename = "3_single")]
1280    Number3Single,
1281}
1282#[cfg_attr(feature = "debug", derive(Debug))]
1283#[cfg_attr(feature = "clone", derive(Clone))]
1284#[derive(Deserialize, PartialEq)]
1285pub enum ZigbeeSbm300zc4Action {
1286    #[serde(rename = "1_double")]
1287    Number1Double,
1288    #[serde(rename = "1_long")]
1289    Number1Long,
1290    #[serde(rename = "1_single")]
1291    Number1Single,
1292    #[serde(rename = "2_double")]
1293    Number2Double,
1294    #[serde(rename = "2_long")]
1295    Number2Long,
1296    #[serde(rename = "2_single")]
1297    Number2Single,
1298    #[serde(rename = "3_double")]
1299    Number3Double,
1300    #[serde(rename = "3_long")]
1301    Number3Long,
1302    #[serde(rename = "3_single")]
1303    Number3Single,
1304    #[serde(rename = "4_double")]
1305    Number4Double,
1306    #[serde(rename = "4_long")]
1307    Number4Long,
1308    #[serde(rename = "4_single")]
1309    Number4Single,
1310}
1311#[cfg(all(feature = "last_seen_epoch", feature = "last_seen_iso_8601"))]
1312compile_error!{"Feature last_seen epoch and iso_8601 are mutually exclusive and cannot be enabled together.
1313This was done because it is a global setting in zigbee2mqtt and therefor can't see a reason both would be enabled.
1314If you have a any reason to have both ways enabled please submit an issue to https://gitlab.com/seam345/zigbee2mqtt-types/-/issues"}