Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
CosmicPampa
CPDataHub
Commits
8926ddd0
Commit
8926ddd0
authored
Jun 02, 2021
by
Bruno Thomazi Zanette
🎱
Browse files
Programa que recebe dados CosmiPampa
parent
984dfc11
Changes
1
Hide whitespace changes
Inline
Side-by-side
Codes/Programa_inicial_server_git.py
0 → 100644
View file @
8926ddd0
######
###### 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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment