Daftar Isi:

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

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

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Langkah
Video: Tsunami llega a Perú! 😱 Playa Redondo Miraflores. 2024, November
Anonim
Centro De Comando Emergencias - Erupo De Vulcão E Terremotos
Centro De Comando Emergencias - Erupo 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 temperatur, luminosidade, oscilação (tilte) dan botão. Ainda no cenário de colaboração prevemos integrao com o Twitter dan 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 tersedia informasi esta correta evitando assim faalsos-positivos dos dispositivos automatizado dan avaliar a possibilidade de fakenews. Tal tomada de decisão é critical diante ao pânico que um alarme faalso pode gerar.

Dapatkan solusi dari alerta de mensagem estamos mempertimbangkan dan melakukan envio de SMS, alerta através de klien mqtt, email, sirene dan twitter.

O projeto contou com uso de recursos da AWS termasuk IOT CORE, EC2 dan SNS

Sensor dari DragonBord 410c

klien android mqtt

Sendo todo desenvolvido em python

Autore:

Diego Fernandes dos Santos – [email protected]

Gabriel Piovani Moreira dos Santos – [email protected]

Gustavo Venancio Luz – [email protected]

Paulo Henrique Almeida Santos – [email protected]

Langkah 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 publicao dos sensores analógicos, os sensores de temperatur dan luminosidade estão konfigurasi para que assim que detectarem uma variação untuk melakukan padrão pré estabelecido enviarem um alerta através lakukan protokol mqtt sinali.

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

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

programa rodando detro da dragon borad 410c

#!/usr/bin/python3import spidev dari libsoc impor gpio dari waktu impor tidur

# Importa lib para comunicacao com NYAMUK impor paho.mqtt.client sebagai mqtt

spi = spidev. SpiDev() spi.open(0, 0) spi.max_speed_hz=10000 spi.mode = 0b00 spi.bits_per_word = 8

#Menggunakan porta ADC1 channel_select1=[0x01, 0x80, 0x00]

#Para usar a porta ADC2 use o seguinte vetor de configuração channel_select2=[0x01, 0xA0, 0x00]

def on_connect(mqttc, obj, flag, 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 Pesan: " + str(mid) + "\n") lulus

# Criamos o klien dan setamos suas konfigurasi 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)

dengan gpio.request_gpios([gpio_cs]): contador=0 adc_value_old=0 adc_value2_old=0 while contador < 50: gpio_cs.set_high() sleep(0,00001) gpio_cs.set_low() rx = spi.xfer(channel_select1) gpio_cs.set_high(_cs.set_high(_cs.set_) 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 para acionar contador 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 temperaturea") 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_value2 | (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%

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)

Langkah 2: Sensores Digitais - Publicação

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

código para publicação dos sensores digitais

Sensor digitais neste projeto foram o tilte que detecta os tremors 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 detro da dragon borad 410c

dari libsoc_zero. GPIO tombol impordari libsoc_zero. GPIO impor Miringkan dari waktu impor tidur impor paho.mqtt.client sebagai mqtt impor 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 Pesan: " + str(mid) + "\n") lulus

def detectaTilt(): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt(1) kecuali: sleep_count += 1 else: count += 1 sleep_count += 1 jika sleep_count > 999: break

print("count:", count) if count>200: pub = mqttc.publish("TERREMOTO", "ON") pub = mqttc.publish("SISMOGRAFO", str(count)) # Criamos o klien dan setamos suas konfigurasi mqttc = mqtt. Client()

mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish

topik = "grup3"

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

kemiringan = Kemiringan('GPIO-A')

btn = Tombol('GPIO-C')

while 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")

Langkah 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Codigo para subcrio para acionamento da SIRENE, programa rodando dentro da dragon board 410c

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

dari libsoc_zero. GPIO impor LED dari waktu impor sleep led = LED('GPIO-E') #led.off()

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

# Tentukan o que fazer ao receber uma mensagem def on_message(klien, obj, pesan): 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 klien sub = mqtt. Client("grupo3")

sub.connect(broker_address)

sub.on_message = on_message sub.on_connect = on_connect

# Tambahkan no topico sub.subscribe("SIRENE", qos=0)

# Loop para escuta sub.loop_forever()

Langkah 4: Codigo Twitter - Posting

Codigo Twitter - Posting
Codigo Twitter - Posting
Codigo Twitter - Posting
Codigo Twitter - Posting

Kode untuk publik lakukan twitter assim que acionado o alarme.

código rodando dan maquina virtual da AWS EC2

#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status # - memposting pesan status ke timeline Anda #--- -------------------------------------------------- ------------------ impor paho.mqtt.berlangganan sebagai berlangganan

waktu impor

dari impor twitter *

#------------------------------------------------- ---------------------- # seharusnya status baru kita seperti apa? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"

#------------------------------------------------- ---------------------- # memuat kredensial API kami #---------------------- -------------------------------------------------- impor sys sys.path.append(".") konfigurasi impor

#------------------------------------------------- ---------------------- # buat objek API Twitter #---------------------- ------------------------------------------------- Indonesia = Twitter(auth = OAuth('senha removida))

#------------------------------------------------- ---------------------- # posting status baru # twitter API docs: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- -----------------------

while 1: m = subscribe.simple("twitteralarme", hostname="172.31.83.191", dipertahankan=False) if m.topic=="twitteralarme" dan str(m.payload.decode("utf-8")) ="on": result = twitter.status.update(status = (new_status)+str(time.time())) # print("updated status: %s" % new_status)

Langkah 5: Centro De Comando

Centro De Comando
Centro De Comando

semper que acionado um dispositivo manual ou detectado um alerta manual lakukan usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancelar atau envio ou acionar atau envio imediato lakukan alerta.

Untuk menggunakan dasboard utilizamos um android melakukan telefone untuk menyusun mesa de operação melakukan centro de comando.

código rodando dan maquina virtual da AWS EC2

impor paho.mqtt.client sebagai pahoimport paho.mqtt.berlangganan sebagai berlangganan impor paho.mqtt.publish sebagai publikasikan impor json waktu impor impor enam impor ssl dari waktu impor tidur

topik = ['#']

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, nama host="172.31.83.191")

connflag = Salah

def on_connect(client, userdata, flags, rc): global connflag connflag = True print(connflag) print("Koneksi mengembalikan hasil: " + str(rc))

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

def on_log(klien, data pengguna, level, 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, tls_version=ssl. PROTOCOL_TLSv1_2, keepalive=60) mqttc.loop_start()

while 1: hora=time.time() sleep(.1) publish.single("LEDTERREMOTO", "on", qos=1, hostname="172.31.83.191")

# jika connflag ==Benar: # 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) dan (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("message", 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 tidur(5) m = berlangganan.sederhana(topik, nama host="172.31.83.191", dipertahankan=Salah) jika m.topik=="ACIONADO" dan str(m.payload.decode(" utf-8"))=="OFF": gatilho=0 print("cancelado") if m.topic=="medico" dan 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==" ambulancia" dan 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" and str(m.payload.decode("utf-8"))=="on": publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=waktu.waktu()+5 jika str(m.payload.decode("utf-8"))=="ON": jika gatilho==1: print("acelerado 20") hora_disparo=hora_disparo -20 lain: print("Acionado") publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=time.time()+60

Langkah 6: Codigo Twitter - Monitor

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

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

código rodando dan maquina virtual da AWS EC2

n

dari twitter impor *impor config impor paho.mqtt.publish as publish

dari waktu impor tidur

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

garis lintang = -23.546211 garis bujur = -46.637840 alcanance = 50 resultados = 1

publish.single("twitter_alarme", "ON", nama host="34.230.74.201")

result_count = 0 last_id = Tidak ada flag = 0

untuk i in range(60): #----------------------------------------- ------------------------------ # melakukan pencarian berdasarkan garis lintang dan garis bujur # dokumen API twitter: https://dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- coba: query = twitter.search.tweets(q = "#Terremoto", geocode = "%f, %f, %dkm" % (lintang, bujur, alcance), max_id = last_id) print("leu")

kecuali: print("erro acesso twitter") break

untuk hasil dalam kueri["status"]:

#------------------------------------------------- ---------------------- # hanya memproses hasil jika memiliki geolokasi #----------------- -------------------------------------------------- ---- 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") istirahat

Langkah 7: Estrutura AWS

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

Memanfaatkan uma maquina virtual rodando ubuntu dan estrutura AWS EC2

Memanfaatkan AWS IOT CORE para o serviço de MQTT onde configuramos sebagai ações sesuai tipo de mensagem

Manfaatkan topik untuk melakukan AWS SNS dan segera lakukan AWS IOT CORE

Direkomendasikan: