תוכן עניינים:

Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 שלבים
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 שלבים

וִידֵאוֹ: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 שלבים

וִידֵאוֹ: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 שלבים
וִידֵאוֹ: Melhores Filmes de Ação 2018 | Filme HD "Emergência Máxima" Dublado 2024, נוֹבֶמבֶּר
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 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 and avaliar a possibilidade of fakenews. טל tomada de decisão é מכריע diante ao pânico que um alarme falso pode gerar.

מידע על התראה של אנשים שמספקים בחשבון את השימוש ב- SMS, התראה על לקוחות, דוא ל, סירנה וטוויטר.

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

Sensores da DragonBord 410c

לקוחות mqtt אנדרואיד

Sendo todo desenvolvido em python

מחברים:

דייגו פרננדס דוס סנטוס - [email protected]

גבריאל פיובאני מורירה דוס סנטוס - [email protected]

Gustavo Venancio Luz - [email protected]

פאולו הנריקה אלמיידה סנטוס - [email protected]

שלב 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 temperaturea 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 contagem regressiva em 60 seguntos, and todo novo alerta detectado decresce o contador em 20 segundos.

programa rodando dentro da dragon borad 410c

#!/usr/bin/python3import spidev מ- libsoc יבוא gpio מעכשיו ייבוא שינה

# Importa lib para comunicacao com MOSQUITTO יבוא paho.mqtt.client כמו 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 seguinte vetor de configuraҧ࣠o channel_select2 = [0x01, 0xA0, 0x00]

def on_connect (mqttc, obj, דגלים, rc): הדפס ("rc:" + str (rc))

def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))

def on_publish (mqttc, obj, mid): הדפס ("מזהה הודעה:" + str (אמצע) + "\ n") מעבר

# 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

פאב = mqtt. Client ("grupo3")

# Conexao com localhost, אתה יכול לבדוק אם אתה רוצה לעשות זאת. broker_address = "34.230.74.201"

pub.connect (broker_address)

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

עם gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 בעוד contador <50: gpio_cs.set_high () שינה (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) g) 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 הדפסה ("טמפרטורה: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # teste for acionar contador do alarme, teste ultima leitura + 5%

אם adc_value_old == 0: adc_value_old = adc_value if adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") הדפס ("Alarmado temperatura") adc_value_old = adc_value שינה (1)

gpio_cs.set_high () שינה (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 הדפסה ("Luminosidade: % f / n" % adc_value2) pub.publish ("luminosidade", str (adc_value2))

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

אם adc_value2_old == 0: adc_value2_old = adc_value2 if adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") הדפס ("Alarmado Luminosidade") adc_value2_old = adc_value2 שינה (3)

שלב 2: חיישנים Digitais - Publicação

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

código para 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

מכפתור יבוא libsoc_zero. GPIO מיבוא libsoc_zero. GPIO הטה מזמן ייבוא שינה יבוא paho.mqtt.client כ- mqtt sys

def on_connect (mqttc, obj, דגלים, rc): הדפס ("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 ("מזהה הודעה:" + str (באמצע) + "\ n") מעבר

def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) למעט: sleep_count += 1 אחר: count += 1 sleep_count += 1 אם sleep_count> 999: הפסקה

print ("count:", count) if count> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (count)) # Criamos o client e setamos suas תצורות mqttc = mqtt. Client ()

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

topic = "grupo3"

# Conexao com localhost, אתה יכול לבדוק אם אתה צריך לעשות זאת. mqttc.connect ("34.230.74.201", 1883)

הטיה = הטייה ('GPIO-A')

btn = לחצן ('GPIO-C')

בעוד נכון: sleep (0.25) detectaTilt () אם btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") הדפס ("Botao ON") sleep (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # הדפסה (" Botao OFF ")

שלב 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

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

# Importa lib para comunicacao com MOSQUITTO יבוא paho.mqtt.client כ- mqtt

מ- libsoc_zero. GPIO ייבוא נורית מעת ייבוא שינה שינה = LED ('GPIO-E') #led.off ()

# הגדר o que fazer ao conectar def on_connect (לקוח, obj, דגלים, rc): print ("ConexÃÆ' £ o estabelecida com broker")

# הגדר 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 cliente sub = mqtt. Client ("grupo3")

sub.connect (broker_address)

sub.on_message = on_message sub.on_connect = on_connect

# אל תגדיר שום תת -מנוי טופיקי ("SIRENE", qos = 0)

# Loop for escuta sub.loop_forever ()

שלב 4: Codigo Twitter - פרסם

טוויטר קודיגו - פרסם
טוויטר קודיגו - פרסם
טוויטר קודיגו - פרסם
טוויטר קודיגו - פרסם

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

מידע על וירטואלי של AWS EC2

#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-מפרסם הודעת סטטוס לציר הזמן שלך # --- -------------------------------------------------- ------------------ יבוא paho.mqtt. הרשמה כמנוי

זמן יבוא

מיבוא טוויטר *

#------------------------------------------------- ---------------------- # מה צריך להיות הסטטוס החדש שלנו? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"

#------------------------------------------------- ---------------------- # טען את אישורי ה- API שלנו # ---------------------- ------------------------------------------------- יבוא sys sys.path.append (".") הגדרת ייבוא

#------------------------------------------------- ---------------------- # צור אובייקט API של טוויטר # ---------------------- ------------------------------------------------- טוויטר = טוויטר (auth = OAuth ('senha removalida))

#------------------------------------------------- ---------------------- # פרסם סטטוס חדש # מסמכי API של טוויטר: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------

בעוד 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", retained = False) אם m.topic == "twitteralarme" ו- str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("status updated: % s" % new_status)

שלב 5: Centro De Comando

סנטרו דה קומנדו
סנטרו דה קומנדו

manper que acionado um dispositivo manual or detectado um alerta manual to usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.

עבור שימוש בדסבורד שימוש באנדרואיד ובטלפונים עבור תוכנת הפעלה מרכזית.

מידע על וירטואלי של AWS EC2

יבוא paho.mqtt.client כ- pahoimport paho.mqtt.s הרשמה כמנוי יבוא paho.mqtt.publish כפרסם יבוא json זמן יבוא שישה יבוא ssl מעת לעת יבוא שינה

נושאים = ['#']

gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publish.single ("sensor1", "OFF", qos = 1, host host = "172.31.83.191 ") publish.single (" sensor2 "," OFF ", qos = 1, שם מארח =" 172.31.83.191 ")

connflag = שקר

def on_connect (לקוח, נתוני משתמש, דגלים, rc): global connflag connflag = הדפסה אמיתית (connflag) הדפסה ("החיבור החזיר תוצאה:" + str (rc))

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

def on_log (client, userdata, 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, ciphers awc), keepalive = 60) mqttc.loop_start ()

בעוד 1: hora = time.time () שינה (.1) publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")

# if connflag == נכון: # mqttc.publish ("הודעה", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publish.single ("TEMPO", str (עגול (hora_disparo-hora, 0)), qos = 1, hosthost = "172.31.83.191") publish.single ("LEDTERREMOTO", "on", qos = 1, host host = "172.31.83.191") אחר: פרסם.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) ו- (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == True: # mqttc.publish ("הודעה", json.dumps ({'message': "TERREMOTO"}), qos = 1) # mqttc.publish ("הודעה", "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, hosthost = "172.31. 83.191 ") publish.single (" TEMPO "," TERREMOTO ", qos = 1, hostname =" 172.31.83.191 ") publish.single (" ACIONADO "," OFF ", qos = 1, host host =" 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, host host = "172.31.83.191 ") gatilho = 0 שינה (5) m = subscribe.simple (נושאים, שם מארח =" 172.31.83.191 ", שמור = שקר) אם m.topic ==" ACIONADO "ו- str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 הדפסה (" Cancelado ") אם m.topic ==" medico "ו- str (m.payload.decode (" utf-8 ")) ==" מופעל ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "ו- str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " אמבולנסיה "ו- str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulance", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) אם m. topic == "urgente" ו- 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 אחר: הדפס ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60

שלב 6: Codigo Twitter - Monitoração

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

מעקב אחר הטוויטר, הודעה רשומה על סוריה

codigo rodando na maquina virtual da AWS EC2

נ

מאת twitter import *ייבוא config config יבוא paho.mqtt.publish כפרסום

מפעם לפעם ייבוא שינה

טוויטר = טוויטר (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))

קו הרוחב = -23.546211 אורך = -46.637840 alcance = 50 תוצאות = 1

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

result_count = 0 last_id = ללא דגל = 0

עבור i בטווח (60): #----------------------------------------- ------------------------------ # בצע חיפוש המבוסס על קווי רוחב ואורך # מסמכי API של טוויטר: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- נסה: query = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(קו רוחב, אורך, אלקנס), max_id = last_id) הדפס ("leu")

למעט: הדפסה ("erro acesso twitter") הפסקה

לתוצאה בשאילתה ["סטטוסים"]:

#------------------------------------------------- ---------------------- # לעבד תוצאה רק אם יש לה מיקום גיאוגרפי # ----------------- -------------------------------------------------- ---- 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") הפסקה

שלב 7: Estrutura AWS

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

שימוש במכשיר וירטואלי שמכיל ubuntu ו- ests AWS EC2

שימוש ב- AWS IOT CORE עבור שירותי MQTT והתצורות כפי שהן תואמות את הטיפוס

נושאים שימושיים ב- AWS SNS יכולים לשמש עבור AWS IOT CORE

מוּמלָץ: