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.
Files changed (98) hide show
  1. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/PKG-INFO +1 -1
  2. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/functionExecution.py +10 -0
  3. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/DataManageModel.py +65 -16
  4. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/IESLabPlan.py +0 -9
  5. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/IESLabSimulation.py +1 -1
  6. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/PlanModel.py +11 -7
  7. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/messageStreamReceiver.py +0 -2
  8. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/model.py +1 -2
  9. cloudpss-4.1.1a13/cloudpss/version.py +1 -0
  10. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/PKG-INFO +1 -1
  11. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/SOURCES.txt +1 -1
  12. cloudpss-4.1.1a13/test/testRt.py +191 -0
  13. cloudpss-4.1.1a11/test/testRt.py → cloudpss-4.1.1a13/test/testRt2.py +39 -23
  14. cloudpss-4.1.1a11/cloudpss/version.py +0 -1
  15. cloudpss-4.1.1a11/test/testRt copy.py +0 -107
  16. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/README.md +0 -0
  17. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/__init__.py +0 -0
  18. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/__init__.py +0 -0
  19. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/__init__.py +0 -0
  20. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/job.py +0 -0
  21. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/messageStreamReceiver.py +0 -0
  22. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/job/messageStreamSender.py +0 -0
  23. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/__init__.py +0 -0
  24. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/model.py +0 -0
  25. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/revision.py +0 -0
  26. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/model/topology.py +0 -0
  27. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/utils/AsyncIterable.py +0 -0
  28. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/utils/__init__.py +0 -0
  29. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/asyncio/utils/httpAsyncRequest.py +0 -0
  30. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/__init__.py +0 -0
  31. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/function.py +0 -0
  32. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/function/job.py +0 -0
  33. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/EvaluationModel.py +0 -0
  34. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/ieslab/__init__.py +0 -0
  35. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/__init__.py +0 -0
  36. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/job.py +0 -0
  37. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobMachine.py +0 -0
  38. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobPolicy.py +0 -0
  39. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobQueue.py +0 -0
  40. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobReceiver.py +0 -0
  41. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/jobTres.py +0 -0
  42. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/messageStreamSender.py +0 -0
  43. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/EMTView.py +0 -0
  44. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/IESLabSimulationView.py +0 -0
  45. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/IESLabTypicalDayView.py +0 -0
  46. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/IESView.py +0 -0
  47. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/PowerFlowView.py +0 -0
  48. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/__init__.py +0 -0
  49. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/job/view/view.py +0 -0
  50. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/__init__.py +0 -0
  51. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/__init__.py +0 -0
  52. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/component.py +0 -0
  53. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/diagram.py +0 -0
  54. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/implements/implement.py +0 -0
  55. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/jobDefinitions.py +0 -0
  56. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/revision.py +0 -0
  57. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/model/topology.py +0 -0
  58. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/project/__init__.py +0 -0
  59. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/project/project.py +0 -0
  60. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/IESLabEvaluationResult.py +0 -0
  61. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/IESLabPlanResult.py +0 -0
  62. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/IESLabTypicalDayResult.py +0 -0
  63. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/MessageStreamReceiver.py +0 -0
  64. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/__init__.py +0 -0
  65. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/receiver.py +0 -0
  66. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/result.py +0 -0
  67. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/runner.py +0 -0
  68. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/storage.py +0 -0
  69. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/runner/transform.py +0 -0
  70. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/IO.py +0 -0
  71. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/__init__.py +0 -0
  72. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/dataEncoder.py +0 -0
  73. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/graphqlUtil.py +0 -0
  74. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/httprequests.py +0 -0
  75. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/matlab.py +0 -0
  76. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/utils/yamlLoader.py +0 -0
  77. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss/verify.py +0 -0
  78. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/dependency_links.txt +0 -0
  79. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/requires.txt +0 -0
  80. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/cloudpss.egg-info/top_level.txt +0 -0
  81. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/setup.cfg +0 -0
  82. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/setup.py +0 -0
  83. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-async.py +0 -0
  84. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-async2.py +0 -0
  85. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-async3.py +0 -0
  86. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-sdk.py +0 -0
  87. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-sdk1.py +0 -0
  88. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-snapshot.py +0 -0
  89. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test-topology.py +0 -0
  90. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test.py +0 -0
  91. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test7950.py +0 -0
  92. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testAsync.py +0 -0
  93. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testEvent.py +0 -0
  94. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testSend.py +0 -0
  95. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test_in_new_web_1.py +0 -0
  96. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test_ws.py +0 -0
  97. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/test_ws2.py +0 -0
  98. {cloudpss-4.1.1a11 → cloudpss-4.1.1a13}/test/testb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudpss
3
- Version: 4.1.1a11
3
+ Version: 4.1.1a13
4
4
  Summary: cloudpss sdk
5
5
  Home-page: https://www.cloudpss.net
6
6
  Author: cloudpss
@@ -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
- list = ['thermalLoads', 'electricLoads', 'fuels', 'typhoon', 'rainfall', 'earthquake', 'extremeCold']
87
- for kind,value in self._kindUrlMap.items():
88
- try:
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
- if kind in list:
91
- dataList = self._fetchItemData(self._kindUrlMap[kind], None)
92
- else:
93
- dataList = self._fetchItemData(self._kindUrlMap[kind], kind)
94
- except Exception as e:
95
- pass
96
- self._kindItemDataMap[kind]=dataList
97
- for val in dataList:
98
- self._itemDataMap[str(val['timeid'])]=val
99
- self._itemDataMap[str(val['id'])]=val
100
- self._kindIdMap[str(val['timeid'])]=kind
101
- self._kindIdMap[str(val['id'])]=kind
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):
@@ -5,7 +5,7 @@ from .DataManageModel import IESSimulationDataManageModel
5
5
 
6
6
 
7
7
  class IESLabSimulation(object):
8
- def __init__(self, project={},model=None):
8
+ def __init__(self, project={},model:Model=None):
9
9
  '''
10
10
  初始化
11
11
  '''
@@ -41,7 +41,7 @@ class IESLabPlanModel(object):
41
41
  except:
42
42
  return OptimizationMode['经济性']
43
43
 
44
- def SetOptimizationInfo(self, optType):
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
- logs = IESLabPlanResult(self.simulationId).GetLogs()
132
- if logs is not None:
133
- for log in logs:
134
- if(log.get('data', '') == 'run ends'):
135
- isRunning = False
136
- break
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'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudpss
3
- Version: 4.1.1a11
3
+ Version: 4.1.1a13
4
4
  Summary: cloudpss sdk
5
5
  Home-page: https://www.cloudpss.net
6
6
  Author: cloudpss
@@ -85,8 +85,8 @@ test/test.py
85
85
  test/test7950.py
86
86
  test/testAsync.py
87
87
  test/testEvent.py
88
- test/testRt copy.py
89
88
  test/testRt.py
89
+ test/testRt2.py
90
90
  test/testSend.py
91
91
  test/test_in_new_web_1.py
92
92
  test/test_ws.py
@@ -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,d):
76
-
77
- data =struct.unpack('d'*int(len(d)/8),d)
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': 'data%d'%serieIndex,
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.emit('close-job', { 'type': 'close-job', 'context': 'close-job' })
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
- sio.connect('ws://10.101.10.119/',socketio_path='/api/real-time/socket.io')
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
- print('start',flush=True)
148
- while not stream.end :
149
- time.sleep(1)
150
- pass
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