Cuprins:
- Pasul 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Pasul 2: Sensores Digitais - Publicação
- Pasul 3: Codigo Para Acionamento Sirene
- Pasul 4: Codigo Twitter - Postează
- Pasul 5: Centro De Comando
- Pasul 6: Codigo Twitter - Monitoração
- Pasul 7: Estrutura AWS
Video: Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Proiect académic pentru atender cenário de colaboração através da internet para divulgação de desastres naturais, unde será possível a detecção dos acontecimentos através de sensores IOT de temperatura, luminosidade, oscilação (tilte) e botão de pânico. Ainda no cenário de colaboração prevemos integração com o Twitter e aplicative com suporte mqtt for acionamento do alerta.
Diante a possibilidade de diverse meios de entrada na solução, caberá um centro de operações avaliar se a informație este corectă evitând asimile falsuri-pozitive două dispozitive automatizate și avaliar a posibilitate de fakenews. Tal tomada de decisão é crucial diante ao pânico that um alarme falso pode gerar.
Como solução de alerta de mensagem estamos considerando o uso do envio de SMS, alerta através de client mqtt, email, sirene e twitter.
O proiecție de utilizare a resurselor AWS incluzând IOT CORE, EC2 și SNS
Senzori de DragonBord 410c
clientes android mqtt
Sendo todo desenvolvido em python
Autori:
Diego Fernandes dos Santos - [email protected]
Gabriel Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz - [email protected]
Paulo Henrique Almeida Santos - [email protected]
Pasul 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo o codigo de publicație dos sensores analógicos, os sensores de temperatura și luminozitate este configurat pentru care se poate detecta uma variație for do padrão pre estabelecido sendem um alerta através do protocolo mqtt sinalizando um event.
Este alerta vină la un contagem regresiv pe care îl puteți suspenda sau a accelera părul operator.
O contador pentru o alerta começa contagem regressiva em 60 seguntos, e totul nou alerta detectat decresce o contador em 20 segundos.
programa rodando dentro da dragon borad 410c
#! / usr / bin / python3import spidev din libsoc import gpio din timp import somn
# Importa lib pentru comunicacao com MOSQUITTO import paho.mqtt.client as mqtt
spi = spidev. SpiDev () spi.open (0, 0) spi.max_speed_hz = 10000 spi.mode = 0b00 spi.bits_per_word = 8
#Usando a porta ADC1 channel_select1 = [0x01, 0x80, 0x00]
#Para utiliza a porta ADC2 use o next vetor de configuraç࣠o channel_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, steaguri, rc): print ("rc:" + str (rc))
def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc, obj, mid): print ("ID mesaj:" + str (mid) + "\ n") pass
# Criamos o client e setamos suas configuracoes mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
pub = mqtt. Client ("grupo3")
# Conexao com localhost, uma vez que testamos fora do labredes. broker_address = "34.230.74.201"
pub.connect (broker_address)
if _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
cu gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 în timp ce contador <50: gpio_cs.set_high () sleep (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) gpio) contador = contador + 1 adc_value = (rx [1] << 8) & 0b1100000000 adc_value = adc_value | (rx [2] & 0xff) adc_value = (((adc_value * 5) / 1024) - 0,5) * 100 print ("Temperatura:% f / n"% adc_value) pub.publish ("temperatura", str (adc_value)) # teste pentru acționarea contorului do alarme, teste ultima leitura + 5%
if adc_value_old == 0: adc_value_old = adc_value if adc_value> (adc_value_old * 1.05): pub.publish ("ALARME", "ON") print ("Alarmado temperatura") adc_value_old = adc_value sleep (1)
gpio_cs.set_high () sleep (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select2) gpio_cs.set_high () contador = contador + 1 adc_value2 = (rx [1] << 8) & 0b1100000000 adc_value2 = adc_ (rx [2] & 0xff) adc_value2 = adc_value2 / 10 print ("Luminozitate:% f / n"% adc_value2) pub.publish ("luminozitate", str (adc_value2))
# teste pentru acționarea contorului do alarme, teste ultima leitura + 50%
if adc_value2_old == 0: adc_value2_old = adc_value2 if adc_value2> (adc_value2_old * 1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_value2 sleep (3)
Pasul 2: Sensores Digitais - Publicação
código para publicação dos sensores digitais
Os sensores digitais neste project foram o tilte that detecta os tremores e o botão para simular o use de um botão de pânico.
când detectat uma anomalia sau botão de pânico pressionado a contagem regressiva é iniciada.
programa rodando dentro da dragon borad 410c
de la butonul de import libsoc_zero. GPIOde la importul libsoc_zero. GPIO Înclinați din timp importul somn import paho.mqtt.client ca mqtt import sys
def on_connect (mqttc, obj, flags, rc): print ("Conectado" + str (rc))
def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc, obj, mid): # print ("ID mesaj:" + str (mid) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) exceptând: sleep_count + = 1 else: count + = 1 sleep_count + = 1 if sleep_count> 999: break
print ("count:", count) if count> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (count)) # Criamos o client e setamos suas configuracoes mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
topic = "grup3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
tilt = Tilt („GPIO-A”)
btn = Buton („GPIO-C”)
în timp ce True: sleep (0.25) detectaTilt () if btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") sleep (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")
Pasul 3: Codigo Para Acionamento Sirene
Codigo pentru subscrição pentru acionamento da SIRENE, program rodando dentro da dragon board 410c
# Importa lib pentru comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
din libsoc_zero. GPIO import LED din timp import somn led = LED („GPIO-E”) # led.off ()
# Define o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("Conex࣠o estabelecida com broker")
# Define o that fazer ao receber uma mensagem def on_message (client, obj, message): print ("LED" + str (message.payload.decode ("utf-8"))) if str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()
# IP do broker broker_address = "34.230.74.201"
# Cria o client sub = mqtt. Client ("grupo3")
sub.connect (broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Increve no topico sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Pasul 4: Codigo Twitter - Postează
Codul pentru publicație do twitter asimează că acționat sau alarme.
cod rodando na maquina virtual da AWS EC2
#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - postează un mesaj de stare în cronologia dvs. # --- -------------------------------------------------- ------------------ import paho.mqtt.subscribe ca subscribe
timpul de import
din importul twitter *
# ------------------------------------------------- ---------------------- # care ar trebui să fie noul nostru statut? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
# ------------------------------------------------- ---------------------- # încărcați acreditările API # ---------------------- ------------------------------------------------- import sys sys.path.append (".") config de import
# ------------------------------------------------- ---------------------- # creați un obiect API Twitter # ---------------------- ------------------------------------------------- Twitter = Twitter (auth = OAuth ('senha removida))
# ------------------------------------------------- ---------------------- # postează un nou statut # documente API Twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------
în timp ce 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", păstrat = False) dacă m.topic == "twitteralarme" și str (m.payload.decode ("utf-8")) == "pe": rezultate = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("status actualizat:% s"% new_status)
Pasul 5: Centro De Comando
întotdeauna că acționat cu dispozitiv manual sau detectat cu alertă manuală de utilizator este acționat uma contagem regresiv pentru trimitere de mesagem. O operador poate anula o invio sau aciona o invio imediato do alerta.
Pentru uzul do dasboard folosim um Android de telefon pentru compor la mesă de operare a centrului de comandă.
cod rodando na maquina virtual da AWS EC2
import paho.mqtt.client ca pahoimport paho.mqtt.subscribe as subscribe import paho.mqtt.publish as publish import json import time import six import ssl from time import sleep
subiecte = ['#']
gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publish.single ("senzor1", "OFF", qos = 1, hostname = "172.31.83.191 ") publish.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")
connflag = Fals
def on_connect (client, date utilizator, steaguri, rc): global connflag connflag = True print (connflag) print ("Rezultatul conexiunii returnate:" + str (rc))
def on_message (client, userdata, msg): # print ("teste") print (msg.topic + "" + str (msg.payload))
def on_log (client, date utilizator, nivel, buf): print (msg.topic + "" + str (msg.payload))
mqttc = paho. Client ("Broker_MSG") mqttc.on_connect = on_connect mqttc.on_message = on_message
awshost = "data.iot.us-east-1.amazonaws.com" awsport = 8883 clientId = "a2rczvc6ni8105" thingName = "Ufscar2018" caPath = "aws-iot-rootCA.crt" certPath = "9e85dfd42a-certificate.pem. crt "keyPath =" 9e85dfd42a-private.pem.key "mqttc.tls_set (caPath, certfile = certPath, keyfile = keyPath, cert_reqs = ssl. CERT_REQUIRED, tls_version = ssl. PROTOCOL_TLSv1_2, ciphers = None), keepalive = 60) mqttc.loop_start ()
în timp ce 1: hora = time.time () sleep (.1) publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publish.single ("TEMPO", str (round (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") else: publish.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) și (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == Adevărat: # mqttc.publish ("mesaj", json.dumps ({'mesaj': "TERREMOTO"}), qos = 1) # mqttc.publish ("mesaj", "TERREMOTO ", qos = 1) mqttc.publish (" mesaj ", json.dumps (" TERREMOTO - PROCURE UMA ZONA SEGURA "), qos = 1)
# print ("teste SNS") # publish.single ("LED", "on", hostname = "172.31.83.191") publish.single ("SIRENE", "on", qos = 1, hostname = "172.31. 83.191 ") publish.single (" TEMPO "," TERREMOTO ", qos = 1, hostname =" 172.31.83.191 ") publish.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") publish.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") publish.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 sleep (5) m = subscribe.simple (topics, hostname =" 172.31.83.191 ", retained = False) if m.topic ==" ACIONADO "and str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") if m.topic ==" medico "and str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "și str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "și str (m.payloa d.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) if m. topic == "urgente" și str (m.payload.decode ("utf-8")) == "pe": publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 5 if str (m.payload.decode ("utf-8")) == "ON": if gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 else: print ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60
Pasul 6: Codigo Twitter - Monitoração
cod monitoração do twitter, pesquisa post na regiao de sorocaba
cod rodando na maquina virtual da AWS EC2
n
din twitter import * import config import paho.mqtt.publish as publish
din timp import somn
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
latitudine = -23.546211 longitudine = -46.637840 alcance = 50 rezultate = 1
publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Niciun flag = 0
pentru i în intervalul (60): # ----------------------------------------- ------------------------------ # efectuați o căutare bazată pe latitudine și longitudine # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- try: query = twitter.search.tweets (q = "#Terremoto", geocod = "% f,% f,% dkm"% (latitudine, longitudine, alcance), max_id = last_id) print ("leu")
cu excepția: print ("erro acesso twitter") pauză
pentru rezultatul interogării ["stări"]:
# ------------------------------------------------- ---------------------- # procesează un rezultat numai dacă are o geolocalizare # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count + = 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag + = 1 publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publish.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break
Pasul 7: Estrutura AWS
Utilizamos uma maquina virtual rodando ubuntu na estrutura AWS EC2
Utilizați un AWS IOT CORE pentru serviciu de MQTT unde se configurează ca fiind conforme conform tipului de mesagem
Utilizmos topicos do AWS SNS that eram acionados hair AWS IOT CORE
Recomandat:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 Steps
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: A ideia do nosso projecteto is monitorar a umidade do solo de uma horta e apresentar na tela do celular for acompanhamento real
Projeto IoT - Sistema Detector De Fumaça: 5 Steps
Projeto IoT - Sistema Detector De Fumaça: IntroduçãoO Sistema Detector de Fumaça consiste în uma soluție IoT cu obiectivul de a permite sau monitoriza alarmele de incidență a rezidențelor atravate de um aplicativ Android. O proiecție este bazată pe un microcontrolator care se află în comun cu nu
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robot Seguidor De Luz: 26 Steps (with Pictures)
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robot Seguidor De Luz: Que tal amigos, siguiendo con la revisiones de placas y sensores, con el aporte de la empresa DFRobot, hoy veremos una placa con prestaciones muy interesante, y es ideal pentru dezvoltarea de prototipuri robotice și controlul motoarelor și serviciilor, d
Comando Por Voz - DragonBoard410c: 5 pași
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar a instala și configurar o program Julius junto com o Coruja, que s ã o respectiv um program de reconhecimento de voz e o model ac ú stico em Portugu ê s.A vantagem da utiliza ç ã o do Ju
Centro De Cómputo Para Niños Con Raspberry Pi: 7 Steps
Centro De Cómputo Para Niños Con Raspberry Pi: Estos ser á n the primeros steps of the Raspberry Pi y para ello needitaremos: Raspberry Pi 2 Adaptator de red a micro USB Tarjeta micro SD (de 8 gb) Cable HDMI Cargador Rat ó n Teclado para computadoraEn case de contar with a Kit de inicio