frequenz_microgrid/client/proto/
graph.rs1use tracing::{error, warn};
7
8impl frequenz_microgrid_component_graph::Node
9 for super::common::microgrid::electrical_components::ElectricalComponent
10{
11 fn component_id(&self) -> u64 {
12 self.id
13 }
14
15 fn category(&self) -> frequenz_microgrid_component_graph::ComponentCategory {
16 use super::common::microgrid::electrical_components as pb;
17 use frequenz_microgrid_component_graph as gr;
18
19 let category =
20 pb::ElectricalComponentCategory::try_from(self.category).unwrap_or_else(|e| {
21 error!("Error converting component category: {}", e);
22 pb::ElectricalComponentCategory::Unspecified
23 });
24
25 match category {
26 pb::ElectricalComponentCategory::Unspecified => gr::ComponentCategory::Unspecified,
27 pb::ElectricalComponentCategory::GridConnectionPoint => {
28 gr::ComponentCategory::GridConnectionPoint
29 }
30 pb::ElectricalComponentCategory::Meter => gr::ComponentCategory::Meter,
31 pb::ElectricalComponentCategory::Inverter => {
32 gr::ComponentCategory::Inverter(match self.category_specific_info {
33 Some(pb::ElectricalComponentCategorySpecificInfo { kind }) => match kind {
34 Some(pb::electrical_component_category_specific_info::Kind::Inverter(
35 inverter,
36 )) => {
37 match pb::InverterType::try_from(inverter.r#type).unwrap_or_else(|e| {
38 error!("Error converting inverter type: {}", e);
39 pb::InverterType::Unspecified
40 }) {
41 pb::InverterType::Pv => gr::InverterType::Pv,
42 pb::InverterType::Battery => gr::InverterType::Battery,
43 pb::InverterType::Hybrid => gr::InverterType::Hybrid,
44 pb::InverterType::Unspecified => gr::InverterType::Unspecified,
45 }
46 }
47 Some(_) => {
48 warn!("Unknown component specific info for inverter: {:?}", kind);
49 gr::InverterType::Unspecified
50 }
51 None => gr::InverterType::Unspecified,
52 },
53 _ => gr::InverterType::Unspecified,
54 })
55 }
56 pb::ElectricalComponentCategory::Converter => gr::ComponentCategory::Converter,
57 pb::ElectricalComponentCategory::Battery => {
58 gr::ComponentCategory::Battery(match self.category_specific_info {
59 Some(pb::ElectricalComponentCategorySpecificInfo { kind }) => match kind {
60 Some(pb::electrical_component_category_specific_info::Kind::Battery(
61 battery,
62 )) => {
63 match pb::BatteryType::try_from(battery.r#type).unwrap_or_else(|e| {
64 error!("Error converting battery type: {}", e);
65 pb::BatteryType::Unspecified
66 }) {
67 pb::BatteryType::LiIon => gr::BatteryType::LiIon,
68 pb::BatteryType::NaIon => gr::BatteryType::NaIon,
69 pb::BatteryType::Unspecified => gr::BatteryType::Unspecified,
70 }
71 }
72 Some(_) => {
73 warn!("Unknown component specific info for battery: {:?}", kind);
74 gr::BatteryType::Unspecified
75 }
76 None => gr::BatteryType::Unspecified,
77 },
78 _ => gr::BatteryType::Unspecified,
79 })
80 }
81 pb::ElectricalComponentCategory::EvCharger => {
82 gr::ComponentCategory::EvCharger(match self.category_specific_info {
83 Some(pb::ElectricalComponentCategorySpecificInfo { kind }) => match kind {
84 Some(pb::electrical_component_category_specific_info::Kind::EvCharger(
85 ev_charger,
86 )) => match pb::EvChargerType::try_from(ev_charger.r#type).unwrap_or_else(
87 |e| {
88 error!("Error converting ev charger type: {}", e);
89 pb::EvChargerType::Unspecified
90 },
91 ) {
92 pb::EvChargerType::Ac => gr::EvChargerType::Ac,
93 pb::EvChargerType::Dc => gr::EvChargerType::Dc,
94 pb::EvChargerType::Hybrid => gr::EvChargerType::Hybrid,
95 pb::EvChargerType::Unspecified => gr::EvChargerType::Unspecified,
96 },
97 Some(_) => {
98 warn!("Unknown component specific info for ev charger: {:?}", kind);
99 gr::EvChargerType::Unspecified
100 }
101 None => gr::EvChargerType::Unspecified,
102 },
103 _ => gr::EvChargerType::Unspecified,
104 })
105 }
106 pb::ElectricalComponentCategory::CryptoMiner => gr::ComponentCategory::CryptoMiner,
107 pb::ElectricalComponentCategory::Electrolyzer => gr::ComponentCategory::Electrolyzer,
108 pb::ElectricalComponentCategory::Chp => gr::ComponentCategory::Chp,
109 pb::ElectricalComponentCategory::Hvac => gr::ComponentCategory::Hvac,
110 pb::ElectricalComponentCategory::Breaker => gr::ComponentCategory::Breaker,
111 pb::ElectricalComponentCategory::Precharger => gr::ComponentCategory::Precharger,
112 pb::ElectricalComponentCategory::PowerTransformer => {
113 gr::ComponentCategory::PowerTransformer
114 }
115 pb::ElectricalComponentCategory::Plc => gr::ComponentCategory::Plc,
116 pb::ElectricalComponentCategory::StaticTransferSwitch => {
117 gr::ComponentCategory::StaticTransferSwitch
118 }
119 pb::ElectricalComponentCategory::UninterruptiblePowerSupply => {
120 gr::ComponentCategory::UninterruptiblePowerSupply
121 }
122 pb::ElectricalComponentCategory::CapacitorBank => gr::ComponentCategory::CapacitorBank,
123 pb::ElectricalComponentCategory::WindTurbine => gr::ComponentCategory::WindTurbine,
124 }
125 }
126}
127
128impl frequenz_microgrid_component_graph::Edge
129 for super::common::microgrid::electrical_components::ElectricalComponentConnection
130{
131 fn source(&self) -> u64 {
132 self.source_electrical_component_id
133 }
134
135 fn destination(&self) -> u64 {
136 self.destination_electrical_component_id
137 }
138}