-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbattery.py
More file actions
236 lines (192 loc) · 9.07 KB
/
battery.py
File metadata and controls
236 lines (192 loc) · 9.07 KB
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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
import datetime
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union
from attrs import define as _attrs_define
from dateutil.parser import isoparse
from ..models.battery_mode import BatteryMode
from ..models.vendor import Vendor
from ..types import UNSET, Unset
if TYPE_CHECKING:
from ..models.battery_recent_errors_error import BatteryRecentErrorsError
from ..models.battery_recent_errors_info import BatteryRecentErrorsInfo
from ..models.battery_recent_errors_start import BatteryRecentErrorsStart
from ..models.battery_recent_errors_warning import BatteryRecentErrorsWarning
T = TypeVar("T", bound="Battery")
@_attrs_define
class Battery:
"""
Attributes:
id (str): Battery id
vendor (Vendor):
reported_at (datetime.datetime): Date the request was generated in ISO-8601 format (timezone is always +00:00
and is always present)
model (str): Model number of Battery
serial_number (str): Manufacturer serial number of the Battery
site_id (str): The Derapi Site ID this Battery is associated with
name (Union[Unset, str]): Customer defined name of the Battery
nameplate_kwh (Union[Unset, float]): The rated storage capacity of the unit
mode (Union[Unset, BatteryMode]): Battery management system mode. Values are Self Consumption - minimize grid
import, Savings - optimizing Battery to save money; usually based on a rate plan, Backup - only use Battery for
grid backup
state_of_charge_percent (Union[Unset, float]): Battery state of charge as a percent of capacity
recent_errors (Union[Unset, List[Union['BatteryRecentErrorsError', 'BatteryRecentErrorsInfo',
'BatteryRecentErrorsStart', 'BatteryRecentErrorsWarning']]]): Most recent errors, warnings, or info reported by
the manufacturer for this Battery. The key represents the severity level (info/warning/error); the value is a
string description. start is always present and is the last element to be returned.
"""
id: str
vendor: Vendor
reported_at: datetime.datetime
model: str
serial_number: str
site_id: str
name: Union[Unset, str] = UNSET
nameplate_kwh: Union[Unset, float] = UNSET
mode: Union[Unset, BatteryMode] = UNSET
state_of_charge_percent: Union[Unset, float] = UNSET
recent_errors: Union[
Unset,
List[
Union[
"BatteryRecentErrorsError",
"BatteryRecentErrorsInfo",
"BatteryRecentErrorsStart",
"BatteryRecentErrorsWarning",
]
],
] = UNSET
def to_dict(self) -> Dict[str, Any]:
from ..models.battery_recent_errors_error import BatteryRecentErrorsError
from ..models.battery_recent_errors_info import BatteryRecentErrorsInfo
from ..models.battery_recent_errors_warning import BatteryRecentErrorsWarning
id = self.id
vendor = self.vendor.value
reported_at = self.reported_at.isoformat()
model = self.model
serial_number = self.serial_number
site_id = self.site_id
name = self.name
nameplate_kwh = self.nameplate_kwh
mode: Union[Unset, str] = UNSET
if not isinstance(self.mode, Unset):
mode = self.mode.value
state_of_charge_percent = self.state_of_charge_percent
recent_errors: Union[Unset, List[Dict[str, Any]]] = UNSET
if not isinstance(self.recent_errors, Unset):
recent_errors = []
for componentsschemas_battery_recent_errors_item_data in self.recent_errors:
componentsschemas_battery_recent_errors_item: Dict[str, Any]
if isinstance(componentsschemas_battery_recent_errors_item_data, BatteryRecentErrorsError):
componentsschemas_battery_recent_errors_item = (
componentsschemas_battery_recent_errors_item_data.to_dict()
)
elif isinstance(componentsschemas_battery_recent_errors_item_data, BatteryRecentErrorsWarning):
componentsschemas_battery_recent_errors_item = (
componentsschemas_battery_recent_errors_item_data.to_dict()
)
elif isinstance(componentsschemas_battery_recent_errors_item_data, BatteryRecentErrorsInfo):
componentsschemas_battery_recent_errors_item = (
componentsschemas_battery_recent_errors_item_data.to_dict()
)
else:
componentsschemas_battery_recent_errors_item = (
componentsschemas_battery_recent_errors_item_data.to_dict()
)
recent_errors.append(componentsschemas_battery_recent_errors_item)
field_dict: Dict[str, Any] = {}
field_dict.update(
{
"id": id,
"vendor": vendor,
"reportedAt": reported_at,
"model": model,
"serialNumber": serial_number,
"siteID": site_id,
}
)
if name is not UNSET:
field_dict["name"] = name
if nameplate_kwh is not UNSET:
field_dict["nameplateKwh"] = nameplate_kwh
if mode is not UNSET:
field_dict["mode"] = mode
if state_of_charge_percent is not UNSET:
field_dict["stateOfChargePercent"] = state_of_charge_percent
if recent_errors is not UNSET:
field_dict["recentErrors"] = recent_errors
return field_dict
@classmethod
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
from ..models.battery_recent_errors_error import BatteryRecentErrorsError
from ..models.battery_recent_errors_info import BatteryRecentErrorsInfo
from ..models.battery_recent_errors_start import BatteryRecentErrorsStart
from ..models.battery_recent_errors_warning import BatteryRecentErrorsWarning
d = src_dict.copy()
id = d.pop("id")
vendor = Vendor(d.pop("vendor"))
reported_at = isoparse(d.pop("reportedAt"))
model = d.pop("model")
serial_number = d.pop("serialNumber")
site_id = d.pop("siteID")
name = d.pop("name", UNSET)
nameplate_kwh = d.pop("nameplateKwh", UNSET)
_mode = d.pop("mode", UNSET)
mode: Union[Unset, BatteryMode]
if isinstance(_mode, Unset):
mode = UNSET
else:
mode = BatteryMode(_mode)
state_of_charge_percent = d.pop("stateOfChargePercent", UNSET)
recent_errors = []
_recent_errors = d.pop("recentErrors", UNSET)
for componentsschemas_battery_recent_errors_item_data in _recent_errors or []:
def _parse_componentsschemas_battery_recent_errors_item(
data: object,
) -> Union[
"BatteryRecentErrorsError",
"BatteryRecentErrorsInfo",
"BatteryRecentErrorsStart",
"BatteryRecentErrorsWarning",
]:
try:
if not isinstance(data, dict):
raise TypeError()
componentsschemas_battery_recent_errors_item_type_0 = BatteryRecentErrorsError.from_dict(data)
return componentsschemas_battery_recent_errors_item_type_0
except: # noqa: E722
pass
try:
if not isinstance(data, dict):
raise TypeError()
componentsschemas_battery_recent_errors_item_type_1 = BatteryRecentErrorsWarning.from_dict(data)
return componentsschemas_battery_recent_errors_item_type_1
except: # noqa: E722
pass
try:
if not isinstance(data, dict):
raise TypeError()
componentsschemas_battery_recent_errors_item_type_2 = BatteryRecentErrorsInfo.from_dict(data)
return componentsschemas_battery_recent_errors_item_type_2
except: # noqa: E722
pass
if not isinstance(data, dict):
raise TypeError()
componentsschemas_battery_recent_errors_item_type_3 = BatteryRecentErrorsStart.from_dict(data)
return componentsschemas_battery_recent_errors_item_type_3
componentsschemas_battery_recent_errors_item = _parse_componentsschemas_battery_recent_errors_item(
componentsschemas_battery_recent_errors_item_data
)
recent_errors.append(componentsschemas_battery_recent_errors_item)
battery = cls(
id=id,
vendor=vendor,
reported_at=reported_at,
model=model,
serial_number=serial_number,
site_id=site_id,
name=name,
nameplate_kwh=nameplate_kwh,
mode=mode,
state_of_charge_percent=state_of_charge_percent,
recent_errors=recent_errors,
)
return battery