Commit 8926ddd0 authored by Bruno Thomazi Zanette's avatar Bruno Thomazi Zanette 🎱
Browse files

Programa que recebe dados CosmiPampa

parent 984dfc11
######
###### Programa que roda até ser encerrado (ctrl+c) recebendo mensagens de um tópico por mqtt
###### e salva em uma date base. As mensagens de erro são mandadas para o tópico feedback no localhost
######
import logging
import paho.mqtt.client as mqtt
import time
import hashlib
import mysql.connector
############ valores iniciais ############
global cur
broker_address="localhost"
topico= "cosmic"
user_db = '[usuario mysql]'
password_db = '[senha mysql]'
db_connection = mysql.connector.connect(host='localhost',user = user_db, passwd = password_db, auth_plugin='mysql_native_password')
cur = db_connection.cursor()
############ funções ############
def insert_bd(colunas,valores):
cur.execute("USE [nome Banco de dados];")
cur.execute("INSERT INTO eventos ({}) VALUES({})".format(colunas,valores)) #Salva comando no cursor
def on_message(client, userdata, message): # Funcao que roda toda vez que se recebe uma mensagem
# mensagens no terminal (opcional)
print("message received " ,str(message.payload.decode("utf-8"))) #imprime msg no terminal
print("message topic=",message.topic) # imprime tópico
#print("message qos=",message.qos)
#print("message retain flag=",message.retain)
# colocando dados em variaveis que representam as grandezas medidas
pre_dados = str(message.payload.decode("utf-8")) # transforma a mensagem recebida em string
dados = list(pre_dados.split(" ")) # separando string que chegou em uma lista por espaços
hora= float(dados[0])
loca= "'{}'".format(dados[1])
inte= float(dados[2])
temp= float(dados[3])
umid= float(dados[4])
pres= float(dados[5])
usua= "'{}'".format(dados[6])
hash= "'{}'".format(dados[7])
# começo das strings colunas e valores, desta forma só se salva no bd o que está correto
colunas="hora,local,intensidade"
valores= str(hora)+","+str(loca)+","+str(inte)
# Checa o Hash
string = str(hora)+str(loca)+str(inte)+str(temp)+str(umid)+str(pres)+usua
result = hashlib.md5(string.encode())
hash2 = result.hexdigest()
hash1= "{}".format(dados[7]) # hash específico para comparação, sem ''
if (hash2==hash1): # só manda para o BD se o HASH for igual
client.publish("feedback","dadosHASH confere")
# Checa se temp está entre o zero absoluto e um número grande para todas escalas (C° K F°)
if (-274>temp or umid>1000):
client.publish("feedback","temperatura errada")
else:
colunas += ",temperatura"
valores += "," + str(temp)
# Checa se umidade está entre 0% e 100%
if (0>umid or umid>100):
client.publish("feedback","umidade errada")
else:
colunas += ",umidade"
valores += "," + str(umid)
# Pressao > 0
if (pres<=0):
client.publish("feedback","pressao menor que zero")
else:
colunas += ",pressao"
valores += "," + str(pres)
colunas += ",usuario,HASH"
valores += ","+usua+","+hash
## Inserção no banco de dados
insert_bd(colunas,valores) #chama a função que INSERT no banco de dados
db_connection.commit() # executa o comando do curso
else: #caso hash não confira
client.publish("feedback", "HASH diferentes hash1: "+hash1+"hash2: "+hash2)
############ Subscribe ao tópico ############
username_MQTT="[usuario MQTT]" #user para MQTT
password_MQTT="[senha MQTT]" #senha para MQTT
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(username_MQTT, password_MQTT) # passa o user e senha do mqtt
client.connect(broker_address) #connect to broker
client.subscribe(topico) # se inscreve no tópico (quando chega mensagem chama a função on_message)
client.loop_forever() # repete tudo relacionado ao mqtt
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment