Cuprins:

Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps
Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps

Video: Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps

Video: Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps
Video: Те кто старше и красивее в One Piece 2024, Noiembrie
Anonim
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos

Proiect académic pentru atender cenário de colaboração através da internet para divulgação de desastres naturais, unde será possível a 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 o Twitter e aplicative com suporte mqtt for acionamento do alerta.

Diante a possibilidade de diverse meios de entrada na solução, caberá um centro de operações avaliar se a informație este corectă evitând asimile falsuri-pozitive două dispozitive automatizate și avaliar a posibilitate de fakenews. Tal tomada de decisão é crucial diante ao pânico that um alarme falso pode gerar.

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

O proiecție de utilizare a resurselor AWS incluzând IOT CORE, EC2 și SNS

Senzori de DragonBord 410c

clientes android mqtt

Sendo todo desenvolvido em python

Autori:

Diego Fernandes dos Santos - [email protected]

Gabriel Piovani Moreira dos Santos - [email protected]

Gustavo Venancio Luz - [email protected]

Paulo Henrique Almeida Santos - [email protected]

Pasul 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ție dos sensores analógicos, os sensores de temperatura și luminozitate este configurat pentru care se poate detecta uma variație for do padrão pre estabelecido sendem um alerta através do protocolo mqtt sinalizando um event.

Este alerta vină la un contagem regresiv pe care îl puteți suspenda sau a accelera părul operator.

O contador pentru o alerta começa contagem regressiva em 60 seguntos, e totul nou alerta detectat decresce o contador em 20 segundos.

programa rodando dentro da dragon borad 410c

#! / usr / bin / python3import spidev din libsoc import gpio din timp import somn

# Importa lib pentru 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 utiliza a porta ADC2 use o next vetor de configuraç࣠o channel_select2 = [0x01, 0xA0, 0x00]

def on_connect (mqttc, obj, steaguri, 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 mesaj:" + 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)

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

cu gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 în timp ce contador <50: gpio_cs.set_high () sleep (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 ("Temperatura:% f / n"% adc_value) pub.publish ("temperatura", str (adc_value)) # teste pentru acționarea contorului 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 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_ (rx [2] & 0xff) adc_value2 = adc_value2 / 10 print ("Luminozitate:% f / n"% adc_value2) pub.publish ("luminozitate", str (adc_value2))

# teste pentru acționarea contorului 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)

Pasul 2: Sensores Digitais - Publicação

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

código para publicação dos sensores digitais

Os sensores digitais neste project foram o tilte that detecta os tremores e o botão para simular o use de um botão de pânico.

când detectat uma anomalia sau botão de pânico pressionado a contagem regressiva é iniciada.

programa rodando dentro da dragon borad 410c

de la butonul de import libsoc_zero. GPIOde la importul libsoc_zero. GPIO Înclinați din timp importul somn import paho.mqtt.client ca 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 ("ID mesaj:" + str (mid) + "\ n") pass

def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) exceptând: 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

topic = "grup3"

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

tilt = Tilt („GPIO-A”)

btn = Buton („GPIO-C”)

în timp ce 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 ")

Pasul 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Codigo pentru subscrição pentru acionamento da SIRENE, program rodando dentro da dragon board 410c

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

din libsoc_zero. GPIO import LED din timp import somn led = LED („GPIO-E”) # led.off ()

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

# Define o that 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 client 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 ()

Pasul 4: Codigo Twitter - Postează

Codigo Twitter - Postează
Codigo Twitter - Postează
Codigo Twitter - Postează
Codigo Twitter - Postează

Codul pentru publicație do twitter asimează că acționat sau alarme.

cod rodando na maquina virtual da AWS EC2

#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - postează un mesaj de stare în cronologia dvs. # --- -------------------------------------------------- ------------------ import paho.mqtt.subscribe ca subscribe

timpul de import

din importul twitter *

# ------------------------------------------------- ---------------------- # care ar trebui să fie noul nostru statut? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"

# ------------------------------------------------- ---------------------- # încărcați acreditările API # ---------------------- ------------------------------------------------- import sys sys.path.append (".") config de import

# ------------------------------------------------- ---------------------- # creați un obiect API Twitter # ---------------------- ------------------------------------------------- Twitter = Twitter (auth = OAuth ('senha removida))

# ------------------------------------------------- ---------------------- # postează un nou statut # documente API Twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------

în timp ce 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", păstrat = False) dacă m.topic == "twitteralarme" și str (m.payload.decode ("utf-8")) == "pe": rezultate = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("status actualizat:% s"% new_status)

Pasul 5: Centro De Comando

Centro De Comando
Centro De Comando

întotdeauna că acționat cu dispozitiv manual sau detectat cu alertă manuală de utilizator este acționat uma contagem regresiv pentru trimitere de mesagem. O operador poate anula o invio sau aciona o invio imediato do alerta.

Pentru uzul do dasboard folosim um Android de telefon pentru compor la mesă de operare a centrului de comandă.

cod rodando na maquina virtual da AWS EC2

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

subiecte = ['#']

gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publish.single ("senzor1", "OFF", qos = 1, hostname = "172.31.83.191 ") publish.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")

connflag = Fals

def on_connect (client, date utilizator, steaguri, rc): global connflag connflag = True print (connflag) print ("Rezultatul conexiunii returnate:" + str (rc))

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

def on_log (client, date utilizator, nivel, 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 = None), keepalive = 60) mqttc.loop_start ()

în timp ce 1: hora = time.time () sleep (.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 (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) și (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == Adevărat: # mqttc.publish ("mesaj", json.dumps ({'mesaj': "TERREMOTO"}), qos = 1) # mqttc.publish ("mesaj", "TERREMOTO ", qos = 1) mqttc.publish (" mesaj ", 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 (topics, hostname =" 172.31.83.191 ", retained = False) if m.topic ==" ACIONADO "and str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") if m.topic ==" medico "and str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "și str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "și 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" și str (m.payload.decode ("utf-8")) == "pe": 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 else: print ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60

Pasul 6: Codigo Twitter - Monitoração

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

cod monitoração do twitter, pesquisa post na regiao de sorocaba

cod rodando na maquina virtual da AWS EC2

n

din twitter import * import config import paho.mqtt.publish as publish

din timp import somn

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

latitudine = -23.546211 longitudine = -46.637840 alcance = 50 rezultate = 1

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

result_count = 0 last_id = Niciun flag = 0

pentru i în intervalul (60): # ----------------------------------------- ------------------------------ # efectuați o căutare bazată pe latitudine și longitudine # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- try: query = twitter.search.tweets (q = "#Terremoto", geocod = "% f,% f,% dkm"% (latitudine, longitudine, alcance), max_id = last_id) print ("leu")

cu excepția: print ("erro acesso twitter") pauză

pentru rezultatul interogării ["stări"]:

# ------------------------------------------------- ---------------------- # procesează un rezultat numai dacă are o geolocalizare # ----------------- -------------------------------------------------- ---- 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") break

Pasul 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

Utilizați un AWS IOT CORE pentru serviciu de MQTT unde se configurează ca fiind conforme conform tipului de mesagem

Utilizmos topicos do AWS SNS that eram acionados hair AWS IOT CORE

Recomandat: