Esempio n. 1
0
class Main():
    def __init__(self):
        # open connection to RETHINKDB
        self.conn = rdb.connect(host=connDataRETHINK["host"],
                                port=connDataRETHINK["port"],
                                db=connDataRETHINK["db"])

        self.reader = RDBReader(connDataRETHINK)
        self.reader.start()

        devices = rdb.table("devices").run(self.conn)
        for device in list(devices):
            table = device["id"]
            if rdb.table(table).is_empty().run(self.conn) is False:
                datos = rdb.table(table).order_by(
                    index=rdb.desc('created_at')).limit(1).run(self.conn)
            self.reader.addTable(table)

        self.reader.signalVal.connect(self.slotFromReader)

    # Slot that is called from Tornado readers to notify that a new data has arrvied
    @Slot(str)
    def slotFromReader(self, table, measure):
        datos = table + " "

        for k, v in measure['data'].iteritems():
            v = str(v).replace(',', '.')
            if is_number(v):
                datos += k + "=" + v + ","

        datos = datos[:-1]
        cabecerahttp = "http://" + influxIP + ":8086/write?db=" + influxDB
        print "curl -i -POST " + cabecerahttp + "-u admin:alwayssmarter --data-binary " + datos
Esempio n. 2
0
	def __init__(self):
		super(MainWindow, self).__init__()
		self.setupUi(self)
		global sensors, CURRENT_TABLE
		#self.conn = rdb.connect(host=connData["host"], port=connData["port"], db=connData["db"], auth_key=connData["auth_key"])
		self.conn = rdb.connect(host=connData["host"], port=connData["port"], db=connData["db"])
		# Set a changefeed for "Dispositivos" with initial state reading
		devices = rdb.table("devices").run(self.conn)
		pp = pprint.PrettyPrinter(indent=4)

		# Init the DB reader thread
		self.reader = RDBReader(connData, sensors)
		self.reader.signalVal.connect(self.slotFromReader)
		self.reader.start()

		for device in list(devices):
			#if device["id"] == CURRENT:
			ide = device["id"]
			sensors[ide] = device
			#table = "D" + ide.replace("-", "")
			#sensors[ide]["table"] = table
			# Poner todos como OFF y hacer esto en background
			if rdb.table(ide).is_empty().run(self.conn) is False:
				datos = rdb.table(ide).max("created_at").run(self.conn)
				sensors[ide]["canales"] = list()
				for k,v in datos["data"].iteritems():
					sensors[ide]["canales"].append({"name":k,"value":v})
			sensors[ide]["timer"] = Timer(ide, 1000)
			sensors[ide]["timer"].timeout.connect(self.slotCountDown)
			#secs = (dt.datetime.now(pytz.utc) - parser.parse(datos["created_at"])).total_seconds()
			secs = (dt.datetime.now(pytz.utc) - datos["created_at"]).total_seconds()
			sensors[ide]["updated"] = dt.timedelta(seconds=secs)
			sensors[ide]["active"] = True
			self.reader.addTable(ide)

		# print "Tree -----------------------"
		# pp = pprint.PrettyPrinter(indent=4)
		# pp.pprint(sensors)
		# print "-----------------------"
		
		# create Tree
		self.createTree()
		self.treeWidget.itemClicked.connect(self.on_itemClicked)
		
		# create UI table
		self.createTable(self.tableWidget)
		self.tableWidget.cellClicked.connect(self.on_graphClicked)
		self.show()
		
		# Start timers
		# self.reader.addTable("8c3450b7-9a74-4149-9ed3-a4098f4f88b3", "D8c3450b79a7441499ed3a4098f4f88b3")
		[s["timer"].start() for s in sensors.values()]
		
		# Svg rendering
		self.svg = Svg(self.tabWidget.widget(1), self.svgLayout)
		#self.tabWidget.currentChanged.connect(self.doSvg)

		# Flip button
		self.flipButton.clicked.connect(self.flipAll)
Esempio n. 3
0
    def __init__(self):
        # open connection to RETHINKDB
        self.conn = rdb.connect(host=connDataRETHINK["host"],
                                port=connDataRETHINK["port"],
                                db=connDataRETHINK["db"])

        self.reader = RDBReader(connDataRETHINK)
        self.reader.start()

        devices = rdb.table("devices").run(self.conn)
        for device in list(devices):
            table = device["id"]
            if rdb.table(table).is_empty().run(self.conn) is False:
                datos = rdb.table(table).order_by(
                    index=rdb.desc('created_at')).limit(1).run(self.conn)
            self.reader.addTable(table)

        self.reader.signalVal.connect(self.slotFromReader)
Esempio n. 4
0
class MainWindow(QMainWindow, Ui_MainWindow):
	def __init__(self):
		super(MainWindow, self).__init__()
		self.setupUi(self)
		global sensors, CURRENT_TABLE
		#self.conn = rdb.connect(host=connData["host"], port=connData["port"], db=connData["db"], auth_key=connData["auth_key"])
		self.conn = rdb.connect(host=connData["host"], port=connData["port"], db=connData["db"])
		# Set a changefeed for "Dispositivos" with initial state reading
		devices = rdb.table("devices").run(self.conn)
		pp = pprint.PrettyPrinter(indent=4)

		# Init the DB reader thread
		self.reader = RDBReader(connData, sensors)
		self.reader.signalVal.connect(self.slotFromReader)
		self.reader.start()

		for device in list(devices):
			#if device["id"] == CURRENT:
			ide = device["id"]
			sensors[ide] = device
			#table = "D" + ide.replace("-", "")
			#sensors[ide]["table"] = table
			# Poner todos como OFF y hacer esto en background
			if rdb.table(ide).is_empty().run(self.conn) is False:
				datos = rdb.table(ide).max("created_at").run(self.conn)
				sensors[ide]["canales"] = list()
				for k,v in datos["data"].iteritems():
					sensors[ide]["canales"].append({"name":k,"value":v})
			sensors[ide]["timer"] = Timer(ide, 1000)
			sensors[ide]["timer"].timeout.connect(self.slotCountDown)
			#secs = (dt.datetime.now(pytz.utc) - parser.parse(datos["created_at"])).total_seconds()
			secs = (dt.datetime.now(pytz.utc) - datos["created_at"]).total_seconds()
			sensors[ide]["updated"] = dt.timedelta(seconds=secs)
			sensors[ide]["active"] = True
			self.reader.addTable(ide)

		# print "Tree -----------------------"
		# pp = pprint.PrettyPrinter(indent=4)
		# pp.pprint(sensors)
		# print "-----------------------"
		
		# create Tree
		self.createTree()
		self.treeWidget.itemClicked.connect(self.on_itemClicked)
		
		# create UI table
		self.createTable(self.tableWidget)
		self.tableWidget.cellClicked.connect(self.on_graphClicked)
		self.show()
		
		# Start timers
		# self.reader.addTable("8c3450b7-9a74-4149-9ed3-a4098f4f88b3", "D8c3450b79a7441499ed3a4098f4f88b3")
		[s["timer"].start() for s in sensors.values()]
		
		# Svg rendering
		self.svg = Svg(self.tabWidget.widget(1), self.svgLayout)
		#self.tabWidget.currentChanged.connect(self.doSvg)

		# Flip button
		self.flipButton.clicked.connect(self.flipAll)

	#Slot to flip all devices to off/on
	def flipAll(self):
		print "hola", self.flipButton.isChecked()
		if self.flipButton.isChecked():
			for v in sensors.itervalues():
				v["active"] = False
		else:
			for v in sensors.itervalues():
				v["active"] = True
		self.treeWidget.clear()
		self.createTree()
		self.tableWidget.clear()
		self.createTable(self.tableWidget)

	# @Slot(int)
	# def doSvg(self, index):
	# 	print "now we are"
	# 	if index is not 2:
	# 		return

	def createTree(self):
		self.treeWidget.setColumnCount(2)
		self.treeWidget.setHeaderLabels(["On/off", "Dispositivo"])
		self.treeWidget.header().setResizeMode(0, QHeaderView.ResizeToContents)
		#self.treeWidget.header().setResizeMode(1, QHeaderView.Fixed)
		for s in sensors.values():
			top = QTreeWidgetItem(self.treeWidget)
			#name.setText(0, s["description"] + "   ( " + s["id"] + " )")
			top.setText(1, s["Description"])
			if s["active"] is True:
				top.setIcon(0, QIcon("icons/greenBall.png"))
			else:
				top.setIcon(0, QIcon("icons/redBall.png"))
			child = QTreeWidgetItem(top)
			child.setText(1, s["id"])
			#child = QTreeWidgetItem(top)
			#child.setText(1, s["type"])
			#child = QTreeWidgetItem(top)
			#child.setText(1, s["location"])

	def createTable(self, tableView):
		itera = 0
		tableView.setColumnCount(4)
		tableView.horizontalHeader().hide()
		tableView.verticalHeader().hide()
		tableView.setWordWrap(True)
		tableView.setTextElideMode(Qt.ElideNone)
		#tableView.setShowGrid(False)

		for name, sensor in sensors.iteritems():
			if sensor["active"] is False:
				continue
			tableView.setRowCount(itera + 1)
			tableView.setSpan(itera, 0, 1, tableView.columnCount())
			item = QTableWidgetItem(sensor["Description"] + "   ( " + sensor["id"] + " )")
			item.setTextAlignment(Qt.AlignLeft)
			font = QFont()
			font.setPointSize(13)
			font.setBold(True)
			item.setFont(font)
			tableView.setItem(itera, 0, item)
			itera += 1
			tableView.setRowCount(itera + 1)
			head = ("Name", "Updated", "Value", "Graph")
			for h, j in zip(head, range(len(head))):
				item = QTableWidgetItem(h)
				item.setTextAlignment(Qt.AlignCenter)
				font.setPointSize(11)
				item.setForeground(Qt.blue)
				item.setFont(font)
				tableView.setItem(itera, j, item)
			itera += 1

			if "canales" not in sensor:
				continue

			for j in range(0, len(sensor["canales"])):
				tableView.setRowCount(itera + 1)

				item = QTableWidgetItem(sensor["canales"][j]["name"])

				item.setTextAlignment(Qt.AlignCenter)
				tableView.setItem(itera, 0, item)

				item = QTableWidgetItem("{:0>8}".format(sensor["updated"]).split('.', 1)[0])
				item.setTextAlignment(Qt.AlignCenter)
				if sensor["updated"].seconds < 600:
					item.setForeground(QBrush(Qt.green))
				else:
					item.setForeground(QBrush(Qt.red))
				tableView.setItem(itera, 1, item)

				#Add position of counter
				sensor["canales"][j]["counterPos"] = (itera, 1)

				item = QTableWidgetItem(sensor["canales"][j]["value"])
				item.setTextAlignment(Qt.AlignCenter)
				tableView.setItem(itera, 2, item)

				pix = QPixmap("icons/graph4.png").scaled(30, 30, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
				lab = QLabel()
				lab.setPixmap(pix)
				lab.setAlignment(Qt.AlignCenter)
				tableView.setCellWidget(itera, 3, lab)

				#Add widget
				sensor["canales"][j]["widget"] = item

				itera += 1

			tableView.resizeColumnsToContents()
			tableView.horizontalHeader().setResizeMode(QHeaderView.Stretch);

#
#SLOTS
#

	@Slot(QTreeWidgetItem, int)
	def on_itemClicked(self, item, col):
		disp = item.child(0).text(1)
		if disp in sensors:                ##Connection to model
			if sensors[disp]["active"] is True:
				item.setIcon(0, QIcon("icons/redBall.png"))
				sensors[disp]["active"] = False
			else:
				item.setIcon(0, QIcon("icons/greenBall.png"))
				sensors[disp]["active"] = True
		self.tableWidget.clear()
		self.createTable(self.tableWidget)

	@Slot(int, int)
	def on_graphClicked(self, row, col):
		print "graph clicked", row, col
		#check if is a valid spot
		if col is not 3:
			return
		found = False
		for k, s in sensors.items():
			for c, pos in zip(s["canales"], range(len(s["canales"]))):
				#Check if clicked row is on of the stored rows
				if c["counterPos"][0] == row:
					self.p = Plotter(self.conn, k, s, pos)
					break

	@Slot(str)
	def plotUpdate(self, ident):
		if ident == CURRENT:
			self.data.append({'x': 	self.icont, 'y': float(sensors[ident]["canales"][0]["value"])})
			x = [item['x'] for item in self.data]
			y = [item['y'] for item in self.data]
			self.curve.setData(x=x, y=y)
			self.icont += 1

	@Slot(str)
	def slotCountDown(self, ident):
		sensors[ident]["updated"] += dt.timedelta(seconds=1)
		if sensors[ident]["active"] is False:
			return
		for canal in sensors[ident]["canales"]:
			if "counterPos" in canal:
				row, col = canal["counterPos"]
				self.tableWidget.item(row, col).setText("{:0>8}".format(sensors[ident]["updated"]).split('.', 1)[0])


	@Slot(str)
	def slotFromReader(self, ident):
		self.tableWidget.clear()
		self.createTable(self.tableWidget)
Esempio n. 5
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        global sensors, CURRENT_TABLE
        #self.conn = rdb.connect(host=connData["host"], port=connData["port"], db=connData["db"], auth_key=connData["auth_key"])
        self.conn = rdb.connect(host=connData["host"],
                                port=connData["port"],
                                db=connData["db"])
        # Set a changefeed for "Dispositivos" with initial state reading
        devices = rdb.table("devices").run(self.conn)
        pp = pprint.PrettyPrinter(indent=4)

        # Init the DB reader thread
        self.reader = RDBReader(connData, sensors)
        self.reader.signalVal.connect(self.slotFromReader)
        self.reader.start()

        for device in list(devices):
            #if device["id"] == CURRENT:
            ide = device["id"]
            sensors[ide] = device
            #table = "D" + ide.replace("-", "")
            #sensors[ide]["table"] = table
            # Poner todos como OFF y hacer esto en background
            if rdb.table(ide).is_empty().run(self.conn) is False:
                datos = rdb.table(ide).max("created_at").run(self.conn)
                sensors[ide]["canales"] = list()
                for k, v in datos["data"].iteritems():
                    sensors[ide]["canales"].append({"name": k, "value": v})
            sensors[ide]["timer"] = Timer(ide, 1000)
            sensors[ide]["timer"].timeout.connect(self.slotCountDown)
            #secs = (dt.datetime.now(pytz.utc) - parser.parse(datos["created_at"])).total_seconds()
            secs = (dt.datetime.now(pytz.utc) -
                    datos["created_at"]).total_seconds()
            sensors[ide]["updated"] = dt.timedelta(seconds=secs)
            sensors[ide]["active"] = True
            self.reader.addTable(ide)

        # print "Tree -----------------------"
        # pp = pprint.PrettyPrinter(indent=4)
        # pp.pprint(sensors)
        # print "-----------------------"

        # create Tree
        self.createTree()
        self.treeWidget.itemClicked.connect(self.on_itemClicked)

        # create UI table
        self.createTable(self.tableWidget)
        self.tableWidget.cellClicked.connect(self.on_graphClicked)
        self.show()

        # Start timers
        # self.reader.addTable("8c3450b7-9a74-4149-9ed3-a4098f4f88b3", "D8c3450b79a7441499ed3a4098f4f88b3")
        [s["timer"].start() for s in sensors.values()]

        # Svg rendering
        self.svg = Svg(self.tabWidget.widget(1), self.svgLayout)
        #self.tabWidget.currentChanged.connect(self.doSvg)

        # Flip button
        self.flipButton.clicked.connect(self.flipAll)
Esempio n. 6
0
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        global sensors, CURRENT_TABLE
        #self.conn = rdb.connect(host=connData["host"], port=connData["port"], db=connData["db"], auth_key=connData["auth_key"])
        self.conn = rdb.connect(host=connData["host"],
                                port=connData["port"],
                                db=connData["db"])
        # Set a changefeed for "Dispositivos" with initial state reading
        devices = rdb.table("devices").run(self.conn)
        pp = pprint.PrettyPrinter(indent=4)

        # Init the DB reader thread
        self.reader = RDBReader(connData, sensors)
        self.reader.signalVal.connect(self.slotFromReader)
        self.reader.start()

        for device in list(devices):
            #if device["id"] == CURRENT:
            ide = device["id"]
            sensors[ide] = device
            #table = "D" + ide.replace("-", "")
            #sensors[ide]["table"] = table
            # Poner todos como OFF y hacer esto en background
            if rdb.table(ide).is_empty().run(self.conn) is False:
                datos = rdb.table(ide).max("created_at").run(self.conn)
                sensors[ide]["canales"] = list()
                for k, v in datos["data"].iteritems():
                    sensors[ide]["canales"].append({"name": k, "value": v})
            sensors[ide]["timer"] = Timer(ide, 1000)
            sensors[ide]["timer"].timeout.connect(self.slotCountDown)
            #secs = (dt.datetime.now(pytz.utc) - parser.parse(datos["created_at"])).total_seconds()
            secs = (dt.datetime.now(pytz.utc) -
                    datos["created_at"]).total_seconds()
            sensors[ide]["updated"] = dt.timedelta(seconds=secs)
            sensors[ide]["active"] = True
            self.reader.addTable(ide)

        # print "Tree -----------------------"
        # pp = pprint.PrettyPrinter(indent=4)
        # pp.pprint(sensors)
        # print "-----------------------"

        # create Tree
        self.createTree()
        self.treeWidget.itemClicked.connect(self.on_itemClicked)

        # create UI table
        self.createTable(self.tableWidget)
        self.tableWidget.cellClicked.connect(self.on_graphClicked)
        self.show()

        # Start timers
        # self.reader.addTable("8c3450b7-9a74-4149-9ed3-a4098f4f88b3", "D8c3450b79a7441499ed3a4098f4f88b3")
        [s["timer"].start() for s in sensors.values()]

        # Svg rendering
        self.svg = Svg(self.tabWidget.widget(1), self.svgLayout)
        #self.tabWidget.currentChanged.connect(self.doSvg)

        # Flip button
        self.flipButton.clicked.connect(self.flipAll)

    #Slot to flip all devices to off/on
    def flipAll(self):
        print "hola", self.flipButton.isChecked()
        if self.flipButton.isChecked():
            for v in sensors.itervalues():
                v["active"] = False
        else:
            for v in sensors.itervalues():
                v["active"] = True
        self.treeWidget.clear()
        self.createTree()
        self.tableWidget.clear()
        self.createTable(self.tableWidget)

    # @Slot(int)
    # def doSvg(self, index):
    # 	print "now we are"
    # 	if index is not 2:
    # 		return

    def createTree(self):
        self.treeWidget.setColumnCount(2)
        self.treeWidget.setHeaderLabels(["On/off", "Dispositivo"])
        self.treeWidget.header().setResizeMode(0, QHeaderView.ResizeToContents)
        #self.treeWidget.header().setResizeMode(1, QHeaderView.Fixed)
        for s in sensors.values():
            top = QTreeWidgetItem(self.treeWidget)
            #name.setText(0, s["description"] + "   ( " + s["id"] + " )")
            top.setText(1, s["Description"])
            if s["active"] is True:
                top.setIcon(0, QIcon("icons/greenBall.png"))
            else:
                top.setIcon(0, QIcon("icons/redBall.png"))
            child = QTreeWidgetItem(top)
            child.setText(1, s["id"])
            #child = QTreeWidgetItem(top)
            #child.setText(1, s["type"])
            #child = QTreeWidgetItem(top)
            #child.setText(1, s["location"])

    def createTable(self, tableView):
        itera = 0
        tableView.setColumnCount(4)
        tableView.horizontalHeader().hide()
        tableView.verticalHeader().hide()
        tableView.setWordWrap(True)
        tableView.setTextElideMode(Qt.ElideNone)
        #tableView.setShowGrid(False)

        for name, sensor in sensors.iteritems():
            if sensor["active"] is False:
                continue
            tableView.setRowCount(itera + 1)
            tableView.setSpan(itera, 0, 1, tableView.columnCount())
            item = QTableWidgetItem(sensor["Description"] + "   ( " +
                                    sensor["id"] + " )")
            item.setTextAlignment(Qt.AlignLeft)
            font = QFont()
            font.setPointSize(13)
            font.setBold(True)
            item.setFont(font)
            tableView.setItem(itera, 0, item)
            itera += 1
            tableView.setRowCount(itera + 1)
            head = ("Name", "Updated", "Value", "Graph")
            for h, j in zip(head, range(len(head))):
                item = QTableWidgetItem(h)
                item.setTextAlignment(Qt.AlignCenter)
                font.setPointSize(11)
                item.setForeground(Qt.blue)
                item.setFont(font)
                tableView.setItem(itera, j, item)
            itera += 1

            if "canales" not in sensor:
                continue

            for j in range(0, len(sensor["canales"])):
                tableView.setRowCount(itera + 1)

                item = QTableWidgetItem(sensor["canales"][j]["name"])

                item.setTextAlignment(Qt.AlignCenter)
                tableView.setItem(itera, 0, item)

                item = QTableWidgetItem("{:0>8}".format(
                    sensor["updated"]).split('.', 1)[0])
                item.setTextAlignment(Qt.AlignCenter)
                if sensor["updated"].seconds < 600:
                    item.setForeground(QBrush(Qt.green))
                else:
                    item.setForeground(QBrush(Qt.red))
                tableView.setItem(itera, 1, item)

                #Add position of counter
                sensor["canales"][j]["counterPos"] = (itera, 1)

                item = QTableWidgetItem(sensor["canales"][j]["value"])
                item.setTextAlignment(Qt.AlignCenter)
                tableView.setItem(itera, 2, item)

                pix = QPixmap("icons/graph4.png").scaled(
                    30, 30, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
                lab = QLabel()
                lab.setPixmap(pix)
                lab.setAlignment(Qt.AlignCenter)
                tableView.setCellWidget(itera, 3, lab)

                #Add widget
                sensor["canales"][j]["widget"] = item

                itera += 1

            tableView.resizeColumnsToContents()
            tableView.horizontalHeader().setResizeMode(QHeaderView.Stretch)


#
#SLOTS
#

    @Slot(QTreeWidgetItem, int)
    def on_itemClicked(self, item, col):
        disp = item.child(0).text(1)
        if disp in sensors:  ##Connection to model
            if sensors[disp]["active"] is True:
                item.setIcon(0, QIcon("icons/redBall.png"))
                sensors[disp]["active"] = False
            else:
                item.setIcon(0, QIcon("icons/greenBall.png"))
                sensors[disp]["active"] = True
        self.tableWidget.clear()
        self.createTable(self.tableWidget)

    @Slot(int, int)
    def on_graphClicked(self, row, col):
        print "graph clicked", row, col
        #check if is a valid spot
        if col is not 3:
            return
        found = False
        for k, s in sensors.items():
            for c, pos in zip(s["canales"], range(len(s["canales"]))):
                #Check if clicked row is on of the stored rows
                if c["counterPos"][0] == row:
                    self.p = Plotter(self.conn, k, s, pos)
                    break

    @Slot(str)
    def plotUpdate(self, ident):
        if ident == CURRENT:
            self.data.append({
                'x': self.icont,
                'y': float(sensors[ident]["canales"][0]["value"])
            })
            x = [item['x'] for item in self.data]
            y = [item['y'] for item in self.data]
            self.curve.setData(x=x, y=y)
            self.icont += 1

    @Slot(str)
    def slotCountDown(self, ident):
        sensors[ident]["updated"] += dt.timedelta(seconds=1)
        if sensors[ident]["active"] is False:
            return
        for canal in sensors[ident]["canales"]:
            if "counterPos" in canal:
                row, col = canal["counterPos"]
                self.tableWidget.item(row, col).setText("{:0>8}".format(
                    sensors[ident]["updated"]).split('.', 1)[0])

    @Slot(str)
    def slotFromReader(self, ident):
        self.tableWidget.clear()
        self.createTable(self.tableWidget)