Sisällysluettelo:

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

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

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 vaihetta
Video: VULCÕES: PODER E DEVASTAÇÃO - DOCUMENTÁRIO COMPLETO EM HD 2024, Marraskuu
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 and 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 tai Twitter ja aplicativos com support mqtt para acionamento do alerta.

Diante a vaihtoehtona erilaisiin ratkaisuihin, joka on saatavana solução, Caberá um centro de de operações julkisesti se informaatio esta korjaus evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possibleilidade de factenews. Tal tomada de decisão ja olennainen diante ao pânico que um alarmme falso pode gerar.

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

AWS -ohjelmointi, mukaan lukien IOT CORE, EC2 ja SNS

Sensores da DragonBord 410c

clientes android mqtt

Lähetä se pythonin kehittämiseen

Autores:

Diego Fernandes dos Santos - [email protected]

Gabriel Piovani Moreira dos Santos - [email protected]

Gustavo Venancio Luz - [email protected]

Paulo Henrique Almeida Santos - [email protected]

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

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

Abaixo tai 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é estabelecido 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.

O contador para o alerta começa contactgem regressiva em 60 seguntos, and todo novo alerta detectado decresce o contador em 20 segundos.

ohjelma rodando dentro da dragon borad 410c

#!/usr/bin/python3import spidev from libsoc Import gpio from Time Import Sleep

# Importa lib para comunicacao com MOSQUITTO tuoda paho.mqtt.client nimellä 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 käytä porta ADC2 -käyttöä tai sekoita vetor de configuraÃÆ'⧧ÃÆ'à £ o channel_select2 = [0x01, 0xA0, 0x00]

def on_connect (mqttc, obj, liput, 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 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)

jos _nimi _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)

gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 kun contador <50: gpio_cs.set_high () uni (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 ("Lämpötila: % f / n" % adc_value) pub.publish ("lämpötila", str (adc_value)) # teste para acionar contador do alarmme, 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 ("Alarmadon lämpötila") adc_value_old = adc_value sleep (1)

gpio_cs.set_high () uni (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_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 alarmme, 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

Vaihe 2: Sensores Digitais - Publicação

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

código para publicação dos sensores digitalis

Os sensores digitalis 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 detado uma anomalia tai botão de pânico pressionado a contagem regressiva é initiada.

ohjelma rodando dentro da dragon borad 410c

alkaen libsoc_zero. GPIO -tuontipainike

def on_connect (mqttc, obj, liput, 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 (): count = 0 sleep_count = 0 kun True: try: tilt.wait_for_tilt (1) paitsi: sleep_count += 1 else: count += 1 sleep_count += 1 if sleep_count> 999: break

print ("count:", count) jos määrä> 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 = "grupo3"

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

kallistus = kallistus ('GPIO-A')

btn = Painike ('GPIO-C')

kun taas True: uni (0,25) havaitseeTilt () jos btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") tulosta ("Botao ON") uni (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")

Vaihe 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

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

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

from libsoc_zero. GPIO tuonti LED ajan tuonnin lepotilasta = LED ('GPIO-E') #led.off ()

# Define o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("ConexÃÆ'à £ £ estabelecida com broker")

# Määritä fazer ao -vastaanotin uma mensagem def on_message (asiakas, obj, viesti): 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 -välittäjä broker_address = "34.230.74.201"

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

sub.connect (välittäjän_osoite)

sub.on_message = on_message sub.on_connect = on_connect

# Lisää aihetta sub.subscribe ("SIRENE", qos = 0)

# Loop para escuta sub.loop_forever ()

Vaihe 4: Codigo Twitter - viesti

Codigo Twitter - viesti
Codigo Twitter - viesti
Codigo Twitter - viesti
Codigo Twitter - viesti

Código para publicação do twitter assim que acionado or alarmme.

codigo rodando ja maquina virtuaalinen AWS EC2

#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-lähettää tilaviestin aikajanallesi # --- -------------------------------------------------- ------------------ tuoda paho.mqtt.subscribe as subscribe

tuonnin aika

Twitter -tuonnista *

#------------------------------------------------- ---------------------- # mikä meidän uuden asemamme pitäisi olla? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"

#------------------------------------------------- ---------------------- # lataa API-tunnuksemme # ---------------------- ------------------------------------------------- tuonti sys sys.path.append (".") tuonti kokoonpano

#------------------------------------------------- ---------------------- # luo twitter-sovellusliittymäobjekti # ---------------------- ------------------------------------------------- viserrys = Twitter (auth = OAuth ('senha removeida))

#------------------------------------------------- ---------------------- # julkaise uusi tila # twitter-sovellusliittymäasiakirjat: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------

kun taas 1: m = tilaa.simple ("twitteralarme", isäntänimi = "172.31.83.191", säilytetty = epätosi), jos m.topic == "twitteralarme" ja str (m.payload.decode ("utf-8")) == "päällä": tulokset = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("päivitetty tila: % s" % new_status)

Vaihe 5: Centro De Comando

Centro De Comando
Centro De Comando

semper que acionado um dispositivo manual oru detectado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operaattorikoodin perustaja o envio ou acionar o envio imediato do alerta.

Voit käyttää dasboard -käyttöjärjestelmää Android -puhelimella, joka on tarkoitettu operaation keskustaan.

codigo rodando ja maquina virtuaalinen AWS EC2

tuoda paho.mqtt.client nimellä pahoimport paho.mqtt. tilata tilaamaan tuonti paho.mqtt.publish as julkaisu tuonti json tuonti aika tuonti kuusi tuonti ssl aikatuonnin lepotilasta

topic = ['#']

gatilho = 0 hora_disparo = 0 publis.single ("ACIONADO", "OFF", qos = 1, isäntänimi = "172.31.83.191") publis.single ("sensor1", "OFF", qos = 1, hostname = "172.31".83.191 ") publis.single (" anturi2 "," POIS ", qos = 1, isäntänimi =" 172.31.83.191 ")

connflag = Väärä

def on_connect (asiakas, käyttäjätiedot, liput, rc): global connflag connflag = True print (connflag) print ("Yhteys palautti tuloksen:" + str (rc))

def on_message (asiakas, käyttäjätiedot, viesti): # print ("teste") print (msg.topic+""+str (msg.payload))

def on_log (asiakas, käyttäjätiedot, taso, buf): print (msg.topic+""+str (msg.payload))

mqttc = paho. Client ("Välittäjä_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, salakirjoitukset, ei-salaukset), keepalive = 60) mqttc.loop_start ()

kun taas 1: hora = aika.aika () uni (.1) publis.single ("LEDTERREMOTO", "päällä", qos = 1, isäntänimi = "172.31.83.191")

# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publis.single ("TEMPO", str. (pyöreä (hora_disparo-hora, 0)), qos = 1, isäntänimi = "172.31.83.191") publis.single ("LEDTERREMOTO", "päällä", qos = 1, isäntänimi = "172.31.83.191") muu: julkaise.single ("TEMPO", "99", qos = 1, isäntänimi = "172.31.83.191") # print ("") if (hora> hora_disparo) ja (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 (" viesti ", json.dumps (" TERREMOTO - PROCURE UMA ZONA SEGURA "), qos = 1)

# print ("teste SNS") # publis.single ("LED", "päällä", isäntänimi = "172.31.83.191") publis.single ("SIRENE", "päällä", qos = 1, isäntänimi = "172.31. 83.191 ") publis.single (" TEMPO "," TERREMOTO ", qos = 1, isäntänimi =" 172.31.83.191 ") publis.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") publis.single ("twitteralarme", "päällä", qos = 1, isäntänimi = "172.31.83.191") publis.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 unia (5) m = tilaa.simple (aiheet, isäntänimi =" 172.31.83.191 ", säilytetty = epätosi), jos m.topic ==" ACIONADO "ja str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" peruutus "), jos m.topic ==" medico "ja str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) jos m.topic ==" bombeiro "ja str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) jos m.topic == " ambulancia "ja str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) jos m. topic == "urgente" ja str (m.payload.decode ("utf-8")) == "on": publis.single ("ACIONADO", 1, qos = 1, isäntänimi = "172.31.83.191") gatilho = 1 hora_disparo = aika.aika ()+5 jos str (m.payload.decode ("utf-8")) == "ON": jos gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 muuta: print ("Acionado") publis.single ("ACIONADO", 1, qos = 1, isäntänimi = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60

Vaihe 6: Codigo Twitter - Monitoração

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

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

codigo rodando ja maquina virtuaalinen AWS EC2

n

twitteristä tuonti *tuonti konfiguraation tuonti paho.mqtt.julkaisu julkaistavaksi

tuontihetkestä

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

leveysaste = -23.546211 pituusaste = -46.637840 alcance = 50 resultados = 1

publis.single ("twitter_alarme", "ON", isäntänimi = "34.230.74.201")

result_count = 0 last_id = Ei lippua = 0

i alueella (60): #----------------------------------------- ------------------------------ # suorita haku leveys- ja pituusasteiden perusteella # twitter API -asiakirjat: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- kokeile: query = twitter.search.tweets (q = "#Terremoto", geokoodi = " %f, %f, %dkm" %(leveysaste, pituusaste, alcance), max_id = last_id) print ("leu")

paitsi: tulosta ("erro acesso twitter") tauko

haun ["statuses"] tulokselle:

#------------------------------------------------- ---------------------- # käsittele tulosta vain, jos sillä on maantieteellinen sijainti # ----------------- -------------------------------------------------- ---- jos tulos ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 publis.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publis.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") tauko

Vaihe 7: Estrutura AWS

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

Käytä apuohjelmia, kuten maquina virtuaalista rodandoa, ubuntu ja estrutura AWS EC2

Käytä AWS IOT CORE -palvelua MQTT: n palvelimille ja konfiguraatioille, kuten konfiguraatio tai tyyppinen mensagem

Hyödylliset aiheet AWS SNS -palvelussa AWS IOT CORE

Suositeltava: