-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClimaouTempo.py
116 lines (92 loc) · 4.58 KB
/
ClimaouTempo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# -*- coding: utf-8 -*-
"""
Created on Sun Sep 19 11:04:00 2020
@author: Carlos Souza
@collaborator: Esdra Santos
observação: otimizar o código e enviar informações do tempo de acordo com as cidades dos clientes
Novo Hamburgo e Sapucaia do Sul
"""
import weathercom
import paho.mqtt.client as mqtt
import json
import time
import threading
def printit():
threading.Timer(60.0, printit).start() # Run o código a cada 1h (3600 s)
cidade="Novo Hamburgo"
weatherDetails = weathercom.getCityWeatherDetails(city=cidade, queryType="daily-data")
print(f'Cidade: {weatherDetails[weatherDetails.find("city")+8:weatherDetails.find("longitude")-4]}')
temperatura=weatherDetails[weatherDetails.find("temperature")+14:weatherDetails.find("temperatureMax")-3]
print(f'Temperatura: {temperatura}ºC')
temperaturamax=weatherDetails[weatherDetails.find("temperatureMax")+25:weatherDetails.find("uvIndex")-3]
print(f'Temperatura máxima desde as 7 da manhã: {temperaturamax}ºC')
sensacao=weatherDetails[weatherDetails.find("feelsLike")+12:weatherDetails.find("gust")-3]
print(f'Sensação térmica: {sensacao}ºC')
umidade=weatherDetails[weatherDetails.find("humidity")+11:weatherDetails.find("icon")-3]
print(f'Umidade relativa do ar: {umidade}%')
precip=weatherDetails[weatherDetails.find("precip24")+15:weatherDetails.find("snowD")-3]
print(f'Precipitação do dia: {precip}mm')
vento=weatherDetails[weatherDetails.find("windSpeed")+11:weatherDetails.find("windDir")-3]
print(f'Velocidade do vento: {vento}km/h')
print('\nConexão por protocolo MQTT')
def envia_relatorio(cliente):
previsao = [
{
'variable': 'temperaturamin',
'value' : temperatura
},
{
'variable': 'temperaturamax',
'value' : temperaturamax
},
{
'variable': 'chuva',
'value' : precip
}
]
json_file = json.dumps(previsao)
cliente.publish(topico1, payload=json_file, qos=1, retain=True) # Publica os dados no broker com retenção
# Método que exibe o registro da comunicacao por protocolo mqtt no terminal
def on_log_esdra(esdra, userdata, level, buf):
print("log: ",buf)
# Rotina que trata o evento de conexao, exibindo o return code e subscrevendo o cliente aos topicos de interesse
def on_connect_esdra(esdra, userdata, flags, rc):
print("[STATUS] Conectado ao Broker " + broker + " Resultado de conexao: " + str(rc))
print("subscrevendo ao topico", topico1)
# Método que exibe o registro da comunicacao por protocolo mqtt no terminal
def on_log_carlos(esdra, userdata, level, buf):
print("log: ",buf)
# Rotina que trata o evento de conexao, exibindo o return code e subscrevendo o cliente aos topicos de interesse
def on_connect_carlos(esdra, userdata, flags, rc):
print("[STATUS] Conectado ao Broker " + broker + " Resultado de conexao: " + str(rc))
print("subscrevendo ao topico", topico1)
def configura_cliente(cliente,id):
cliente.loop_start()
print("Conectando ao broker...")
cliente.connect(broker,porta)
if id == 1:
cliente.on_connect = on_connect_esdra
cliente.on_log = on_log_esdra
if id == 2:
cliente.on_connect = on_connect_carlos
cliente.on_log = on_log_carlos
envia_relatorio(cliente)
time.sleep(5)
cliente.loop_stop()
# Definindo os objetos
broker = "mqtt.tago.io" # Endereço do broker
porta = 1883 # Porta sem segurança para testes
#keepAlive = 60 # Tempo em segundos para o envio de uma requisicao ping
# Topicos para publicar os dados no tago.io
topico1 = "tago/data/previsao"
print("Criando nova instancia")
esdra= mqtt.Client()
esdra.username_pw_set('',"e35c4944-06a4-46f1-be9d-243af76bd4a0")
print("Configurando o cliente")
configura_cliente(esdra,1)
print("Criando nova instancia")
carlos= mqtt.Client()
carlos.username_pw_set('','7f1d7f85-761e-4b98-92b4-7bab3f528b82')
print("Configurando o cliente")
configura_cliente(carlos,2)
printit() # Chama a função que a periodiza o código para carregar conforme o tempo determinado