Taula de continguts:

Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps
Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps

Vídeo: Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps

Vídeo: Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps
Vídeo: Те кто старше и красивее в One Piece 2024, De novembre
Anonim
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos

Projecte acadèmic per atender cenário de colaboração através da internet para divulgação de desastres naturais, on serà possible a detecció dos aconteciments através de sensors 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 aplicativos com a suport mqtt per accionament do alerta.

Diante a possibilidade de diversos meios de entrada na solución, caberá um centro de operaciones avaliar se a informação esta correta evitando assim falsos-positius dos dispositius automatitzats i avaliar a possibilitat de fakenews. Tal tomada de decisió és crucial davant del pànic que um alarma també pot gerar.

Com a solució d’alerta de mensatge estem considerant o utilitzar l’enviament d’SMS, alerta através de client mqtt, email, sirene e twitter.

O projecto contou com a ús de recursos per AWS inclòs IOT CORE, EC2 i SNS

Sensors da DragonBord 410c

clientes android mqtt

Sendo tot desenvolupat em python

Autors:

Diego Fernandes dos Santos - [email protected]

Gabriel Piovani Moreira dos Santos - [email protected]

Gustavo Venancio Luz: [email protected]

Paulo Henrique Almeida Santos - [email protected]

Pas 1: Dragonbord 410c - Publicació Dos Sensors - Analògics

Dragonbord 410c - Publicação Dos Sensores - Analogicos
Dragonbord 410c - Publicação Dos Sensores - Analogicos

Abaixo o codigo de publicación dos sensores analógicos, os sensores de temperatura e luminosidad está configurado para que assim que detectarem una variació fora del patró previ estabilitzat enviarem alerta através del protocol mqtt sinalitzant um esdeveniment.

Este alerta começa a contagem regressiva que pot ser suspès o accelerat pel seu operador.

O contador para o alerta começa contagem regressiva em 60 segunts, i tot nou alerta detectat decresce o contador em 20 segons.

programa rodant dins da dragon borad 410c

#! / usr / bin / python3import spidev des de libsoc import gpio des de la importació del temps de repòs

# Importa lib para 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 usar a porta ADC2 use o next vetor de configuraç࣠o channel_select2 = [0x01, 0xA0, 0x00]

def on_connect (mqttc, obj, flags, 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 del missatge:" + str (mid) + "\ n") pass

# Criamos o client e setamos suas configuracoes mqttc = mqtt. Client ()

mqttc.on_message = missatge_mqttc.on_connect = connectar-se mqttc.on_publish = publicar-se

pub = mqtt. Client ("grup3")

# Conexao com localhost, uma vez que testamos fora de labredes. broker_address = "34.230.74.201"

pub.connect (broker_address)

if _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)

amb gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 mentre que 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 per accionar contador do alarme, teste ultima leitura + 5%

si adc_value_old == 0: adc_value_old = adc_value si adc_value> (adc_value_old * 1.05): pub.publish ("ALARME", "ON") imprimeix ("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 ("Lluminositat:% f / n"% adc_value2) pub.publish ("lluminositat", str (adc_value2))

# teste para accionar contador do alarme, teste ultima leitura + 50%

si adc_value2_old == 0: adc_value2_old = adc_value2 si adc_value2> (adc_value2_old * 1.5): pub.publish ("ALARME", "ON") imprimeix ("Alarmado Luminosidade") adc_value2_old = adc_value2 dormir (3)

Pas 2: Sensors digitats: publicació

Sensores Digitais - Publicação
Sensores Digitais - Publicação

código para publicação dos sensores digitais

Os sensores digitais en aquest projecte foram o tilte que detecta os tremores e o botão para simular o uso de um botão de pânico.

quan detectat uma anomalia o botão de pânico pressionado a contagem regressiva é iniciada.

programa rodant dins da dragon borad 410c

des del botó d'importació libsoc_zero. GPIOde la importació libsoc_zero. GPIO Inclina a partir de la importació del temps importació del son paho.mqtt.client com 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 ("Identificador de missatge:" + str (mid) + "\ n") pass

def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) except: 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 = missatge_mqttc.on_connect = connectar-se mqttc.on_publish = publicar-se

topic = "grup3"

# Conexao com localhost, uma vez que testamos fora de labredes. mqttc.connect ("34.230.74.201", 1883)

tilt = Tilt ('GPIO-A')

btn = Botó ('GPIO-C')

mentre que 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 ")

Pas 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Codi per a subscripció per a l'accionament de SIRENE, programa rodant dins de dragon board 410c

# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt

des de libsoc_zero. GPIO importació LED des de la importació del temps sleep led = LED ('GPIO-E') # led.off ()

# Define o que fazer ao connectar def on_connect (client, obj, flags, rc): print ("Conex࣠o estabelecida com broker")

# Define o que 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 per escuta sub.loop_forever ()

Pas 4: Codigo Twitter: publicació

Codigo Twitter: publicació
Codigo Twitter: publicació
Codigo Twitter: publicació
Codigo Twitter: publicació

Codi per a publicació de twitter assim que accionat o alarma.

codi rodant na maquina virtual da AWS EC2

#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status #: publica un missatge d'estat a la vostra cronologia # --- -------------------------------------------------- ------------------ importa paho.mqtt.subscribe com a subscriptor

temps d'importació

des de la importació de twitter *

# ------------------------------------------------- ---------------------- # quin hauria de ser el nostre nou estat? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"

# ------------------------------------------------- ---------------------- # carregueu les nostres credencials d'API # ---------------------- ------------------------------------------------- importació sys sys.path.append (".") configuració d'importació

# ------------------------------------------------- ---------------------- # create object API de twitter # ---------------------- ------------------------------------------------- Twitter = Twitter (auth = OAuth ('senha removida))

# ------------------------------------------------- ---------------------- # publica un estat nou # Documents de l'API de twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------

mentre que 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", retened = False) si m.topic == "twitteralarme" i str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("estat actualitzat:% s"% new_status)

Pas 5: Centre de Comando

Centro De Comando
Centro De Comando

sempre que accionat amb dispositiu manual o detectat amb alerta manual do usuari és acionada uma contagem regressiva per envio de mensagem. O operador podeu cancel·lar o enviar o accionar o enviar imediato do alerta.

Per a l’ús del tauler s’utilitza un telèfon Android per compor a taula d’operació del centre de comandament.

codi rodant na maquina virtual da AWS EC2

importació paho.mqtt.client com pahoimport paho.mqtt.subscribe as subscribe importació paho.mqtt.publish as publica importació importació json importació temps importació sis ssl des importació temps suspensió

temes = ['#']

gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publish.single ("sensor1", "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, dades d'usuari, indicadors, rc): connflag global connflag = Impressió veritable (connflag) print ("Resultat de la connexió retornat:" + str (rc))

def on_message (client, userdata, msg): # print ("teste") print (msg.topic + "" + str (msg.payload))

def on_log (client, dades de l'usuari, nivell, 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), ciphers = None, keepalive = 60) mqttc.loop_start ()

mentre que 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 == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) # mqttc.publish ("message", "TERREMOTO ", qos = 1) mqttc.publish (" missatge ", 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 (themes, hostname =" 172.31.83.191 ", retained = False) si m.topic ==" ACIONADO "i 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 "and str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulància "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")) == "on": 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

Pas 6: Codigo Twitter: Monitoração

Codigo Twitter: Monitoração
Codigo Twitter: Monitoração

codi monitoração do twitter, pesquisa post na regiao de sorocaba

codi rodant na maquina virtual da AWS EC2

n

des de twitter import * import config import paho.mqtt.publish com publica

a partir del temps importació de son

twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))

latitud = -23,546211 longitud = -46,637840 alcance = 50 resultats = 1

publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201")

result_count = 0 last_id = Cap indicador = 0

per a l’interval (60): # ----------------------------------------- ------------------------------ # realitzeu una cerca basada en latitud i longitud # documents de l'API de twitter: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- try: query = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (latitud, longitud, alcance), max_id = last_id) print ("leu")

excepte: imprimir ("erro acesso twitter") pausa

per obtenir resultats en la consulta ["estats"]:

# ------------------------------------------------- ---------------------- # només processa un resultat si té una geolocalització # ----------------- -------------------------------------------------- ---- 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

Pas 7: Estrutura AWS

Estrutura AWS
Estrutura AWS
Estrutura AWS
Estrutura AWS
Estrutura AWS
Estrutura AWS

Utilitzem una maquina virtual rodant ubuntu na estrutura AWS EC2

Utilitzeu un AWS IOT CORE per al servei de MQTT on configurem com a segons conforme o tipus de missatge

Utilitzem temes de AWS SNS que porten pèls acionats AWS IOT CORE

Recomanat: