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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
// SPDX-FileCopyrightText: 2021 Open Energy Solutions Inc
//
// SPDX-License-Identifier: Apache-2.0

include!(concat!(env!("OUT_DIR"), "/openfmb.microgrid.rs"));

use std::str::FromStr;

impl FromStr for microgrid_control::ControlMessage {
    type Err = ();

    fn from_str(input: &str) -> Result<microgrid_control::ControlMessage, Self::Err> {
        match input {
            "ResetDevices" => Ok(microgrid_control::ControlMessage::ResetDevices(
                "".to_string(),
            )),
            "Shutdown" => Ok(microgrid_control::ControlMessage::Shutdown("".to_string())),
            "InitiateIsland" => Ok(microgrid_control::ControlMessage::InitiateIsland(
                "".to_string(),
            )),
            "InitiateGridConnect" => Ok(microgrid_control::ControlMessage::InitiateGridConnect(
                "".to_string(),
            )),
            "EnableNetZero" => Ok(microgrid_control::ControlMessage::EnableNetZero(
                "".to_string(),
            )),
            "DisableNetZero" => Ok(microgrid_control::ControlMessage::DisableNetZero(
                "".to_string(),
            )),
            "PccControl" => Ok(microgrid_control::ControlMessage::PccControl(
                "".to_string(),
            )),
            _ => Err(()),
        }
    }
}

impl FromStr for device_control::DeviceControlMessage {
    type Err = ();

    fn from_str(input: &str) -> Result<device_control::DeviceControlMessage, Self::Err> {
        match input {
            "EnableSolarInverter" => Ok(device_control::DeviceControlMessage::EnableSolarInverter),
            "DisableSolarInverter" => {
                Ok(device_control::DeviceControlMessage::DisableSolarInverter)
            }
            "EnableLoadbank" => Ok(device_control::DeviceControlMessage::EnableLoadbank),
            "DisableLoadbank" => Ok(device_control::DeviceControlMessage::DisableLoadbank),
            "EssStart" => Ok(device_control::DeviceControlMessage::EssStart),
            "EssDischarge" => Ok(device_control::DeviceControlMessage::EssDischarge),
            "EssSocManage" => Ok(device_control::DeviceControlMessage::EssSocManage),
            "EssSocLimits" => Ok(device_control::DeviceControlMessage::EssSocLimits),
            "EssStop" => Ok(device_control::DeviceControlMessage::EssStop),
            "GeneratorOn" => Ok(device_control::DeviceControlMessage::GeneratorOn),
            "GeneratorDisabled" => Ok(device_control::DeviceControlMessage::GeneratorDisabled),
            "GeneratorEnabled" => Ok(device_control::DeviceControlMessage::GeneratorEnabled),
            "GeneratorOff" => Ok(device_control::DeviceControlMessage::GeneratorOff),
            "SwitchOneOpen" => Ok(device_control::DeviceControlMessage::SwitchOneOpen),
            "SwitchOneClosed" => Ok(device_control::DeviceControlMessage::SwitchOneClosed),
            "SwitchTwoOpen" => Ok(device_control::DeviceControlMessage::SwitchTwoOpen),
            "SwitchTwoClosed" => Ok(device_control::DeviceControlMessage::SwitchTwoClosed),
            "BreakerThreeOpen" => Ok(device_control::DeviceControlMessage::BreakerThreeOpen),
            "BreakerThreeClosed" => Ok(device_control::DeviceControlMessage::BreakerThreeClosed),
            "SwitchFourOpen" => Ok(device_control::DeviceControlMessage::SwitchFourOpen),
            "SwitchFourClosed" => Ok(device_control::DeviceControlMessage::SwitchFourClosed),
            "ResetSwitchOne" => Ok(device_control::DeviceControlMessage::ResetSwitchOne),
            "ResetSwitchTwo" => Ok(device_control::DeviceControlMessage::ResetSwitchTwo),
            "ResetSwitchThree" => Ok(device_control::DeviceControlMessage::ResetSwitchThree),
            "ResetSwitchFour" => Ok(device_control::DeviceControlMessage::ResetSwitchFour),
            "ResetBreakerThree" => Ok(device_control::DeviceControlMessage::ResetBreakerThree),
            "ResetEss" => Ok(device_control::DeviceControlMessage::ResetEss),
            "ResetSolar" => Ok(device_control::DeviceControlMessage::ResetSolar),
            "ResetLoadbank" => Ok(device_control::DeviceControlMessage::ResetLoadbank),
            "SolarOn" => Ok(device_control::DeviceControlMessage::SolarOn),
            "SolarOff" => Ok(device_control::DeviceControlMessage::SolarOff),
            _ => Err(()),
        }
    }
}

impl FromStr for hmi_control::ControlType {
    type Err = ();

    fn from_str(input: &str) -> Result<hmi_control::ControlType, Self::Err> {
        match input {
            "ToggleEnvironment" => Ok(hmi_control::ControlType::ToggleEnvironment),
            _ => Err(()),
        }
    }
}

impl FromStr for generic_control::ControlType {
    type Err = ();

    fn from_str(input: &str) -> Result<generic_control::ControlType, Self::Err> {
        match input {
            "Open" => Ok(generic_control::ControlType::Open),
            "OpenPhsA" => Ok(generic_control::ControlType::OpenPhsA),
            "OpenPhsB" => Ok(generic_control::ControlType::OpenPhsB),
            "OpenPhsC" => Ok(generic_control::ControlType::OpenPhsC),
            "Close" => Ok(generic_control::ControlType::Close),
            "ClosePhsA" => Ok(generic_control::ControlType::ClosePhsA),
            "ClosePhsB" => Ok(generic_control::ControlType::ClosePhsB),
            "ClosePhsC" => Ok(generic_control::ControlType::ClosePhsC),
            "SetModBlkOn" => Ok(generic_control::ControlType::SetModBlkOn),
            "SetModBlkOff" => Ok(generic_control::ControlType::SetModBlkOff),
            "StateOn" => Ok(generic_control::ControlType::StateOn),
            "StateOff" => Ok(generic_control::ControlType::StateOff),
            "SetValue" => Ok(generic_control::ControlType::SetValue),
            "SetWNetMag" => Ok(generic_control::ControlType::SetWNetMag),
            "SetVarNetMag" => Ok(generic_control::ControlType::SetVarNetMag),
            "TapChangeLowerPhs3" => Ok(generic_control::ControlType::TapChangeLowerPhs3),
            "TapChangeRaisePhs3" => Ok(generic_control::ControlType::TapChangeRaisePhs3),
            "TapChangeLowerPhsA" => Ok(generic_control::ControlType::TapChangeLowerPhsA),
            "TapChangeRaisePhsA" => Ok(generic_control::ControlType::TapChangeRaisePhsA),
            "TapChangeLowerPhsB" => Ok(generic_control::ControlType::TapChangeLowerPhsB),
            "TapChangeRaisePhsB" => Ok(generic_control::ControlType::TapChangeRaisePhsB),
            "TapChangeLowerPhsC" => Ok(generic_control::ControlType::TapChangeLowerPhsC),
            "TapChangeRaisePhsC" => Ok(generic_control::ControlType::TapChangeRaisePhsC),
            "BlackStartEnable" => Ok(generic_control::ControlType::BlackStartEnable),
            "BlackStartDisable" => Ok(generic_control::ControlType::BlackStartDisable),
            "FrequencySetPointEnable" => Ok(generic_control::ControlType::FrequencySetPointEnable),
            "FrequencySetPointDisable" => {
                Ok(generic_control::ControlType::FrequencySetPointDisable)
            }
            "ReactivePowerSetPointEnable" => {
                Ok(generic_control::ControlType::ReactivePowerSetPointEnable)
            }
            "ReactivePowerSetPointDisable" => {
                Ok(generic_control::ControlType::ReactivePowerSetPointDisable)
            }
            "RealPowerSetPointEnable" => Ok(generic_control::ControlType::RealPowerSetPointEnable),
            "RealPowerSetPointDisable" => {
                Ok(generic_control::ControlType::RealPowerSetPointDisable)
            }
            "TransToIslandOnGridLossEnable" => {
                Ok(generic_control::ControlType::TransToIslandOnGridLossEnable)
            }
            "TransToIslandOnGridLossDisable" => {
                Ok(generic_control::ControlType::TransToIslandOnGridLossDisable)
            }
            "VoltageSetPointEnable" => Ok(generic_control::ControlType::VoltageSetPointEnable),
            "VoltageSetPointDisable" => Ok(generic_control::ControlType::VoltageSetPointDisable),
            "SetStateKindUndefined" => Ok(generic_control::ControlType::SetStateKindUndefined),
            "SetStateKindOff" => Ok(generic_control::ControlType::SetStateKindOff),
            "SetStateKindOn" => Ok(generic_control::ControlType::SetStateKindOn),
            "SetStateKindStandBy" => Ok(generic_control::ControlType::SetStateKindStandBy),
            "ResetBreaker" => Ok(generic_control::ControlType::ResetBreaker),
            "ResetEss" => Ok(generic_control::ControlType::ResetEss),
            "ResetLoad" => Ok(generic_control::ControlType::ResetLoad),
            "ResetSolar" => Ok(generic_control::ControlType::ResetSolar),
            "ANetMag" => Ok(generic_control::ControlType::ANetMag),
            "ANeutMag" => Ok(generic_control::ControlType::ANeutMag),
            "APhsAMag" => Ok(generic_control::ControlType::APhsAMag),
            "APhsBMag" => Ok(generic_control::ControlType::APhsBMag),
            "APhsCMag" => Ok(generic_control::ControlType::APhsCMag),
            "HzMag" => Ok(generic_control::ControlType::HzMag),
            "PfNetMag" => Ok(generic_control::ControlType::PfNetMag),
            "PfNeutMag" => Ok(generic_control::ControlType::PfNeutMag),
            "PfPhsAMag" => Ok(generic_control::ControlType::PfPhsAMag),
            "PfPhsBMag" => Ok(generic_control::ControlType::PfPhsBMag),
            "PfPhsCMag" => Ok(generic_control::ControlType::PfPhsCMag),
            "PhVNetAng" => Ok(generic_control::ControlType::PhVNetAng),
            "PhVNetMag" => Ok(generic_control::ControlType::PhVNetMag),
            "PhVNeutAng" => Ok(generic_control::ControlType::PhVNeutAng),
            "PhVNeutMag" => Ok(generic_control::ControlType::PhVNeutMag),
            "PhVPhsAAng" => Ok(generic_control::ControlType::PhVPhsAAng),
            "PhVPhsAMag" => Ok(generic_control::ControlType::PhVPhsAMag),
            "PhVPhsBAng" => Ok(generic_control::ControlType::PhVPhsBAng),
            "PhVPhsBMag" => Ok(generic_control::ControlType::PhVPhsBMag),
            "PhVPhsCAng" => Ok(generic_control::ControlType::PhVPhsCAng),
            "PhVPhsCMag" => Ok(generic_control::ControlType::PhVPhsCMag),
            "PpvPhsAbAng" => Ok(generic_control::ControlType::PpvPhsAbAng),
            "PpvPhsAbMag" => Ok(generic_control::ControlType::PpvPhsAbMag),
            "PpvPhsBcAng" => Ok(generic_control::ControlType::PpvPhsBcAng),
            "PpvPhsBcMag" => Ok(generic_control::ControlType::PpvPhsBcMag),
            "PpvPhsCaAng" => Ok(generic_control::ControlType::PpvPhsCaAng),
            "PpvPhsCaMag" => Ok(generic_control::ControlType::PpvPhsCaMag),
            "VaNetMag" => Ok(generic_control::ControlType::VaNetMag),
            "VaNeutMag" => Ok(generic_control::ControlType::VaNeutMag),
            "VaPhsAMag" => Ok(generic_control::ControlType::VaPhsAMag),
            "VaPhsBMag" => Ok(generic_control::ControlType::VaPhsBMag),
            "VaPhsCMag" => Ok(generic_control::ControlType::VaPhsCMag),
            "VArNetMag" => Ok(generic_control::ControlType::VArNetMag),
            "VArNeutMag" => Ok(generic_control::ControlType::VArNeutMag),
            "VArPhsAMag" => Ok(generic_control::ControlType::VArPhsAMag),
            "VArPhsBMag" => Ok(generic_control::ControlType::VArPhsBMag),
            "VArPhsCMag" => Ok(generic_control::ControlType::VArPhsCMag),
            "WNetMag" => Ok(generic_control::ControlType::WNetMag),
            "WNeutMag" => Ok(generic_control::ControlType::WNeutMag),
            "WPhsAMag" => Ok(generic_control::ControlType::WPhsAMag),
            "WPhsBMag" => Ok(generic_control::ControlType::WPhsBMag),
            "WPhsCMag" => Ok(generic_control::ControlType::WPhsCMag),
            "SetGgioValueBool" => Ok(generic_control::ControlType::SetGgioValueBool),
            "SetGgioValueAnalog" => Ok(generic_control::ControlType::SetGgioValueAnalog),
            "SetGgioValueInteger" => Ok(generic_control::ControlType::SetGgioValueInteger),
            "SetGgioValueString" => Ok(generic_control::ControlType::SetGgioValueString),
            "StartTransaction" => Ok(generic_control::ControlType::StartTransaction),
            "StopTransaction" => Ok(generic_control::ControlType::StopTransaction),
            "Heartbeat" => Ok(generic_control::ControlType::Heartbeat),
            "MeterValues" => Ok(generic_control::ControlType::MeterValues),
            "StatusNotification" => Ok(generic_control::ControlType::StatusNotification),
            "BootNotification" => Ok(generic_control::ControlType::BootNotification),
            _ => {
                println!("Unsupport Generic control {}", input);
                Err(())
            }
        }
    }
}