Talaan ng mga Nilalaman:

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

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

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Hakbang
Video: Те кто старше и красивее в One Piece 2024, Nobyembre
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 sa 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) at botão de pânico. Ainda no cenário de colaboração prevemos integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.

Maaring magkaroon ng isang pagkakaiba-iba ng mga de-kuryenteng 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 é crucial 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 at twitter.

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

Sensores da DragonBord 410c

mga kliyente android mqtt

Sendo todo desenvolvido em python

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]

Hakbang 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 at luminosidade estão configurados para que assim que detectarem uma variação fora do padrão pré establelecido 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 sa alerta começa contagem regressiva em 60 seguntos, at sa pamamagitan ng detalyadong detalyado o contador em 20 segundos.

programa rodando dentro da dragon borad 410c

#! / usr / bin / python3import spidev mula sa libsoc import gpio mula sa pag-import ng oras sa pagtulog

# 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

# Gumamit ng isang porta ADC1 channel_select1 = [0x01, 0x80, 0x00]

#Para gamitin ang isang porta na ginagamit ng 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): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))

def on_publish (mqttc, obj, mid): i-print ("Id ng Mensahe:" + str (mid) + "\ n") ipasa

# Criamos o client at 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, lahat ng mga pagsubok para sa mga labredes. broker_address = "34.230.74.201"

pub.connect (broker_address)

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

kasama ang gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 habang ang contador <50: gpio_cs.set_high () sleep (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) gpio_cs.) 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 sa acionar contador gawin alarme, teste ultima leitura + 5%

kung adc_value_old == 0: adc_value_old = adc_value if adc_value> (adc_value_old * 1.05): pub.publish ("ALARME", "ON") print ("Alarmado temperatura") 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 sa acionar contador gawin ang alarme, teste ultima leitura + 50%

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

Hakbang 2: Sensores Digitais - Publicação

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

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

mula sa libsoc_zero. GPIO import Button mula sa libsoc_zero. GPIO import Ikiling mula sa oras na import ng pagtulog import paho.mqtt.client bilang mqtt import 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 ("Message Id:" + str (mid) + "\ n") pass

def detectaTilt (): count = 0 sleep_count = 0 habang True: subukan: tilt.wait_for_tilt (1) maliban sa: sleep_count + = 1 pa: count + = 1 sleep_count + = 1 kung 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

paksa = "grupo3"

# Conexao com localhost, lahat ng mga pagsubok para sa mga labredes. mqttc.connect ("34.230.74.201", 1883)

ikiling = Ikiling ('GPIO-A')

btn = Button ('GPIO-C')

habang Totoo: matulog (0.25) detectaTilt () kung btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") pagtulog (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")

Hakbang 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

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

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

mula sa libsoc_zero. GPIO import LED mula sa oras na pag-import ng tulog na humantong = LED ('GPIO-E') # led.off ()

# Tukuyin ang que fazer ao conectar def on_connect (client, obj, flags, rc): print ("Conex࣠o establelecida com broker")

# Tukuyin ang que fazer ao receber uma mensagem def on_message (client, obj, message): print ("LED" + str (message.payload.decode ("utf-8"))) kung str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()

# IP gawin ang 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

# Palakihin walang topico sub.subscribe ("SIRENE", qos = 0)

# Loop para escuta sub.loop_forever ()

Hakbang 4: Codigo Twitter - Mag-post

Codigo Twitter - Mag-post
Codigo Twitter - Mag-post
Codigo Twitter - Mag-post
Codigo Twitter - Mag-post

Código para sa publiko na gawin ang twitter assim que acionado o alarme.

código rodando na maquina virtual mula sa AWS EC2

#! / usr / bin / env python # ----------------- ------------------------------ # twitter-post-status # - nag-post ng isang mensahe sa katayuan sa iyong timeline # --- ---- ----------------- import paho.mqtt.subscribe bilang mag-subscribe

oras ng pag-import

mula sa twitter import *

# ----------------------------------------------- ----------------- # ano ang dapat maging bago nating katayuan? # ----------------------------------------------- ----------------- new_status = "#Terremoto Procure uma zona segura - teste"

# ----------------------------------------------- ----------------- # i-load ang aming mga kredensyal sa API # ----------------- ------------------------------------------------- angkat sys sys.path.append (".") i-import ang config

# ----------------------------------------------- ----------------- # Gumawa ng twitter API object # ----------------- ------------ ------------ twitter = Twitter (auth = OAuth ('senha tangoida))

# ----------------------------------------------- ----------------- # mag-post ng isang bagong katayuan # twitter API docs: https://dev.twitter.com/rest/referensi/post/statu… # ----------------------------------------------- -----------------

habang 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", pinanatili = Mali) kung m.topic == "twitteralarme" at str (m.payload.decode ("utf-8")) == "on": mga resulta = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("na-update na katayuan:% s"% new_status)

Hakbang 5: Centro De Comando

Centro De Comando
Centro De Comando

semper que acionado um dispositivo manu-manong upang makita mo ang manu-manong gabay ng manu-manong gawin ito upang ma-access ang lahat ng regressiva para sa envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.

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

código rodando na maquina virtual mula sa AWS EC2

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

mga paksa = ['#']

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

connflag = Mali

def on_connect (client, userdata, flags, rc): pandaigdigan na connflag connflag = True print (konflag) print ("Ibinalik ang koneksyon na resulta:" + 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-pribado.pem.key "mqttc.tls_set (caPath, certfile = certPath, keyfile = keyPath, cert_reqs = ssl. CERT_REQUIRED, tls_version = ssl. PROTOCOL_TLSv1_2, ciphersost = Wala), keepalive = 60) mqttc.loop_start ()

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

# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publish.single ("TEMPO", str (bilog (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") iba pa: i-publish.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") kung (hora> hora_disparo) at (gatilho == 1): # print ("TERREMOTO") # print (connflag) kung 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 sleep (5) m = subscribe.simple (mga paksa, hostname =" 172.31.83.191 ", napanatili = Mali) kung m.topic ==" ACIONADO "at str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") kung m.topic ==" medico "at str (m.payload.decode (" utf-8 ")) ==" sa ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) kung m.topic ==" bombeiro "at str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "at str (m.payloa d.decode ("utf-8")) == "on": kung connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) kung m. paksa == "urgente" at str (m.payload.decode ("utf-8")) == "sa": publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 5 kung str (m.payload.decode ("utf-8")) == "ON": kung gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 pa: print ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60

Hakbang 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 virtual mula sa AWS EC2

n

mula sa twitter import * import config import paho.mqtt.publish bilang i-publish

mula sa oras mag-import ng pagtulog

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

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

resulta_count = 0 huling_id = Wala flag = 0

para sa ako sa saklaw (60): # ----------------- ------------------------------ # gumanap ng isang paghahanap batay sa latitude at longitude # twitter API docs: https:// dev. twitter.com/rest/referensi/get/search… # ------------------------------------ ---------------------------------- subukan: query = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (latitude, longitude, alcance), max_id = last_id) print ("leu")

maliban sa: i-print ("erro acesso twitter") masira

para sa resulta sa query ["mga status"]:

# ----------------------------------------------- ----------------- # iproseso lamang ang isang resulta kung mayroon itong geolocation # ----------------- ---- ---- kung resulta ["geo"]: resulta_count + = 1 huling_id = resulta ["id"] pagtulog (1) kung resulta_count == resultados: flag + = 1 publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publish.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break

Hakbang 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

Gumamit ng isang AWS IOT CORE para sa serbisyo ng MQTT sa mga configuramos bilang isang pagsunod sa tipo ng mensagem

Gumagamit ng mga paksa sa AWS SNS sa eram acionados pelo AWS IOT CORE

Inirerekumendang: