@@ -15,7 +15,13 @@ class OpenEMSAPIClient():
1515 """OpenEMS API Client Class."""
1616
1717 def __init__ (self , server_url , username , password ):
18- """Create client instance and initialize connection helpers."""
18+ """Create client instance and initialize connection helpers.
19+
20+ Args:
21+ server_url: OpenEMS server WebSocket URL.
22+ username: Username for authentication.
23+ password: Password for authentication.
24+ """
1925 self .server_url = server_url
2026 self .username = username
2127 self .password = password
@@ -27,7 +33,15 @@ def __del__(self):
2733 self ._bridge .shutdown ()
2834
2935 async def login (self ):
30- """Return an authenticated websocket server connection."""
36+ """Return an authenticated websocket server connection.
37+
38+ Returns:
39+ Server: Authenticated WebSocket server connection.
40+
41+ Raises:
42+ APIError: If authentication fails.
43+ jsonrpc_base.jsonrpc.ProtocolError: If an unexpected protocol error occurs.
44+ """
3145 if self ._server is None or not hasattr (self ._server , 'connected' ) or not self ._server .connected :
3246 server = Server (self .server_url )
3347 await server .ws_connect ()
@@ -41,7 +55,11 @@ async def login(self):
4155 return self ._server
4256
4357 def get_edges (self ):
44- """Call getEdges API."""
58+ """Call getEdges API.
59+
60+ Returns:
61+ list: List of edge devices with their configuration.
62+ """
4563 async def f ():
4664 server = await self .login ()
4765 page = 0
@@ -62,7 +80,14 @@ async def f():
6280 return self ._bridge .run (f )
6381
6482 def get_edge_config (self , edge_id ):
65- """Call getEdgeConfig API."""
83+ """Call getEdgeConfig API.
84+
85+ Args:
86+ edge_id: Edge device ID.
87+
88+ Returns:
89+ dict: Edge configuration including components and their settings.
90+ """
6691 async def f ():
6792 server = await self .login ()
6893 try :
@@ -82,7 +107,15 @@ async def f():
82107 return self ._bridge .run (f )
83108
84109 def get_channels_of_component (self , edge_id , component_id ):
85- """Call getChannelsOfComponent API."""
110+ """Call getChannelsOfComponent API.
111+
112+ Args:
113+ edge_id: Edge device ID.
114+ component_id: Component ID to query channels for.
115+
116+ Returns:
117+ dict: Component channels information including channel IDs and metadata.
118+ """
86119 async def f ():
87120 server = await self .login ()
88121 try :
@@ -111,7 +144,18 @@ async def f():
111144 return self ._bridge .run (f )
112145
113146 def query_historic_timeseries_data (self , edge_id , start , end , channels , resolution_sec = None ):
114- """Call edgeRpc.queryHistoricTimeseriesData API."""
147+ """Call edgeRpc.queryHistoricTimeseriesData API.
148+
149+ Args:
150+ edge_id: Edge device ID.
151+ start: Start date for data query.
152+ end: End date for data query.
153+ channels: List of channel names to query (e.g., ['meter0/ActivePower']).
154+ resolution_sec: Optional data resolution in seconds.
155+
156+ Returns:
157+ pd.DataFrame: Time-series data with timestamps as index and channels as columns.
158+ """
115159 async def f ():
116160 server = await self .login ()
117161 params = {
@@ -144,7 +188,16 @@ async def f():
144188 return self ._bridge .run (f )
145189
146190 def update_component_config (self , edge_id , component_id , properties ):
147- """Call edgeRpc.updateComponentConfig API."""
191+ """Call edgeRpc.updateComponentConfig API.
192+
193+ Args:
194+ edge_id: Edge device ID.
195+ component_id: Component ID to update.
196+ properties: List of property dictionaries with 'name' and 'value' keys.
197+
198+ Returns:
199+ dict: Update result from the API.
200+ """
148201 async def f ():
149202 server = await self .login ()
150203 try :
@@ -169,6 +222,15 @@ def update_component_config_from_name_value(self, edge_id, component_id, name, v
169222 """Call edgeRpc.updateComponentConfig API.
170223
171224 This function has name and value argument instead of properties argument of update_component_config method.
225+
226+ Args:
227+ edge_id: Edge device ID.
228+ component_id: Component ID to update.
229+ name: Configuration parameter name.
230+ value: New value for the configuration parameter.
231+
232+ Returns:
233+ dict: Update result from the API.
172234 """
173235 return self .update_component_config (
174236 edge_id ,
@@ -179,13 +241,27 @@ def update_component_config_from_name_value(self, edge_id, component_id, name, v
179241 )
180242
181243 def get_meter_list (self , edge_id ):
182- """Extract meter list from edge config."""
244+ """Extract meter list from edge config.
245+
246+ Args:
247+ edge_id: Edge device ID.
248+
249+ Returns:
250+ dict: Dictionary of meter components keyed by component ID.
251+ """
183252 edge_config = self .get_edge_config (edge_id )
184253 components = edge_config ['components' ]
185254 return dict ([(k , v ) for (k , v ) in components .items () if v ['factoryId' ].split ('.' )[0 ] == 'Meter' ])
186255
187256 def get_pvinverter_list (self , edge_id ):
188- """Extract pvinverter list from edge config."""
257+ """Extract pvinverter list from edge config.
258+
259+ Args:
260+ edge_id: Edge device ID.
261+
262+ Returns:
263+ dict: Dictionary of PV inverter components keyed by component ID.
264+ """
189265 edge_config = self .get_edge_config (edge_id )
190266 components = edge_config ['components' ]
191267 return dict ([(k , v ) for (k , v ) in components .items () if v ['factoryId' ].split ('.' )[0 ] == 'PVInverter' ])
0 commit comments