cloudpss 4.1.1a11__tar.gz → 4.1.1a13__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.1.1a11 → cloudpss-4.1.1a13}/PKG-INFO +1 -1
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/functionExecution.py +10 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/DataManageModel.py +65 -16
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/IESLabPlan.py +0 -9
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/IESLabSimulation.py +1 -1
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/PlanModel.py +11 -7
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/messageStreamReceiver.py +0 -2
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/model.py +1 -2
- cloudpss-4.1.1a13/cloudpss/version.py +1 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/PKG-INFO +1 -1
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/SOURCES.txt +1 -1
- cloudpss-4.1.1a13/test/testRt.py +191 -0
- cloudpss-4.1.1a11/test/testRt.py → cloudpss-4.1.1a13/test/testRt2.py +39 -23
- cloudpss-4.1.1a11/cloudpss/version.py +0 -1
- cloudpss-4.1.1a11/test/testRt copy.py +0 -107
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/README.md +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/job.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/messageStreamReceiver.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/messageStreamSender.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/model.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/revision.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/topology.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/utils/AsyncIterable.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/utils/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/utils/httpAsyncRequest.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/function.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/job.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/EvaluationModel.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/job.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobMachine.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobPolicy.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobQueue.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobReceiver.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobTres.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/messageStreamSender.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/EMTView.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/IESLabSimulationView.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/IESLabTypicalDayView.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/IESView.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/PowerFlowView.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/view.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/component.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/diagram.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/implement.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/jobDefinitions.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/revision.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/topology.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/project/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/project/project.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/IESLabEvaluationResult.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/IESLabPlanResult.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/IESLabTypicalDayResult.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/MessageStreamReceiver.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/receiver.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/result.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/runner.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/storage.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/transform.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/IO.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/__init__.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/dataEncoder.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/graphqlUtil.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/httprequests.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/matlab.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/yamlLoader.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/verify.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/dependency_links.txt +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/requires.txt +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/top_level.txt +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/setup.cfg +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/setup.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-async.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-async2.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-async3.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-sdk.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-sdk1.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-snapshot.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-topology.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test7950.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testAsync.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testEvent.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testSend.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test_in_new_web_1.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test_ws.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test_ws2.py +0 -0
- {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testb.py +0 -0
@@ -396,4 +396,14 @@ class FunctionExecution(object):
|
|
396
396
|
'yAxis': layout.get('yaxis', {}),
|
397
397
|
}
|
398
398
|
}
|
399
|
+
self.print(result)
|
400
|
+
|
401
|
+
def custom(self, data, key=None,verb='replace'):
|
402
|
+
result = {
|
403
|
+
'key': key,
|
404
|
+
'version': 1,
|
405
|
+
'verb': verb,
|
406
|
+
'type': 'custom',
|
407
|
+
'data': data
|
408
|
+
}
|
399
409
|
self.print(result)
|
@@ -83,26 +83,50 @@ class DataManageModel(object):
|
|
83
83
|
|
84
84
|
:return: 无
|
85
85
|
'''
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
try:
|
87
|
+
r = request('GET',
|
88
|
+
self._dataManageUrl,
|
89
|
+
params={
|
90
|
+
"simulationId": self.simulationId
|
91
|
+
,
|
92
|
+
})
|
93
|
+
data = json.loads(r.text)
|
94
|
+
info = data['info']
|
95
|
+
for kind,value in info.items():
|
96
|
+
if kind =='Weather':
|
97
|
+
continue
|
98
|
+
|
99
|
+
for k,data in value.items():
|
100
|
+
self._kindItemDataMap[k]=value
|
101
|
+
for val in data:
|
102
|
+
self._itemDataMap[str(val['timeid'])]=val
|
103
|
+
self._itemDataMap[str(val['id'])]=val
|
104
|
+
self._kindIdMap[str(val['timeid'])]=k
|
105
|
+
self._kindIdMap[str(val['id'])]=k
|
106
|
+
except Exception as e:
|
107
|
+
print('获取数据失败',e)
|
108
|
+
pass
|
109
|
+
|
110
|
+
# list = ['thermalLoads', 'electricLoads', 'fuels', 'typhoon', 'rainfall', 'earthquake', 'extremeCold']
|
111
|
+
# for kind,value in self._kindUrlMap.items():
|
112
|
+
# try:
|
89
113
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
114
|
+
# if kind in list:
|
115
|
+
# dataList = self._fetchItemData(self._kindUrlMap[kind], None)
|
116
|
+
# else:
|
117
|
+
# dataList = self._fetchItemData(self._kindUrlMap[kind], kind)
|
118
|
+
# except Exception as e:
|
119
|
+
# pass
|
120
|
+
# self._kindItemDataMap[kind]=dataList
|
121
|
+
# for val in dataList:
|
122
|
+
# self._itemDataMap[str(val['timeid'])]=val
|
123
|
+
# self._itemDataMap[str(val['id'])]=val
|
124
|
+
# self._kindIdMap[str(val['timeid'])]=kind
|
125
|
+
# self._kindIdMap[str(val['id'])]=kind
|
102
126
|
|
103
127
|
def GetDataItem(self, ID: str):
|
104
128
|
'''
|
105
|
-
获取ID
|
129
|
+
获取ID对应的数据信息
|
106
130
|
|
107
131
|
:params: ID string类型,代表数据项的标识符,可以在所有类型的数据项中实现唯一标识
|
108
132
|
|
@@ -281,11 +305,35 @@ class DataManageModel(object):
|
|
281
305
|
})
|
282
306
|
weatherData = json.loads(r.text)
|
283
307
|
return weatherData['results']
|
308
|
+
|
309
|
+
def UpdateAtmosData(self, data):
|
310
|
+
'''
|
311
|
+
更新气象数据
|
312
|
+
:data: list类型,表示数据内容,其数据结构应满足对应数据项的满足如下结构要求:
|
313
|
+
"lat": string类型 坐标纬度
|
314
|
+
"lng": string类型 坐标经度
|
315
|
+
"time": string类型 表示时间 需满足格式YYYY-MM-DD hh:mm:ss 如"2016-01-01 00:00:00"
|
316
|
+
"t10m": string类型 表示环境温度(℃)
|
317
|
+
"lwgab_swgdn": string类型 表示太阳辐射强度(W/m2)
|
318
|
+
"u10m": string类型 距地面10m处东向风速(m/s)
|
319
|
+
"u50m": string类型 距地面50m处东向风速(m/s)
|
320
|
+
"v10m": string类型 距地面10m处北向风速(m/s)
|
321
|
+
"v50m": string类型 距地面50m处北向风速(m/s)
|
322
|
+
"adj_sfc_sw_direct_all_1h": string类型 短波直射强度(W/m²)
|
323
|
+
"adj_sfc_sw_diff_all_1h": string类型 短波散射强度(W/m²)
|
324
|
+
"solar_zen_angle_1h": string类型 太阳天顶角°
|
325
|
+
:return: bool 类型,返回True 更新成功
|
326
|
+
'''
|
327
|
+
r = request('POST',
|
328
|
+
self._weatherUrl,
|
329
|
+
data=json.dumps({"sid":self.simulationId, "data":data}))
|
330
|
+
return r.ok
|
284
331
|
|
285
332
|
|
286
333
|
class IESSimulationDataManageModel(DataManageModel):
|
287
334
|
_baseUri = 'api/ieslab-simulation/'
|
288
335
|
_weatherUrl = 'api/ieslab-simulation/rest/weather_data/'
|
336
|
+
_dataManageUrl = 'api/ieslab-simulation/editor/data_manage/'
|
289
337
|
_kindNameMap = {
|
290
338
|
"光伏": "PhotovoltaicSys",
|
291
339
|
"风机": "WindPowerGenerator",
|
@@ -352,6 +400,7 @@ class IESSimulationDataManageModel(DataManageModel):
|
|
352
400
|
class IESPlanDataManageModel(DataManageModel):
|
353
401
|
_baseUri = 'api/ieslab-plan/'
|
354
402
|
_weatherUrl = 'api/ieslab-plan/rest/weather_data/'
|
403
|
+
_dataManageUrl = 'api/ieslab-plan/editor/data_manage/'
|
355
404
|
_kindNameMap = {
|
356
405
|
"光伏": "PhotovoltaicSys",
|
357
406
|
"风机": "WindPowerGenerator",
|
@@ -130,15 +130,6 @@ class IESLabPlan(object):
|
|
130
130
|
:return: Boolean
|
131
131
|
'''
|
132
132
|
return self.planModel.kill()
|
133
|
-
|
134
|
-
def createProjectGroup(self, name):
|
135
|
-
'''
|
136
|
-
创建项目组
|
137
|
-
|
138
|
-
:params name: 项目组名称
|
139
|
-
|
140
|
-
:return: 返回一个创建的项目组
|
141
|
-
'''
|
142
133
|
|
143
134
|
@staticmethod
|
144
135
|
def createProjectGroup(group_name, desc=None, createById=None):
|
@@ -41,7 +41,7 @@ class IESLabPlanModel(object):
|
|
41
41
|
except:
|
42
42
|
return OptimizationMode['经济性']
|
43
43
|
|
44
|
-
def SetOptimizationInfo(self,
|
44
|
+
def SetOptimizationInfo(self, optType):
|
45
45
|
'''
|
46
46
|
无对应接口
|
47
47
|
设置当前算例的优化目标
|
@@ -128,12 +128,16 @@ class IESLabPlanModel(object):
|
|
128
128
|
status = data.get('status', '')
|
129
129
|
if status == 'stop':
|
130
130
|
isRunning = False
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
131
|
+
try:
|
132
|
+
|
133
|
+
logs = IESLabPlanResult(self.simulationId).GetLogs()
|
134
|
+
if logs is not None:
|
135
|
+
for log in logs:
|
136
|
+
if(log.get('data', '') == 'run ends'):
|
137
|
+
isRunning = False
|
138
|
+
break
|
139
|
+
except:
|
140
|
+
return False
|
137
141
|
return isRunning
|
138
142
|
|
139
143
|
|
@@ -52,14 +52,12 @@ class MessageStreamReceiver(JobReceiver):
|
|
52
52
|
self.ws.url = self.__path(data["id"])
|
53
53
|
msg = IO.deserialize(data["data"], "ubjson")
|
54
54
|
self.messages.append(msg)
|
55
|
-
# print(msg['type'])
|
56
55
|
# if(msg['type']=='terminate'):
|
57
56
|
# self.close(self.ws)
|
58
57
|
return msg
|
59
58
|
|
60
59
|
|
61
60
|
def __on_error(self, *args, **kwargs):
|
62
|
-
print('error',args,kwargs)
|
63
61
|
logging.debug("MessageStreamReceiver error")
|
64
62
|
msg = {
|
65
63
|
"type": "log",
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
import re
|
3
3
|
from copy import deepcopy
|
4
|
-
|
5
4
|
from cloudpss.job.job import Job
|
6
5
|
from cloudpss.job.view import EMTView, IESView, PowerFlowView
|
7
6
|
from cloudpss.job.view.view import View
|
@@ -96,7 +95,7 @@ class Model(object):
|
|
96
95
|
model = {**self.__dict__, "revision": self.revision.toJSON()}
|
97
96
|
return model
|
98
97
|
|
99
|
-
def getAllComponents(self):
|
98
|
+
def getAllComponents(self)->dict:
|
100
99
|
"""
|
101
100
|
获取实现
|
102
101
|
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '4.1.1-alpha.13'
|
@@ -0,0 +1,191 @@
|
|
1
|
+
import os,sys
|
2
|
+
import time
|
3
|
+
sys.path.append(os.path.join(os.path.dirname(__file__), '..\\'))
|
4
|
+
import cloudpss
|
5
|
+
import socketio
|
6
|
+
import threading
|
7
|
+
import struct
|
8
|
+
import json
|
9
|
+
|
10
|
+
class RealTimeSream(socketio.ClientNamespace):
|
11
|
+
|
12
|
+
config = None
|
13
|
+
messages = []
|
14
|
+
series=[]
|
15
|
+
outputNumericValue={}
|
16
|
+
inputNumericValue={}
|
17
|
+
|
18
|
+
end=False
|
19
|
+
|
20
|
+
def __init__(self, namespace=None, *args, **kwargs):
|
21
|
+
super().__init__(namespace)
|
22
|
+
self.numericValueCallBack = kwargs.get('numericValueCallBack',None)
|
23
|
+
self.chartCallBack = kwargs.get('chartCallBack',None)
|
24
|
+
self.onStartJob = kwargs.get('onStartJob',None)
|
25
|
+
setattr(self, 'on_data-panel', self.on_data_panel)
|
26
|
+
setattr(self, 'on_start-job', self.on_start_job)
|
27
|
+
setattr(self, 'on_stop-job', self.on_stop_job)
|
28
|
+
setattr(self, 'on_close-job', self.on_close_job)
|
29
|
+
setattr(self, 'on_load-record-data', self.on_load_record_data)
|
30
|
+
setattr(self, 'on_real-time-data', self.on_real_time_data)
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
def on_connect(self):
|
36
|
+
self.emit('start-job', { 'type': 'start-job', 'context': 'real-time-data' })
|
37
|
+
self.emit('real-time-data', { 'type': 'real-time-data', 'context': 'real-time-data' })
|
38
|
+
self.emit('data-panel', { 'type': 'data-panel', 'context': 'real-time-data' })
|
39
|
+
pass
|
40
|
+
|
41
|
+
def on_disconnect(self):
|
42
|
+
pass
|
43
|
+
|
44
|
+
def on_data_panel(self, data):
|
45
|
+
# self.numericValue=data
|
46
|
+
virtual_input=self.config['virtual_input']
|
47
|
+
virtual_output=self.config['virtual_output']
|
48
|
+
display=self.config['display']
|
49
|
+
|
50
|
+
d ={}
|
51
|
+
for x,v in display.items():
|
52
|
+
d[v]=x
|
53
|
+
|
54
|
+
for i in range(0,virtual_input):
|
55
|
+
self.inputNumericValue[d[i]]=data[i]
|
56
|
+
for i in range(0,virtual_output):
|
57
|
+
self.outputNumericValue[d[virtual_input+i]]=data[virtual_input+i]
|
58
|
+
if self.numericValueCallBack is not None:
|
59
|
+
self.numericValueCallBack(self.inputNumericValue,self.outputNumericValue)
|
60
|
+
def on_start_job(self,data):
|
61
|
+
self.config =data
|
62
|
+
if self.onStartJob is not None:
|
63
|
+
self.onStartJob(self.config)
|
64
|
+
print( 'on_start_job',self.config)
|
65
|
+
def on_stop_job(self,data):
|
66
|
+
print('on_stop_job',flush=True)
|
67
|
+
self.disconnect()
|
68
|
+
self.end=True
|
69
|
+
def on_close_job(self,data):
|
70
|
+
print('on_close_job',flush=True)
|
71
|
+
self.disconnect()
|
72
|
+
self.end=True
|
73
|
+
def on_recording(self,data):
|
74
|
+
print( 'on_recording',data)
|
75
|
+
def on_load_record_data(self,data):
|
76
|
+
print( 'on_load_record_data',data)
|
77
|
+
def on_real_time_data(self,msg):
|
78
|
+
display=self.config['display']
|
79
|
+
d ={}
|
80
|
+
for x,v in display.items():
|
81
|
+
d[v]=x
|
82
|
+
data =struct.unpack('d'*int(len(msg)/8),msg)
|
83
|
+
i = 0
|
84
|
+
runTime =0
|
85
|
+
self.series=[]
|
86
|
+
channelLength=int(self.config['portNumber'])+1
|
87
|
+
virtual_input=int(self.config['virtual_input'])
|
88
|
+
for index in range(0,len(data)):
|
89
|
+
val = data[index]
|
90
|
+
if(index%channelLength==0):
|
91
|
+
i=0
|
92
|
+
runTime = val
|
93
|
+
elif i>virtual_input:
|
94
|
+
serieIndex = i - virtual_input - 1
|
95
|
+
|
96
|
+
if len(self.series)-1<serieIndex:
|
97
|
+
serie= {
|
98
|
+
'name': d[i-1],
|
99
|
+
'type': 'scatter',
|
100
|
+
'x': [],
|
101
|
+
'y': []
|
102
|
+
}
|
103
|
+
self.series.append(serie)
|
104
|
+
else:
|
105
|
+
serie=self.series[serieIndex]
|
106
|
+
|
107
|
+
serie['x'].append(runTime)
|
108
|
+
serie['y'].append(val)
|
109
|
+
i+=1
|
110
|
+
if self.chartCallBack is not None:
|
111
|
+
self.chartCallBack(self.series)
|
112
|
+
|
113
|
+
def close(self):
|
114
|
+
self.end =True
|
115
|
+
self.emit('close-job', { 'type': 'close-job', 'context': 'close-job' })
|
116
|
+
def write(self,data):
|
117
|
+
self.emit('send-message', data)
|
118
|
+
@staticmethod
|
119
|
+
def connect(*args, **kwargs):
|
120
|
+
sio = socketio.Client()
|
121
|
+
stream = RealTimeSream('',*args, **kwargs)
|
122
|
+
|
123
|
+
sio.register_namespace(stream)
|
124
|
+
|
125
|
+
url = os.environ.get('CLOUDPSS_API_URL')
|
126
|
+
|
127
|
+
if url is None:
|
128
|
+
url = 'http://10.101.10.91/'
|
129
|
+
|
130
|
+
|
131
|
+
print('connect to ',url,flush=True)
|
132
|
+
sio.connect(url,socketio_path='/api/real-time/socket.io')
|
133
|
+
|
134
|
+
thread = threading.Thread(target=sio.wait, args=())
|
135
|
+
thread.setDaemon(True)
|
136
|
+
thread.start()
|
137
|
+
return stream
|
138
|
+
|
139
|
+
if __name__ == '__main__':
|
140
|
+
# logging.basicConfig(level=logging.DEBUG)
|
141
|
+
job = cloudpss.currentJob()
|
142
|
+
|
143
|
+
remoteAddr= job.args.get('remoteAddr','http://10.101.10.91/')
|
144
|
+
|
145
|
+
if not remoteAddr.startswith('http://'):
|
146
|
+
remoteAddr='http://'+remoteAddr
|
147
|
+
|
148
|
+
os.environ['CLOUDPSS_API_URL'] = remoteAddr
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
def numericValueCallBack(inputNumericValue,outputNumericValue):
|
153
|
+
# job.log(json.dumps(inputNumericValue),key='numeric')
|
154
|
+
job.custom(inputNumericValue,'numeric')
|
155
|
+
job.custom(outputNumericValue,'output')
|
156
|
+
# print(json.dumps(inputNumericValue),flush=True)
|
157
|
+
|
158
|
+
def chartCallBack(series):
|
159
|
+
for serie in series:
|
160
|
+
job.plot([serie],key=serie['name'])
|
161
|
+
# job.plot(series,key='test1')
|
162
|
+
|
163
|
+
def onStartJob(config):
|
164
|
+
virtual_input=config['virtual_input']
|
165
|
+
virtual_output=config['virtual_output']
|
166
|
+
display=config['display']
|
167
|
+
d ={}
|
168
|
+
for x,v in display.items():
|
169
|
+
d[v]=x
|
170
|
+
items =[]
|
171
|
+
for i in range(0,virtual_output):
|
172
|
+
items.append({'title': d[virtual_input+i], 'placeholder': 'Data loading', 'html': False, 'query': d[virtual_input+i]})
|
173
|
+
|
174
|
+
job.container(items,key='output_container')
|
175
|
+
# print(d[virtual_input+i],flush=True)
|
176
|
+
# outputNumericValue[d[virtual_input+i]]=data[virtual_input+i]
|
177
|
+
|
178
|
+
|
179
|
+
stream = RealTimeSream.connect(onStartJob=onStartJob,numericValueCallBack=numericValueCallBack,chartCallBack=chartCallBack)
|
180
|
+
def exitCallback():
|
181
|
+
stream.close()
|
182
|
+
time.sleep(1)
|
183
|
+
print('exit')
|
184
|
+
job.exit(0)
|
185
|
+
|
186
|
+
job.on_abort(exitCallback, args=(), kwargs={})
|
187
|
+
|
188
|
+
print('start',flush=True)
|
189
|
+
while not stream.end :
|
190
|
+
time.sleep(1)
|
191
|
+
pass
|
@@ -24,8 +24,6 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
24
24
|
setattr(self, 'on_start-job', self.on_start_job)
|
25
25
|
setattr(self, 'on_stop-job', self.on_stop_job)
|
26
26
|
setattr(self, 'on_close-job', self.on_close_job)
|
27
|
-
setattr(self, 'on_load-record-data', self.on_load_record_data)
|
28
|
-
setattr(self, 'on_real-time-data', self.on_real_time_data)
|
29
27
|
self.numericValueCallBack = kwargs.get('numericValueCallBack',None)
|
30
28
|
self.chartCallBack = kwargs.get('chartCallBack',None)
|
31
29
|
|
@@ -34,8 +32,6 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
34
32
|
|
35
33
|
def on_connect(self):
|
36
34
|
self.emit('start-job', { 'type': 'start-job', 'context': 'real-time-data' })
|
37
|
-
self.emit('real-time-data', { 'type': 'real-time-data', 'context': 'real-time-data' })
|
38
|
-
self.emit('data-panel', { 'type': 'data-panel', 'context': 'real-time-data' })
|
39
35
|
pass
|
40
36
|
|
41
37
|
def on_disconnect(self):
|
@@ -72,11 +68,15 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
72
68
|
print( 'on_recording',data)
|
73
69
|
def on_load_record_data(self,data):
|
74
70
|
print( 'on_load_record_data',data)
|
75
|
-
def on_real_time_data(self,
|
76
|
-
|
77
|
-
|
71
|
+
def on_real_time_data(self,msg):
|
72
|
+
display=self.config['display']
|
73
|
+
d ={}
|
74
|
+
for x,v in display.items():
|
75
|
+
d[v]=x
|
76
|
+
data =struct.unpack('d'*int(len(msg)/8),msg)
|
78
77
|
i = 0
|
79
78
|
runTime =0
|
79
|
+
self.series=[]
|
80
80
|
channelLength=int(self.config['portNumber'])+1
|
81
81
|
virtual_input=int(self.config['virtual_input'])
|
82
82
|
for index in range(0,len(data)):
|
@@ -88,9 +88,8 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
88
88
|
serieIndex = i - virtual_input - 1
|
89
89
|
|
90
90
|
if len(self.series)-1<serieIndex:
|
91
|
-
|
92
91
|
serie= {
|
93
|
-
'name':
|
92
|
+
'name': d[i-1],
|
94
93
|
'type': 'scatter',
|
95
94
|
'x': [],
|
96
95
|
'y': []
|
@@ -107,8 +106,10 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
107
106
|
|
108
107
|
def close(self):
|
109
108
|
self.end =True
|
110
|
-
self.
|
109
|
+
self.disconnect()
|
110
|
+
# self.emit('close-job', { 'type': 'close-job', 'context': 'close-job' })
|
111
111
|
def write(self,data):
|
112
|
+
print('write',data,flush=True)
|
112
113
|
self.emit('send-message', data)
|
113
114
|
@staticmethod
|
114
115
|
def connect(*args, **kwargs):
|
@@ -116,7 +117,13 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
116
117
|
stream = RealTimeSream('',*args, **kwargs)
|
117
118
|
|
118
119
|
sio.register_namespace(stream)
|
119
|
-
|
120
|
+
|
121
|
+
url = os.environ.get('CLOUDPSS_API_URL')
|
122
|
+
|
123
|
+
if url is None:
|
124
|
+
url = 'http://10.101.10.91/'
|
125
|
+
|
126
|
+
sio.connect(url,socketio_path='/api/real-time/socket.io')
|
120
127
|
|
121
128
|
thread = threading.Thread(target=sio.wait, args=())
|
122
129
|
thread.setDaemon(True)
|
@@ -125,17 +132,23 @@ class RealTimeSream(socketio.ClientNamespace):
|
|
125
132
|
|
126
133
|
if __name__ == '__main__':
|
127
134
|
# logging.basicConfig(level=logging.DEBUG)
|
128
|
-
os.environ['CLOUDPSS_API_URL'] = 'ws://10.101.10.119/'
|
129
135
|
job = cloudpss.currentJob()
|
130
136
|
|
137
|
+
remoteAddr= job.args.get('remoteAddr','http://10.101.10.91/')
|
138
|
+
|
139
|
+
inputKey= job.args.get('inputKey',None)
|
140
|
+
inputValue= job.args.get('inputValue',None)
|
141
|
+
|
142
|
+
print('inputKey',inputKey)
|
143
|
+
print('inputValue',inputValue)
|
144
|
+
if not remoteAddr.startswith('http://'):
|
145
|
+
remoteAddr='http://'+remoteAddr
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
os.environ['CLOUDPSS_API_URL'] = remoteAddr
|
150
|
+
|
131
151
|
|
132
|
-
def numericValueCallBack(inputNumericValue,outputNumericValue):
|
133
|
-
print(inputNumericValue,flush=True)
|
134
|
-
|
135
|
-
def chartCallBack(series):
|
136
|
-
job.plot(series,key='test1')
|
137
|
-
|
138
|
-
stream = RealTimeSream.connect(numericValueCallBack=numericValueCallBack,chartCallBack=chartCallBack)
|
139
152
|
def exitCallback():
|
140
153
|
stream.close()
|
141
154
|
time.sleep(1)
|
@@ -144,7 +157,10 @@ if __name__ == '__main__':
|
|
144
157
|
|
145
158
|
job.on_abort(exitCallback, args=(), kwargs={})
|
146
159
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
160
|
+
|
161
|
+
stream = RealTimeSream.connect()
|
162
|
+
stream.write({inputKey:float(inputValue)})
|
163
|
+
time.sleep(1)
|
164
|
+
stream.close()
|
165
|
+
|
166
|
+
job.exit(0)
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '4.1.1-alpha.11'
|
@@ -1,107 +0,0 @@
|
|
1
|
-
import os,sys
|
2
|
-
import time
|
3
|
-
|
4
|
-
import socketio
|
5
|
-
import threading
|
6
|
-
import struct
|
7
|
-
sio = socketio.Client()
|
8
|
-
class SocketStream():
|
9
|
-
def __init__(self):
|
10
|
-
# sio.connect('ws://10.101.10.119/',socketio_path='/api/real-time/socket.io')
|
11
|
-
pass
|
12
|
-
|
13
|
-
def connect(self):
|
14
|
-
sio.emit('start-job', { 'type': 'start-job', 'context': 'real-time-data' })
|
15
|
-
sio.emit('real-time-data', { 'type': 'real-time-data', 'context': 'real-time-data' })
|
16
|
-
sio.emit('data-panel', { 'type': 'data-panel', 'context': 'real-time-data' })
|
17
|
-
print("I'm connected!")
|
18
|
-
|
19
|
-
@sio.event
|
20
|
-
def connect_error(self,data):
|
21
|
-
print("The connection failed!")
|
22
|
-
|
23
|
-
@sio.event
|
24
|
-
def disconnect(self):
|
25
|
-
print("I'm disconnected!")
|
26
|
-
|
27
|
-
@sio.on('data-panel')
|
28
|
-
def on_event(self,data):
|
29
|
-
print( data)
|
30
|
-
@sio.on('start-job')
|
31
|
-
def start_job(self,data):
|
32
|
-
print( data)
|
33
|
-
@sio.on('stop-job')
|
34
|
-
def stop_job(self,data):
|
35
|
-
print( data)
|
36
|
-
@sio.on('close-job')
|
37
|
-
def close_job(self,data):
|
38
|
-
print( data)
|
39
|
-
@sio.on('recording')
|
40
|
-
def recording(self,data):
|
41
|
-
print( data)
|
42
|
-
@sio.on('load-record-data')
|
43
|
-
def load_record_data(self,data):
|
44
|
-
print( data)
|
45
|
-
@sio.on('real-time-data')
|
46
|
-
def real_time_data(self,data):
|
47
|
-
data =struct.unpack('f'*int(len(data)/4),data)
|
48
|
-
|
49
|
-
print(len(data))
|
50
|
-
|
51
|
-
|
52
|
-
if __name__ == '__main__':
|
53
|
-
# logging.basicConfig(level=logging.DEBUG)
|
54
|
-
os.environ['CLOUDPSS_API_URL'] = 'ws://10.101.10.119/'
|
55
|
-
# job = cloudpss.Job.fetch()
|
56
|
-
|
57
|
-
|
58
|
-
# @sio.event
|
59
|
-
# def connect():
|
60
|
-
# sio.emit('start-job', { 'type': 'start-job', 'context': 'real-time-data' })
|
61
|
-
# sio.emit('real-time-data', { 'type': 'real-time-data', 'context': 'real-time-data' })
|
62
|
-
# sio.emit('data-panel', { 'type': 'data-panel', 'context': 'real-time-data' })
|
63
|
-
# print("I'm connected!")
|
64
|
-
|
65
|
-
# @sio.event
|
66
|
-
# def connect_error(data):
|
67
|
-
# print("The connection failed!")
|
68
|
-
|
69
|
-
# @sio.event
|
70
|
-
# def disconnect():
|
71
|
-
# print("I'm disconnected!")
|
72
|
-
|
73
|
-
# @sio.on('data-panel')
|
74
|
-
# def on_event(data):
|
75
|
-
# print( data)
|
76
|
-
# @sio.on('start-job')
|
77
|
-
# def start_job(data):
|
78
|
-
# print( data)
|
79
|
-
# @sio.on('stop-job')
|
80
|
-
# def stop_job(data):
|
81
|
-
# print( data)
|
82
|
-
# @sio.on('close-job')
|
83
|
-
# def close_job(data):
|
84
|
-
# print( data)
|
85
|
-
# @sio.on('recording')
|
86
|
-
# def recording(data):
|
87
|
-
# print( data)
|
88
|
-
# @sio.on('load-record-data')
|
89
|
-
# def load_record_data(data):
|
90
|
-
# print( data)
|
91
|
-
# @sio.on('real-time-data')
|
92
|
-
# def real_time_data(data):
|
93
|
-
# data =struct.unpack('f'*int(len(data)/4),data)
|
94
|
-
|
95
|
-
# print(len(data))
|
96
|
-
|
97
|
-
|
98
|
-
sio.connect('ws://10.101.10.119/',socketio_path='/api/real-time/socket.io')
|
99
|
-
|
100
|
-
thread = threading.Thread(target=sio.wait, args=())
|
101
|
-
thread.setDaemon(True)
|
102
|
-
thread.start()
|
103
|
-
|
104
|
-
while True:
|
105
|
-
time.sleep(1)
|
106
|
-
print('main')
|
107
|
-
pass
|
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
|