جدول المحتويات:

Centro De Comando Emergencias - بوابة Erupção De Vulcão E: 7 خطوات
Centro De Comando Emergencias - بوابة Erupção De Vulcão E: 7 خطوات

فيديو: Centro De Comando Emergencias - بوابة Erupção De Vulcão E: 7 خطوات

فيديو: Centro De Comando Emergencias - بوابة Erupção De Vulcão E: 7 خطوات
فيديو: 🔔🔔🔔万古龙神 | Eternal dragon god Ep1-135 Multi Sub 1080P 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á posível a detecção dos acontecimentos através de sensores IOT de temperature، luminosidade، ãoscilação (tilto de e botico. Ainda no cenário de colaboração prevemos Integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.

Diante a luxibilidade deiversos de entrada na solução، caberá um centro de de operações avaliar se a informação esta correta evitando assim falsos-positivos dosivos automatizado e avaliar a possible de fakenews. Tal tomada de decisão é Critical diante ao pânico que um alarme falso pode gerar.

Como solução de alerta de mensagem estamos مراعاة o uso do envio de SMS، alerta através de cliente mqtt، email، sirene e twitter.

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

سينسورس دا دراغون بورد 410 ج

عملاء android mqtt

Sendo todo desenvolvido em python

أوتورز:

دييجو فرنانديز دوس سانتوس - [email protected]

غابرييل بيوفاني موريرا دوس سانتوس - [email protected]

غوستافو فينانسيو لوز - [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 sensors analógicos، os sensores de temperatura e luminosidade estão configurados para que assim que detão variação fora do padrão pré estabelecido enviarem um alerta através do Protocolo mqtt sinalizando um event.

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

يجب أن يكون الأمر معديًا للعدوى بعد 60 سيغونتوس ، يجب عليك أن تفعل ذلك من جديد في حالة تأهب.

programa rodando dentro da dragon borad 410c

#! / usr / bin / python3import spidev من libsoc استيراد gpio من وقت استيراد النوم

# 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 استخدم o seguinte 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): طباعة (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)

إذا _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_high_elect1)) 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 ("tematura"، 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 temperature") 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 = | (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 = sleep (3)

الخطوة 2: Sensores Digitais - Publicação

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

código para publicação dos sensores digitais

حساسات نظام التشغيل الرقمية التي تم إنشاؤها من أجل الكشف عن حالة الارتعاش أو الوصول إلى حالة مماثلة باستخدام طريقة بسيطة في البانيكو.

quando Discoverado 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 import sys

def on_connect (mqttc، obj، flags، rc): print ("Conectado" + str (rc))

def on_message (mqttc، obj، msg): طباعة (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))

def on_publish (mqttc، obj، mid): # print ("معرف الرسالة:" + str (mid) + "\ n") pass

def DiscoveraTilt (): count = 0 sleep_count = 0 بينما True: جرب: tilt.wait_for_tilt (1) باستثناء: 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 = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish

الموضوع = "grupo3"

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

الإمالة = الإمالة ("GPIO-A")

btn = زر ("GPIO-C")

while True: sleep (0.25) detaTilt () 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 ")

الخطوة 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Codigo para Subscrição الفقرة acionamento da SIRENE ، programa rodando dentro da dragon board 410c

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

من libsoc_zero. GPIO استيراد مؤشر LED من وقت استيراد السكون led = LED ('GPIO-E') # led.off ()

# تحديد o que fazer ao conectar def on_connect (client، obj، flags، rc): print ("Conex࣠o estabelecida com broker")

# تحديد o que fazer ao receiver uma mensagem def on_message (client، obj، message): print ("LED" + str (message.payload.decode ("utf-8"))) إذا كانت str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()

# IP do 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

# Increve no topico sub.subscribe ("SIRENE"، qos = 0)

# Loop para escuta sub.loop_forever ()

الخطوة 4: Codigo Twitter - Post

تويتر Codigo - بوست
تويتر Codigo - بوست
تويتر Codigo - بوست
تويتر Codigo - بوست

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

código rodando na maquina الظاهري من AWS EC2

#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - ينشر رسالة حالة على جدولك الزمني # --- -------------------------------------------------- ------------------ استيراد paho.mqtt.subscribe كاشتراك

وقت الاستيراد

من تويتر استيراد *

# ------------------------------------------------- ---------------------- # ماذا يجب أن تكون حالتنا الجديدة؟ # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"

# ------------------------------------------------- ---------------------- # تحميل بيانات اعتماد API الخاصة بنا # ---------------------- ------------------------------------------------- يستورد sys sys.path.append (".") استيراد التكوين

# ------------------------------------------------- ---------------------- # إنشاء كائن واجهة برمجة تطبيقات twitter # ---------------------- ------------------------------------------------- تويتر = Twitter (auth = OAuth ('senha removida))

# ------------------------------------------------- ---------------------- # انشر حالة جديدة # مستندات واجهة برمجة تطبيقات twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------

while 1: m = subscribe.simple ("twitteralarme"، hostname = "172.31.83.191"، retained = False) if m.topic == "twitteralarme" و str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("حالة محدثة:٪ s"٪ new_status)

الخطوة 5: Centro De Comando

سنترو دي كوماندو
سنترو دي كوماندو

دليل الاستخدام أو التنبيه أو الكشف عن دليل الاستخدام أو الاستخدام المعدي للتراجع عن البيئة. O operador pode cancellar o envio ou acionar o envio imediato do alerta.

تستخدم لوحة التحكم باستخدام نظام android do telefone para compor a mesa de operação do centro de comando.

código rodando na maquina الظاهري من AWS EC2

import paho.mqtt.client as pahoimport paho.mqtt.subscribe as Subscribe import paho.mqtt.publish as publish import json import time import six import ssl from time import sleep

المواضيع = ['#']

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، اسم المضيف =" 172.31.83.191 ")

connflag = خطأ

def on_connect (client، userdata، flags، rc): global connflag connflag = طباعة True print (connflag) ("نتيجة الاتصال المرتجعة:" + str (rc))

def on_message (client، userdata، msg): # print ("teste") طباعة (msg.topic + "" + str (msg.payload))

def on_log (client، userdata، level، buf): طباعة (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، mqshost. ، keepalive = 60) mqttc.loop_start ()

while 1: hora = time.time () sleep (.1) publish.single ("LEDTERREMOTO" ، "on" ، qos = 1 ، اسم المضيف = "172.31.83.191")

# if connflag == True: # mqttc.publish ("message"، json.dumps ({'message': "TERREMOTO"}) ، qos = 1) إذا 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") وإلا: انشر.single ("TEMPO"، "99"، qos = 1، اسم المضيف = "172.31.83.191") # print ("") if (hora> hora_disparo) و (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 ، اسم المضيف = "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 print (" cancellado ") إذا كانت m.topic ==" medico "و str (m.payload.decode (" utf-8 ")) ==" تشغيل ": if connflag == True: mqttc.publish (" medico "، json.dumps (" MEDICOS - EMERGENCIA TERREMOTO ") ، qos = 1) إذا كانت m.topic ==" bombeiro "و str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro"، json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO") ، qos = 1) إذا كان m.topic == " ambulancia "وشارع (m.payloa d.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("ambulancia"، json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO") ، qos = 1) إذا م. 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 = time.time () + 5 if str (m.payload.decode ("utf-8")) == "ON": if gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 آخر: print ("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

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

código rodando na maquina الظاهري من AWS EC2

ن

من تويتر استيراد * استيراد التكوين استيراد paho.mqtt.publish كنشر

من وقت استيراد النوم

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

خط العرض = -23.546211 خط الطول = -46.637840 الكانس = 50 نتيجة = 1

publish.single ("twitter_alarme"، "ON"، اسم المضيف = "34.230.74.201")

result_count = 0 last_id = بلا علم = 0

بالنسبة إلى i في النطاق (60): # ----------------------------------------- ------------------------------ # قم بإجراء بحث بناءً على خطوط الطول والعرض # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- جرّب: الاستعلام = twitter.search.tweets (q = "#Terremoto" ، الكود الجغرافي = "٪ f،٪ f،٪ dkm"٪ (خطوط الطول، خط الطول، alcance)، max_id = last_id) طباعة ("leu")

باستثناء: كسر طباعة ("erro acesso twitter")

للنتيجة في الاستعلام ["الحالات"]:

# ------------------------------------------------- ---------------------- # معالجة النتيجة فقط إذا كان لها موقع جغرافي # ----------------- -------------------------------------------------- ---- إذا كانت النتيجة ["geo"]: result_count + = 1 last_id = النتيجة ["id"] سكون (1) if result_count == resultados: flag + = 1 publish.single ("twitter_alarme" ، "ON" ، اسم المضيف = "34.230.74.201") publish.single ("twitter" ، "TERREMOTO - DETECTADO" ، اسم المضيف = "34.230.74.201") فاصل

الخطوة 7: Estrutura AWS

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

Utilizamos uma maquina Virtual rodando ubuntu na estrutura AWS EC2

استخدم AWS IOT CORE para o serviço de MQTT onde configuramos باعتباره متوافقًا مع إرشادات mensagem

موضوعات استخدام AWS SNS que eram acionados pelo AWS IOT CORE

موصى به: