Cov txheej txheem:

Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Kauj Ruam
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Kauj Ruam

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Kauj Ruam

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Kauj Ruam
Video: Guest Battle Royale 2024, Lub Xya hli ntuj
Anonim
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos

Projeto acadêmico para atender cenário de colaboração através da internet para divulgação de desastres naturais, onde será possível a detecção dos acontecimentos através de sensores IOT de temperatura, luminosidade, oscilação (tilte) e botão de p. Ainda no cenário de colaboração prevemos integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.

Diante a possibilidade de diversos meios de entrada na solução, caberá um centro de de operações avaliar se a informação esta correta evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possibilidade de fakenews. Tal tomada de decisão é diante ao pânico que um alarme falso pode gerar.

Como solução de alerta de mensagem estamos considerando o uso do envio de SMS, alerta através de cliente mqtt, email, sirene thiab twitter.

O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 e SNS

Sensores ntawm DragonBord 410c

neeg android mqtt

Sendo todo desenvolvido em nab

Sau:

Diego Fernandes dos Santos - [email protected]

Gabriel Piovani Moreira dos Santos - [email protected]

Gustavo Venancio Luz - [email protected]

Paulo Henrique Almeida Santos - [email protected]

Kauj Ruam 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos

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

Abaixo o codigo de publicação dos sensores analógicos, os sensores de temperatura e luminosidade estão configurados para que assim que detectarem uma variação fora do padrão pré generateelecido enviarem um alerta através do protocolo mqtt sinalizando um evento.

Este alerta começa a contagem regressiva que pode ser suspensa ou acelerada pelo operador.

Cov kab mob sib kis los ntawm kev ceeb toom tuaj ntawm kev sib kis regressiva em 60 seguntos, e todo novo alerta detectado decresce o contador em 20 segundos.

programa rodando dentro da dragon borad 410c

#!/usr/bin/python3import spidev los ntawm libsoc ntshuam gpio los ntawm lub sijhawm ntshuam pw

# Importa lib para comunicacao com MOSQUITTO ntshuam paho.mqtt.client li 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 siv qhov chaw ADC2 siv seguinte vetor de configuraÃÆ'§ÃÆ' channel o channel_select2 = [0x01, 0xA0, 0x00]

def on_connect (mqttc, obj, chij, 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 ("Message Id:" + str (mid) + "\ n") pass

# Criamos o tus thov kev pabcuam 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)

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

nrog gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 thaum contador <50: gpio_cs.set_high () pw (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_sigh1.gp)) 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 ("Kub: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # teste para acionar contador do alarme, teste ultima leitura + 5%

yog adc_value_old == 0: adc_value_old = adc_value yog adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") print ("Alarmado temperatura") adc_value_old = adc_value pw tsaug zog (1)

gpio_cs.set_high () pw (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 ("Luminosidade: % f / n" % adc_value2) pub.publish ("luminosidade", str (adc_value2))

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

yog adc_value2_old == 0: adc_value2_old = adc_value2 yog adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_value2 pw (3)

Kauj Ruam 2: Sensores Digitais - Tshaj tawm

Sensores Digitais - Tshaj tawm
Sensores Digitais - Tshaj tawm

código rau publicação dos sensores digitais

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

quando detectado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.

programa rodando dentro da dragon borad 410c

los ntawm libsoc_zero. GPIO ntshuam khawm los ntawm libsoc_zero. GPIO ntshuam Qaij los ntawm lub sijhawm ntshuam ntshuam ntshuam paho.mqtt.client li mqtt ntshuam sys

def on_connect (mqttc, obj, chij, 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 ("Message Id:" + str (mid) + "\ n") pass

def detectaTilt (): suav = 0 sleep_count = 0 thaum Tseeb: sim: tilt.wait_for_tilt (1) tshwj tsis yog: sleep_count += 1 ntxiv: suav += 1 sleep_count += 1 yog sleep_count> 999: so

print ("suav:", suav) yog suav> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (suav)) # 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

ntsiab lus = "grupo3"

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

qaij = Qaij ('GPIO-A')

btn = Khawm ('GPIO-C')

thaum muaj tseeb: pw (0.25) detectaTilt () yog btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") pw (1) pub = mqttc.publish ("PANICO "," OFF ") # ntxiv: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")

Kauj Ruam 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Codigo para subscrição para acionamento da SIRENE, programa rodando dentro da dragon board 410c

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

los ntawm libsoc_zero. GPIO ntshuam LED los ntawm lub sij hawm ntshuam pw coj = LED ('GPIO-E') #led.off ()

# Txhais o que fazer ao conectar def on_connect (tus thov kev pab, ob, tus chij, rc): luam tawm ("ConexÃÆ' £ o tus tsim tawm com broker")

# Txhais o que fazer ao receber uma mensagem def on_message (tus thov, ob, lus): luam tawm ("LED" + str (message.payload.decode ("utf-8"))) yog str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()

# IP ua tus broker broker_address = "34.230.74.201"

# Cria o cliente sub = mqtt. Client ("grupo3")

sub.connect (broker_address)

sub.on_message = on_message sub.on_connect = on_connect

# Ua kom tsis muaj lub ntsiab lus sub.subscribe ("SIRENE", qos = 0)

# Loop para escuta sub.loop_forever ()

Kauj Ruam 4: Codigo Twitter - Tshaj Tawm

Codigo Twitter - Tshaj tawm
Codigo Twitter - Tshaj tawm
Codigo Twitter - Tshaj tawm
Codigo Twitter - Tshaj tawm

Código rau publicação rau twitter assim que acionado o alarme.

código rodando na maquina virtual da AWS EC2

#!/usr/bin/env nab hab sej #---------------------------------------- ------------------------------- # twitter-post-status #-tshaj tawm cov xwm txheej xwm txheej rau koj lub sijhawm # # ----------------------------------------------------------------------- ------------------ ntshuam paho.mqtt.subscribe ua subscribe

lub sij hawm ntshuam

los ntawm twitter ntshuam *

#------------------------------------------------------- ---------------------- # peb qhov xwm txheej tshiab yuav yog dab tsi? #------------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"

#------------------------------------------------------- ---------------------- # thauj peb cov ntawv pov thawj API # ---------------------- ------------------------------------------------- ntshuam sys sys.path.append (".") ntshuam teeb tsa

#------------------------------------------------------- ---------------------- # tsim twitter API khoom # ---------------------- ------------------------------------------------- twitter = Twitter (auth = OAuth ('senha removida))

#------------------------------------------------------- ---------------------- # tshaj tawm cov xwm txheej tshiab # twitter API docs: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------------- ---------------------- ua tsaug

thaum 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", khaws cia = Cuav) yog m.topic == "twitteralarme" thiab str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("update status: % s" % new_status)

Kauj Ruam 5: Centro De Comando

Centro tsib Comando
Centro tsib Comando

semper que acionado um dispositivo phau ntawv ou detectado um alerta phau ntawv siv usuário é acionada uma contagem regressiva para envio de mensagem. Operarador pode cancelar o envio ou acionar o envio imediato do alerta.

Para uso do dasboard utilizamos um android do telefone para compor mesa de operação do centro de comando.

código rodando na maquina virtual da AWS EC2

ntshuam paho.mqtt.client li pahoimport paho.mqtt.subscribe raws li sau npe ntshuam paho.mqtt.publish raws li tshaj tawm ntshuam json ntshuam lub sijhawm ntshuam rau ntshuam ssl los ntawm lub sijhawm ntshuam pw

ntsiab lus = ['#']

gatilho = 0 hora_disparo = 0 ເຜີຍ ແຜ່.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publishing.single ("sensor1", "OFF", qoj = 1, hostname = "172.31".83.191 ") publishing.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")

connflag = tsis tseeb

def on_connect (tus thov kev siv, cov ntaub ntawv siv, tus chij, rc): thoob ntiaj teb connflag connflag = luam tawm tseeb (connflag) luam tawm ("Kev sib txuas tau rov qab los:" + str (rc))

def on_message (tus neeg siv, cov ntaub ntawv siv, ntawv): # print ("teste") print (msg.topic+""+str (msg.payload))

def on_log (tus neeg siv, cov ntaub ntawv siv, qib, buf): luam tawm (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) aws, keepalive = 60) mqttc.loop_start ()

thaum 1: hora = time.time () pw (.1) luam tawm.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")

# if connflag == Tseeb: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) yog gatilho == 1: publish.single ("TEMPO", str (puag ncig (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") luam tawm.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") ntxiv: tshaj tawm.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") yog (hora> hora_disparo) thiab (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == Tseeb: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) # mqttc.publish ("message", "TERREMOTO ", qoj = 1) mqttc.publish (" message ", json.dumps (" TERREMOTO - CUAM UMA ZONA SEGURA "), qos = 1)

# print ("teste SNS") # published.single ("LED", "on", hostname = "172.31.83.191") publishing.single ("SIRENE", "on", qws = 1, hostname = "172.31. 83.191 ") publishing.single (" TEMPO "," TERREMOTO ", qoj = 1, hostname =" 172.31.83.191 ") publishing.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") tshaj tawm.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") publishing.single ("twitter", "TERREMOTO - TSEV UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 pw tsaug zog (5) m = subscribe.simple (ncauj lus, hostname =" 172.31.83.191 ", khaws cia = Tsis raug) yog m.topic ==" ACIONADO "thiab str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") yog m.topic ==" medico "thiab str (m.payload.decode (" utf-8 ")) ==" on ": yog connflag == Muaj tseeb: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qov = 1) yog m.topic ==" bombeiro "thiab str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) yog m.topic == " ambulancia "thiab str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) yog m. ntsiab lus == "xwm txheej ceev" thiab str (m.payload.decode ("utf-8")) == "ntawm": luam tawm.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5 yog str (m.payload.decode ("utf-8")) == "ON": yog gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 lwm tus: luam tawm ("Acionado") tshaj tawm.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60

Kauj Ruam 6: Codigo Twitter - Monitoração

Codigo Twitter - Monitoração
Codigo Twitter - Monitoração

código monitoração rau twitter, pesquisa post na regiao de sorocaba

código rodando na maquina virtual da AWS EC2

n

los ntawm twitter ntshuam *ntshuam teeb tsa ntshuam paho.mqtt.publish li tshaj tawm

los ntawm lub sijhawm ntshuam pw

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

latitude = -23.546211 longitude = -46.637840 alcance = 50 resultados = 1

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

result_count = 0 last_id = Tsis muaj tus chij = 0

rau kuv hauv thaj tsam (60): #----------------------------------------- ------------------------------ # ua qhov kev tshawb fawb raws li latitude thiab longitude # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- sim: nug = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(latitude, longitude, alcance), max_id = last_id) print ("leu")

tshwj tsis yog: luam tawm ("erro acesso twitter") so

rau qhov tshwm sim hauv kev nug ["xwm txheej"]:

#------------------------------------------------------- ---------------------- # tsuas yog txheej txheem qhov tshwm sim yog tias nws muaj geolocation # ----------------- ----------------------------------------------------------------------- ---- yog qhov tshwm sim ["geo"]: result_count += 1 last_id = result ["id"] pw (1) yog result_count == resultados: flag += 1 published.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publishing.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") so

Kauj Ruam 7: Estrutura AWS

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

Siv cov cuab yeej zoo tshaj plaws virtual rodando ubuntu na estrutura AWS EC2

Utilizamos a AWS IOT CORE para o serviço de MQTT onde configuramos as ações conforme o tipo de mensagem

Utilizmos topicos do AWS SNS que eram acionados pelo AWS IOT CORE

Pom zoo: