cloudpss 4.5.1a3__tar.gz → 4.5.1a5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/PKG-INFO +1 -1
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/dataManageModel.py +23 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/dslab.py +50 -4
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/TemplateManager.py +1 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/runner.py +10 -7
- cloudpss-4.5.1a5/cloudpss/version.py +1 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss.egg-info/PKG-INFO +1 -1
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss.egg-info/SOURCES.txt +5 -1
- cloudpss-4.5.1a5/test/test-plot1.py +12 -0
- cloudpss-4.5.1a5/test/test-topology1.py +37 -0
- cloudpss-4.5.1a5/test/test2.py +56 -0
- cloudpss-4.5.1a5/test/test_TCP.py +31 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test_ws.py +1 -1
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test_ws2.py +1 -1
- cloudpss-4.5.1a5/test/test_ws3.py +49 -0
- cloudpss-4.5.1a5/test/testb.py +16 -0
- cloudpss-4.5.1a5/test/testkey.py +3 -0
- cloudpss-4.5.1a3/cloudpss/version.py +0 -1
- cloudpss-4.5.1a3/test/test-plot1.py +0 -0
- cloudpss-4.5.1a3/test/test-topology1.py +0 -31
- cloudpss-4.5.1a3/test/testb.py +0 -18
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/README.md +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/job/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/job/job.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/job/messageStreamReceiver.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/job/messageStreamSender.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/model/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/model/model.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/model/revision.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/model/topology.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/utils/AsyncIterable.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/utils/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/asyncio/utils/httpAsyncRequest.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/files/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/files/curveData.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/files/files.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/dslab/financialAnalysisModel.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/function/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/function/function.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/function/functionExecution.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/function/job.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/DataManageModel.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/EvaluationModel.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/IESLabOpt.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/IESLabPlan.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/IESLabSimulation.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/PlanModel.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/ieslab/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/TemplateCompiler.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/job.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/jobReceiver.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/messageStreamReceiver.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/messageStreamSender.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/EMTResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/IESLabSimulationResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/IESLabTypicalDayResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/IESResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/PowerFlowResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/job/result/result.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/implements/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/implements/component.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/implements/diagram.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/implements/implement.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/jobDefinitions.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/model.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/revision.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/model/topology.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/project/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/project/project.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/DSLabResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/IESLabEvaluationResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/IESLabPlanResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/IESLabTypicalDayResult.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/MessageStreamReceiver.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/receiver.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/result.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/storage.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/runner/transform.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/IO.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/__init__.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/dataEncoder.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/graphqlUtil.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/httprequests.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/matlab.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/utils/yamlLoader.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss/verify.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss.egg-info/dependency_links.txt +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss.egg-info/requires.txt +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/cloudpss.egg-info/top_level.txt +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/setup.cfg +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/setup.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-async.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-async2.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-async3.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-plot.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-sdk.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-sdk1.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-snapshot.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-topology.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test-yield.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test11.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test12.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test7950.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/testAsync.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/testEvent.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/testRt-test.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/testRt.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/testRt2.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/testSend.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test_in_new_web_1.py +0 -0
- {cloudpss-4.5.1a3 → cloudpss-4.5.1a5}/test/test_modepower_ampratio(3).py +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
from ..utils import request, fileLoad, graphql_request
|
2
2
|
import json
|
3
3
|
import time, datetime
|
4
|
+
import urllib.parse
|
4
5
|
import copy
|
5
6
|
import os
|
6
7
|
from cloudpss.dslab.files import getCurveData
|
@@ -268,6 +269,28 @@ class DataManageModel(object):
|
|
268
269
|
if data.get('extra', None) is None:
|
269
270
|
return None
|
270
271
|
return data.get('extra', None).get('data', None)
|
272
|
+
|
273
|
+
def UpdateItemExtra(self, kind, data):
|
274
|
+
'''
|
275
|
+
更新kind类型对应数据项的基准出力曲线、负荷曲线、策略曲线数据
|
276
|
+
:params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
|
277
|
+
:params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求,形如:{'data': {}, 'extra': [], 'id': ""}
|
278
|
+
|
279
|
+
:return: list<dict>类型,返回该种类下所有数据项的列表
|
280
|
+
'''
|
281
|
+
# 检查extra是否为空
|
282
|
+
if not data['extra']:
|
283
|
+
raise ValueError("extra 不能为空,必须包含有效的数据")
|
284
|
+
|
285
|
+
url = f"{self._baseUri}rest/{kind}"
|
286
|
+
r = {
|
287
|
+
'id': data.get('id', ''),
|
288
|
+
'data': data.get('data', {}),
|
289
|
+
'extra': data.get('extra', []),
|
290
|
+
}
|
291
|
+
|
292
|
+
self._updateItemData(url, r)
|
293
|
+
return self._fetchItemData(url)
|
271
294
|
|
272
295
|
class DSLabDataManageModel(DataManageModel):
|
273
296
|
_baseUri = 'api/dslab/'
|
@@ -146,6 +146,43 @@ class DSLab(object):
|
|
146
146
|
raise Exception("不是储能规划方案内核运行生成算法的计算方案")
|
147
147
|
return self.run(job=job, name=name)
|
148
148
|
|
149
|
+
def runIESShortCurrent(self,job=None,name=None, **kwargs)->Runner[IESResult]:
|
150
|
+
'''
|
151
|
+
运行 短路电流计算 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
|
152
|
+
|
153
|
+
:param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
|
154
|
+
:params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
|
155
|
+
|
156
|
+
:return: runner Runner[IESResult]
|
157
|
+
'''
|
158
|
+
rid = 'function/CloudPSS/short-circuit-current-calculation'
|
159
|
+
if job is None:
|
160
|
+
currentJob = self.model.context['currentJob']
|
161
|
+
job = self.model.jobs[currentJob]
|
162
|
+
if job['rid'] != rid:
|
163
|
+
for j in self.model.jobs:
|
164
|
+
if j['rid'] == rid:
|
165
|
+
job = j
|
166
|
+
if job is None:
|
167
|
+
raise Exception("找不到短路电流计算方案内核运行的计算方案")
|
168
|
+
if job['rid'] != rid:
|
169
|
+
raise Exception("不是短路电流计算方案内核运行生成算法的计算方案")
|
170
|
+
return self.run(job=job, name=name)
|
171
|
+
|
172
|
+
@staticmethod
|
173
|
+
def getProjectGroupList():
|
174
|
+
'''
|
175
|
+
获取项目组列表
|
176
|
+
|
177
|
+
:return: List[Dict] 返回项目组列表
|
178
|
+
'''
|
179
|
+
try:
|
180
|
+
r = request('GET', 'api/dslab/rest/group')
|
181
|
+
groupList = json.loads(r.text)
|
182
|
+
return groupList
|
183
|
+
except Exception as e:
|
184
|
+
raise Exception('获取项目组列表失败')
|
185
|
+
|
149
186
|
@staticmethod
|
150
187
|
def createProjectGroup(name, description=None, createById=None):
|
151
188
|
'''
|
@@ -173,18 +210,19 @@ class DSLab(object):
|
|
173
210
|
if r.ok:
|
174
211
|
r = request('GET', 'api/dslab/rest/group')
|
175
212
|
groupList = json.loads(r.text)
|
176
|
-
id = groupList[len(groupList) -1].get('id', None)
|
213
|
+
id = groupList[len(groupList) -1].get('id', None)\
|
214
|
+
|
177
215
|
return id
|
178
216
|
except Exception as e:
|
179
217
|
raise Exception('创建项目组失败')
|
180
218
|
|
181
219
|
@staticmethod
|
182
|
-
def createProject(name,
|
220
|
+
def createProject(name, groupName, description=None, initialTerm=None, build=None, operate=None, yearsInOperation=None):
|
183
221
|
'''
|
184
222
|
创建项目
|
185
223
|
|
186
224
|
:params name: String 项目名称
|
187
|
-
:params
|
225
|
+
:params groupName: String 父项目组名称,
|
188
226
|
:params description: String 项目描述, 可选参数
|
189
227
|
:params initialTerm: String 项目起始年限,可选参数
|
190
228
|
:params build: String 项目建设期(年),可选参数
|
@@ -194,6 +232,14 @@ class DSLab(object):
|
|
194
232
|
:return: Int 返回创建的项目id
|
195
233
|
'''
|
196
234
|
try:
|
235
|
+
groupList = DSLab.getProjectGroupList()
|
236
|
+
matchedGroup = next((g for g in groupList if g.get('name') == groupName), None)
|
237
|
+
if not matchedGroup:
|
238
|
+
gid = DSLab.createProjectGroup(groupName)
|
239
|
+
else:
|
240
|
+
gid = matchedGroup.get('id')
|
241
|
+
if gid is None:
|
242
|
+
raise Exception(f"项目组 {groupName} 缺少 id 字段")
|
197
243
|
payload = {
|
198
244
|
'name': name,
|
199
245
|
'gid': gid,
|
@@ -210,4 +256,4 @@ class DSLab(object):
|
|
210
256
|
project = json.loads(r.text)
|
211
257
|
return project.get('resource', None)
|
212
258
|
except Exception as e:
|
213
|
-
raise Exception('
|
259
|
+
raise Exception(f'创建项目失败: {e}')
|
@@ -65,7 +65,11 @@ class Runner(Generic[T]):
|
|
65
65
|
self.taskId = taskId
|
66
66
|
self.db = Storage(taskId, name, job, config, revision, modelRid)
|
67
67
|
rid =job['rid'].replace('job-definition/','function/').replace('/cloudpss/','/CloudPSS/')
|
68
|
-
|
68
|
+
resultClass = kwargs.get('RESULT_DB', None)
|
69
|
+
if resultClass is not None:
|
70
|
+
result = resultClass
|
71
|
+
else:
|
72
|
+
result = RESULT_DB.get(rid, Result)
|
69
73
|
self.result: T = result(self.db)
|
70
74
|
self.receiver = kwargs.get('receiver', None)
|
71
75
|
|
@@ -92,15 +96,14 @@ class Runner(Generic[T]):
|
|
92
96
|
def __listen(self, **kwargs):
|
93
97
|
|
94
98
|
receiver = kwargs.get('RECEIVER', 'default')
|
95
|
-
receiverclass = None
|
96
99
|
if type(receiver) is str:
|
97
100
|
if receiver not in RECEIVER:
|
98
|
-
|
101
|
+
receiver = RECEIVER['default']
|
99
102
|
else:
|
100
|
-
|
101
|
-
if
|
103
|
+
receiver = RECEIVER[receiver]
|
104
|
+
if receiver is None:
|
102
105
|
raise Exception('not find receiver')
|
103
|
-
self.receiver =
|
106
|
+
self.receiver = receiver(self.taskId, self.db, **kwargs)
|
104
107
|
self.receiver.connect()
|
105
108
|
|
106
109
|
def terminate(self):
|
@@ -148,7 +151,7 @@ class Runner(Generic[T]):
|
|
148
151
|
tres[k] = float(v) # type: ignore
|
149
152
|
policy["tres"] = tres
|
150
153
|
function = job["rid"].replace("job-definition/cloudpss/", "function/CloudPSS/")
|
151
|
-
implement = kwargs.get("implement", None)
|
154
|
+
implement = kwargs.get("implement", kwargs.get("topology", None))
|
152
155
|
debug = job["args"].get("@debug", None )
|
153
156
|
debugargs={}
|
154
157
|
if debug is not None:
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '4.5.1-alpha.5'
|
@@ -95,6 +95,7 @@ test/test-yield.py
|
|
95
95
|
test/test.py
|
96
96
|
test/test11.py
|
97
97
|
test/test12.py
|
98
|
+
test/test2.py
|
98
99
|
test/test7950.py
|
99
100
|
test/testAsync.py
|
100
101
|
test/testEvent.py
|
@@ -102,8 +103,11 @@ test/testRt-test.py
|
|
102
103
|
test/testRt.py
|
103
104
|
test/testRt2.py
|
104
105
|
test/testSend.py
|
106
|
+
test/test_TCP.py
|
105
107
|
test/test_in_new_web_1.py
|
106
108
|
test/test_modepower_ampratio(3).py
|
107
109
|
test/test_ws.py
|
108
110
|
test/test_ws2.py
|
109
|
-
test/
|
111
|
+
test/test_ws3.py
|
112
|
+
test/testb.py
|
113
|
+
test/testkey.py
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import plotly.express as px
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
df = pd.DataFrame([
|
5
|
+
dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28'),
|
6
|
+
dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15'),
|
7
|
+
dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30')
|
8
|
+
])
|
9
|
+
|
10
|
+
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task")
|
11
|
+
fig.update_yaxes(autorange="reversed") # otherwise tasks are listed from the bottom up
|
12
|
+
fig.show()
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
import time
|
3
|
+
import sys
|
4
|
+
import os
|
5
|
+
|
6
|
+
sys.path.append(os.path.join(os.path.dirname(__file__), '..\\'))
|
7
|
+
import cloudpss
|
8
|
+
import time
|
9
|
+
import json
|
10
|
+
|
11
|
+
if __name__ == '__main__':
|
12
|
+
os.environ['CLOUDPSS_API_URL'] = 'http://10.101.10.45/'
|
13
|
+
print('CLOUDPSS connected')
|
14
|
+
cloudpss.setToken(
|
15
|
+
'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInNjb3BlcyI6WyJtb2RlbDo5ODM2NyIsImZ1bmN0aW9uOjk4MzY3IiwiYXBwbGljYXRpb246MzI4MzEiXSwicm9sZXMiOlsiYWRtaW4iXSwidHlwZSI6ImFwcGx5IiwiZXhwIjoxNzY2MzA3MzU1LCJub3RlIjoiYWEiLCJpYXQiOjE3NTA3NTUzNTV9.iYh3otDGy-f7dKyIUd8xpnEuwVuRDfmBVsI112XeCZBe7sZLdyBb6a4XqOd8AoyTzFcpLj7rF1PQcT4mhEf6kA')
|
16
|
+
print('Token done')
|
17
|
+
project = cloudpss.Model.fetch('model/admin/xx11')
|
18
|
+
# topology = cloudpss.ModelTopology.fetch("-xrS3SewFhpVYKBtIXLk-XDLCQRQnUmlIbXS3s4sdPUkPKeAMhXHjRgZD1JPjPfQ","emtp",{'args':{}})
|
19
|
+
topology= project.fetchTopology(config={'args':{}},maximumDepth=50)
|
20
|
+
print(topology.components)
|
21
|
+
|
22
|
+
|
23
|
+
topology.dump(topology,'testTopology.json',indent=2)
|
24
|
+
|
25
|
+
|
26
|
+
# topology2 = cloudpss.ModelTopology.fetch('', 'emtp', {'args': {}}, maximumDepth=5, topology=topology)
|
27
|
+
|
28
|
+
|
29
|
+
# print(topology2.components)
|
30
|
+
# topology2.dump(topology2,'testTopology2.json',indent=2)
|
31
|
+
|
32
|
+
|
33
|
+
# topology3= project.fetchTopology(config={'args':{}},maximumDepth=5)
|
34
|
+
# print(topology3.components)
|
35
|
+
|
36
|
+
|
37
|
+
# topology3.dump(topology3,'testTopology3.json',indent=2)
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import sys,os
|
2
|
+
sys.path.append(os.path.join(os.path.dirname(__file__), '../'))
|
3
|
+
import cloudpss
|
4
|
+
import json
|
5
|
+
import time
|
6
|
+
# import plotly.graph_objects as go # 使用 plotly 绘制曲线
|
7
|
+
import numpy as np
|
8
|
+
# from csv_write_function import csv_write_function
|
9
|
+
|
10
|
+
|
11
|
+
# 仿真设置
|
12
|
+
# 填写 token,注意不要加大括号{}
|
13
|
+
# cloudpss.setToken('{token}')
|
14
|
+
cloudpss.setToken('eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NjM4LCJ1c2VybmFtZSI6IkNfeWFuamlvbmdjaGVuZyIsInNjb3BlcyI6WyJtb2RlbDo5ODM2NyIsImZ1bmN0aW9uOjk4MzY3IiwiYXBwbGljYXRpb246MzI4MzEiXSwicm9sZXMiOlsiQ195YW5qaW9uZ2NoZW5nIl0sInR5cGUiOiJhcHBseSIsImV4cCI6MTc3NTMwODY0Miwibm90ZSI6IllKQy10b2tlbiIsImlhdCI6MTc0NDIwNDY0Mn0.H_BdzcOh-MBFMTddb35fNXSe2TAOCgoo2E6RC4mex5k06ouD8GuT0Y60yzCXsR1jsU7YKj6x00KU2OCElg7FQQ')
|
15
|
+
|
16
|
+
# 设置访问的地址,即登录后的地址到.net/为止
|
17
|
+
os.environ['CLOUDPSS_API_URL'] = 'http://cloudpss-nari.ddns.cloudpss.net/'
|
18
|
+
|
19
|
+
# 选择算例,获取指定算例 rid 的项目
|
20
|
+
model = cloudpss.Model.fetch('model/C_yanjiongcheng/Qingdong-DC-simple') # 注意最后那个#号不要加,写完项目名称即可。
|
21
|
+
|
22
|
+
|
23
|
+
rid=model.rid
|
24
|
+
configs=model.configs
|
25
|
+
jobs=model.jobs
|
26
|
+
print('model的rid为', rid)
|
27
|
+
print('model的config为', configs)
|
28
|
+
print('model的jobs为', jobs)
|
29
|
+
|
30
|
+
# 选择参数方案,若未设置,则默认用 model 的第一个 config(参数方案)
|
31
|
+
config = model.configs[0] # Kes1.1
|
32
|
+
|
33
|
+
# 选择计算方案,若未设置,则默认用 model 的第一个 job,此处选择 jobs[0],为SimStudio中设置的第1个计算方案,即“图A”
|
34
|
+
job = model.jobs[0]
|
35
|
+
|
36
|
+
# 启动计算任务
|
37
|
+
time1 = time.time() # 计算当前的秒数
|
38
|
+
runner = model.runPowerFlow(job, config) # 运行计算方案
|
39
|
+
|
40
|
+
# 监听计算任务实例的运行状态
|
41
|
+
while not runner.status():
|
42
|
+
logs = runner.result.getLogs() # 获得运行日志
|
43
|
+
for log in logs:
|
44
|
+
print(log) # 打印每一条日志
|
45
|
+
# 每隔一秒判断一次运行状态
|
46
|
+
time.sleep(1)
|
47
|
+
print('end') # 运行结束
|
48
|
+
|
49
|
+
time2 = time.time() # 计算当前的秒数
|
50
|
+
print('潮流计算花费的时间为 %.2f 秒' % (time2 - time1))
|
51
|
+
print(cloudpss.__version__)
|
52
|
+
|
53
|
+
# 获取潮流计算结果
|
54
|
+
buses = runner.result.getBuses() # 获取节点电压计算结果
|
55
|
+
# print(buses)
|
56
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import socket
|
2
|
+
|
3
|
+
def tcp_client():
|
4
|
+
host = '10.101.10.102' # 服务器 IP 地址
|
5
|
+
port = 8802 # 服务器端口
|
6
|
+
|
7
|
+
# 创建 socket 对象
|
8
|
+
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
9
|
+
|
10
|
+
try:
|
11
|
+
# 连接到服务器
|
12
|
+
client_socket.connect((host, port))
|
13
|
+
print(f"已连接到服务器 {host}:{port}")
|
14
|
+
# 接收服务器返回的数据
|
15
|
+
while True:
|
16
|
+
rec_msg = client_socket.recv(1024)
|
17
|
+
hex_representation = ' '.join(f'{byte:02x}' for byte in rec_msg)
|
18
|
+
print(' 客户端消息的十六进制表示: ', hex_representation)
|
19
|
+
# print(f"接收到来自服务器的消息: {data.decode()}")
|
20
|
+
|
21
|
+
client_socket.send(rec_msg)
|
22
|
+
|
23
|
+
except ConnectionRefusedError:
|
24
|
+
print("连接失败,服务器可能未启动。")
|
25
|
+
finally:
|
26
|
+
# 关闭连接
|
27
|
+
client_socket.close()
|
28
|
+
print("客户端已关闭连接。")
|
29
|
+
|
30
|
+
if __name__ == '__main__':
|
31
|
+
tcp_client()
|
@@ -52,7 +52,7 @@ class WebsocketClient():
|
|
52
52
|
return self._status
|
53
53
|
|
54
54
|
async def create(self):
|
55
|
-
asyncio.create_task(self.websocket_connect('ws://
|
55
|
+
asyncio.create_task(self.websocket_connect('ws://www.rpssc.top:52694/api/streams/id/a454e6b7-e677-41df-a4e8-6202ff3cb35e'))
|
56
56
|
|
57
57
|
async def main():
|
58
58
|
ws=WebsocketClient()
|
@@ -87,7 +87,7 @@ class WebsocketClient():
|
|
87
87
|
|
88
88
|
async def create(self):
|
89
89
|
# await self.websocket_connect('ws://10.101.10.45/api/streams/id/bb30285a-7d11-484b-a8b0-4855cf8bf8ed')
|
90
|
-
await self.websocket_connect('ws://
|
90
|
+
await self.websocket_connect('ws://www.rpssc.top:52694/api/streams/id/1d3b2722-dd65-42c2-ac91-a232e44582c9')
|
91
91
|
# asyncio.create_task(self.websocket_connect('ws://10.101.10.45/api/streams/id/bb30285a-7d11-484b-a8b0-4855cf8bf8ed'))
|
92
92
|
|
93
93
|
async def main():
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
import time
|
3
|
+
import threading
|
4
|
+
import websocket
|
5
|
+
# ws://10.101.10.45/api/streams/token/fe943635-0dc9-40c8-8a27-39d02af66894
|
6
|
+
|
7
|
+
|
8
|
+
class WebsocketClient():
|
9
|
+
message = []
|
10
|
+
_status=0
|
11
|
+
# __init__(self):
|
12
|
+
def on_close(self, *args, **kwargs):
|
13
|
+
self._status = 1
|
14
|
+
print("close")
|
15
|
+
def on_error(self, *args, **kwargs):
|
16
|
+
self._status = 1
|
17
|
+
print("error",args,kwargs)
|
18
|
+
def on_open(self,ws, *args, **kwargs):
|
19
|
+
self._status = 1
|
20
|
+
print("open")
|
21
|
+
def on_message(self, *args, **kwargs):
|
22
|
+
self._status = 0
|
23
|
+
print("on_message")
|
24
|
+
# websocket
|
25
|
+
def connect(self):
|
26
|
+
self._status = 0
|
27
|
+
path = "ws://www.rpssc.top:52694/api/streams/id/a454e6b7-e677-41df-a4e8-6202ff3cb35e"
|
28
|
+
self.ws = websocket.WebSocketApp(
|
29
|
+
path,
|
30
|
+
on_open=self.on_open,
|
31
|
+
on_message=self.on_message,
|
32
|
+
on_error=self.on_error,
|
33
|
+
on_close=self.on_close,
|
34
|
+
)
|
35
|
+
thread = threading.Thread(target=self.ws.run_forever, kwargs={'ping_interval':60,'ping_timeout':5,'reconnect':True})
|
36
|
+
thread.setDaemon(True)
|
37
|
+
thread.start()
|
38
|
+
while not self._status:
|
39
|
+
time.sleep(0)
|
40
|
+
|
41
|
+
def main():
|
42
|
+
ws=WebsocketClient()
|
43
|
+
ws.connect()
|
44
|
+
print("start")
|
45
|
+
while ws._status == 0:
|
46
|
+
time.sleep(0)
|
47
|
+
pass
|
48
|
+
if __name__ == '__main__':
|
49
|
+
main()
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '4.5.1-alpha.3'
|
File without changes
|
@@ -1,31 +0,0 @@
|
|
1
|
-
|
2
|
-
import time
|
3
|
-
import sys
|
4
|
-
import os
|
5
|
-
|
6
|
-
sys.path.append(os.path.join(os.path.dirname(__file__), '..\\'))
|
7
|
-
import cloudpss
|
8
|
-
import time
|
9
|
-
import numpy as np
|
10
|
-
import pandas as pd
|
11
|
-
import json
|
12
|
-
|
13
|
-
if __name__ == '__main__':
|
14
|
-
os.environ['CLOUDPSS_API_URL'] = 'http://10.101.10.45/'
|
15
|
-
print('CLOUDPSS connected')
|
16
|
-
cloudpss.setToken(
|
17
|
-
'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInNjb3BlcyI6WyJtb2RlbDo5ODMzNSIsImZ1bmN0aW9uOjk4MzM1IiwiYXBwbGljYXRpb246OTgzMzUiXSwicm9sZXMiOlsiYWRtaW4iXSwidHlwZSI6ImFwcGx5IiwiZXhwIjoxNzI0NTU3MDIzLCJub3RlIjoiYSIsImlhdCI6MTY5MzQ1MzAyM30._Xuyo62ESKLcIAFeNdnfBM44yPiiXli9OPKvXDzL2rPV4J1_qsGZP--bsS1tXAVy-x8ooUIIAAG1yhwmZuk7-Q')
|
18
|
-
print('Token done')
|
19
|
-
project = cloudpss.Model.fetch('model/admin/asdfsadd')
|
20
|
-
# topology = cloudpss.ModelTopology.fetch("-xrS3SewFhpVYKBtIXLk-XDLCQRQnUmlIbXS3s4sdPUkPKeAMhXHjRgZD1JPjPfQ","emtp",{'args':{}})
|
21
|
-
topology= project.fetchTopology(config={'args':{}},maximumDepth=50)
|
22
|
-
print(topology.components)
|
23
|
-
# topology.dump(topology,'test.json')
|
24
|
-
|
25
|
-
|
26
|
-
# # topology= project.fetchTopology(config={'args':{}})
|
27
|
-
|
28
|
-
# topology.dump(topology,'test.json')
|
29
|
-
|
30
|
-
|
31
|
-
|
cloudpss-4.5.1a3/test/testb.py
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
import os,sys
|
2
|
-
import time
|
3
|
-
|
4
|
-
import socketio
|
5
|
-
import threading
|
6
|
-
import struct
|
7
|
-
|
8
|
-
|
9
|
-
if __name__ == '__main__':
|
10
|
-
a = [1.21,2.22,3.33]
|
11
|
-
x = struct.pack('d'*len(a),*a)
|
12
|
-
print(x)
|
13
|
-
print(len(x))
|
14
|
-
|
15
|
-
t = struct.unpack('d'*int(len(x)/8),x)
|
16
|
-
|
17
|
-
|
18
|
-
print(t)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|