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