##// END OF EJS Templates
merge from graphics branch
Juan C. Valdez -
r863:2444bfa6a546
parent child
Show More
@@ -6,6 +6,7 import time
6 import json
6 import json
7 import numpy
7 import numpy
8 import paho.mqtt.client as mqtt
8 import paho.mqtt.client as mqtt
9 from pymongo import MongoClient
9
10
10 from schainpy.model.proc.jroproc_base import Operation
11 from schainpy.model.proc.jroproc_base import Operation
11
12
@@ -13,6 +14,11 class PrettyFloat(float):
13 def __repr__(self):
14 def __repr__(self):
14 return '%.2f' % self
15 return '%.2f' % self
15
16
17 def roundFloats(obj):
18 if isinstance(obj, list):
19 return map(roundFloats, obj)
20 elif isinstance(obj, float):
21 return round(obj, 2)
16
22
17 def pretty_floats(obj):
23 def pretty_floats(obj):
18 if isinstance(obj, float):
24 if isinstance(obj, float):
@@ -60,15 +66,20 class PublishData(Operation):
60 print "MQTT Conection error."
66 print "MQTT Conection error."
61 self.client = False
67 self.client = False
62
68
63 def setup(self, host, port=1883, username=None, password=None, **kwargs):
69 def setup(self, host, port=1883, username=None, password=None, mongo=0, clientId="user", **kwargs):
64
70
71 self.mongo = mongo
65 self.topic = kwargs.get('topic', 'schain')
72 self.topic = kwargs.get('topic', 'schain')
66 self.delay = kwargs.get('delay', 0)
73 self.delay = kwargs.get('delay', 0)
67 self.plottype = kwargs.get('plottype', 'spectra')
74 self.plottype = kwargs.get('plottype', 'spectra')
68 self.host = host
75 self.host = host
69 self.port = port
76 self.port = port
77 self.clientId = clientId
70 self.cnt = 0
78 self.cnt = 0
71 setup = []
79 setup = []
80 if (self.mongo):
81 self.MongoClient = MongoClient("mongodb://127.0.0.1:3003")
82 self.MongoDB = self.MongoClient['meteor']
72 for plot in self.plottype:
83 for plot in self.plottype:
73 setup.append({
84 setup.append({
74 'plot': plot,
85 'plot': plot,
@@ -81,13 +92,14 class PublishData(Operation):
81 'zrange': getattr(self, plot + '_' + 'zrange', False),
92 'zrange': getattr(self, plot + '_' + 'zrange', False),
82 })
93 })
83 self.client = mqtt.Client(
94 self.client = mqtt.Client(
84 client_id='jc'+self.topic + 'SCHAIN',
95 client_id=self.clientId + self.topic + 'SCHAIN',
85 clean_session=True)
96 clean_session=True)
86 self.client.on_disconnect = self.on_disconnect
97 self.client.on_disconnect = self.on_disconnect
87 self.connect()
98 self.connect()
88
99
89 def publish_data(self, plottype):
100 def publish_data(self, plottype):
90 data = getattr(self.dataOut, 'data_spc')
101 data = getattr(self.dataOut, 'data_spc')
102 yData = self.dataOut.heightList[:2].tolist()
91 if plottype == 'spectra':
103 if plottype == 'spectra':
92 z = data/self.dataOut.normFactor
104 z = data/self.dataOut.normFactor
93 zdB = 10*numpy.log10(z)
105 zdB = 10*numpy.log10(z)
@@ -99,11 +111,14 class PublishData(Operation):
99 Z[i] = zdB[i][::dx, ::dy].tolist()
111 Z[i] = zdB[i][::dx, ::dy].tolist()
100 payload = {
112 payload = {
101 'timestamp': self.dataOut.utctime,
113 'timestamp': self.dataOut.utctime,
102 'data': pretty_floats(Z),
114 'data': roundFloats(Z),
103 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
115 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
104 'interval': self.dataOut.getTimeInterval(),
116 'interval': self.dataOut.getTimeInterval(),
105 'xRange': [0, 80]
117 'xRange': [0, 80],
118 'type': plottype,
119 'yData': yData
106 }
120 }
121 # print payload
107
122
108 elif plottype in ('rti', 'power'):
123 elif plottype in ('rti', 'power'):
109 z = data/self.dataOut.normFactor
124 z = data/self.dataOut.normFactor
@@ -116,25 +131,40 class PublishData(Operation):
116 AVG[i] = avgdB[i][::dy].tolist()
131 AVG[i] = avgdB[i][::dy].tolist()
117 payload = {
132 payload = {
118 'timestamp': self.dataOut.utctime,
133 'timestamp': self.dataOut.utctime,
119 'data': pretty_floats(AVG),
134 'data': roundFloats(AVG),
120 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
135 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
121 'interval': self.dataOut.getTimeInterval(),
136 'interval': self.dataOut.getTimeInterval(),
122 'xRange': [0, 80]
137 'xRange': [0, 80],
138 'type': plottype,
139 'yData': yData
123 }
140 }
124 elif plottype == 'noise':
141 elif plottype == 'noise':
125 noise = self.dataOut.getNoise()/self.dataOut.normFactor
142 noise = self.dataOut.getNoise()/self.dataOut.normFactor
126 noisedB = 10*numpy.log10(noise)
143 noisedB = 10*numpy.log10(noise)
127 payload = {
144 payload = {
128 'timestamp': self.dataOut.utctime,
145 'timestamp': self.dataOut.utctime,
129 'data': pretty_floats(noisedB.reshape(-1, 1).tolist()),
146 'data': roundFloats(noisedB.reshape(-1, 1).tolist()),
130 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
147 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
131 'interval': self.dataOut.getTimeInterval(),
148 'interval': self.dataOut.getTimeInterval(),
132 'xRange': [0, 80]
149 'xRange': [0, 80],
150 'type': plottype,
151 'yData': yData
152 }
153 else:
154 print "Tipo de grafico invalido"
155 payload = {
156 'data': 'None',
157 'timestamp': 'None',
158 'type': None
133 }
159 }
134
135 print 'Publishing data to {}'.format(self.host)
160 print 'Publishing data to {}'.format(self.host)
136 print '*************************'
161 print '*************************'
162 print self.client
137 self.client.publish(self.topic + plottype, json.dumps(payload), qos=0)
163 self.client.publish(self.topic + plottype, json.dumps(payload), qos=0)
164 if (self.mongo):
165 print 'Publishing data to Mongo'
166 result = self.MongoDB.realtime.insert_one(payload)
167 print result.inserted_id
138
168
139
169
140 def run(self, dataOut, host, **kwargs):
170 def run(self, dataOut, host, **kwargs):
General Comments 0
You need to be logged in to leave comments. Login now