Indholdsfortegnelse:

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

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

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 trin
Video: Mensagens indicam ligação de deputado a atos golpistas, diz PGR | Giro VEJA 2024, Juli
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-positiveos dispositivos automatizado e avaliar a possibilidade de fakenews. Tal tomada de decisão é crucial diante ao pânico que um alarme falso pode gerar.

Alarmeringsvarsler for mennesker kan overveje at bruge SMS, alarm, kundeservice, e -mail, sirene og twitter.

O projeto contou com uso de recursos da AWS inklusiv IOT CORE, EC2 og SNS

Sensores da DragonBord 410c

klienter android mqtt

Send til do desenvolvido til python

Forfattere:

Diego Fernandes dos Santos - [email protected]

Gabriel Piovani Moreira dos Santos - [email protected]

Gustavo Venancio Luz - [email protected]

Paulo Henrique Almeida Santos - [email protected]

Trin 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 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 fra libsoc import gpio fra tid import sleep

# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client som 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, 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 ("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, vi kan godt teste fora labredes. broker_address = "34.230.74.201"

pub.connect (mægleradresse)

hvis _navn _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)

med gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 mens contador <50: gpio_cs.set_high () sover (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 print ("Temperatura: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # teste para acionar contador do alarme, teste ultima leitura + 5%

hvis 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 ("Luminosidade: % f / n" % adc_value2) pub.publish ("luminosidade", str (adc_value2))

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

hvis 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)

Trin 2: Sensores Digitais - Publicação

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

código para publicação dos sensores digitais

Os sensores digitais næste 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

fra libsoc_zero. GPIO importknap fra libsoc_zero. GPIO import Tilt fra tid import sleep import paho.mqtt.client som mqtt import sys

def on_connect (mqttc, obj, flag, 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 while True: try: tilt.wait_for_tilt (1) undtagen: 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 konfiguracoes mqttc = mqtt. Client ()

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

topic = "grupo3"

# Conexao com localhost, vi kan teste mere om laboratorier. mqttc.connect ("34.230.74.201", 1883)

tilt = Tilt ('GPIO-A')

btn = Knap ('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 ")

Trin 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

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

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

fra libsoc_zero. GPIO import LED fra tid import sleep led = LED ('GPIO-E') #led.off ()

# Definer o que fazer ao conectar def on_connect (klient, obj, flag, rc): print ("ConexÃÆ'à £ o estabelecida com broker")

# Definer 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 (mægleradresse)

sub.on_message = on_message sub.on_connect = on_connect

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

# Loop para escuta sub.loop_forever ()

Trin 4: Codigo Twitter - Post

Codigo Twitter - Post
Codigo Twitter - Post
Codigo Twitter - Post
Codigo Twitter - Post

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

código rodando to maquina virtual da AWS EC2

#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-sender en statusmeddelelse til din tidslinje # --- -------------------------------------------------- ------------------ import paho.mqtt.subonner som abonnement

importtid

fra twitter import *

#------------------------------------------------- ---------------------- # hvad skal vores nye status være? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"

#------------------------------------------------- ---------------------- # indlæs vores API-legitimationsoplysninger # ---------------------- ------------------------------------------------- import sys sys.path.append (".") importkonfiguration

#------------------------------------------------- ---------------------- # opret twitter API-objekt # ---------------------- ------------------------------------------------ twitter = Twitter (auth = OAuth ('senha removeida))

#------------------------------------------------- ---------------------- # post en ny status # twitter API-dokument: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------

mens 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", beholdes = Falsk) hvis m.topic == "twitteralarme" og str (m.payload.decode ("utf-8")) == "on": resultater = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("opdateret status: % s" % new_status)

Trin 5: Centro De Comando

Centro De Comando
Centro De Comando

en brugermanual, der kan bruges til at opdage, hvordan du kan registrere en brugerhåndbog, hvor du kan bruge regressiva for en envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.

Para uso do dasboard utilizamos um android do telefone para compor and a operation of centro de comando.

código rodando to maquina virtual da AWS EC2

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

emner = ['#']

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 = Falsk

def on_connect (klient, brugerdata, flag, rc): global connflag connflag = True print (connflag) print ("Forbindelse returneret resultat:" + str (rc))

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

def on_log (klient, brugerdata, niveau, 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 aws = None), keepalive = 60) mqttc.loop_start ()

mens 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 (rund (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) og (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 (" meddelelse ", 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 søvn (5) m = subscribe.simple (emner, hostname =" 172.31.83.191 ", beholdt = Falsk) hvis m.topic ==" ACIONADO "og str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") hvis m.topic ==" medico "og str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "og str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "og str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) hvis m. topic == "urgente" og 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 ellers: print ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60

Trin 6: Codigo Twitter - Monitoração

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

kan overvåges på twitter, og der kan sendes en post til regiao de sorocaba

código rodando to maquina virtual da AWS EC2

n

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

fra tid importere søvn

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

breddegrad = -23,546211 længdegrad = -46,637840 alcance = 50 resultados = 1

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

result_count = 0 last_id = Ingen flag = 0

for i inden for rækkevidde (60): #----------------------------------------- ------------------------------ # udfør en søgning baseret på breddegrad og længdegrad # twitter API-dokumenter: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- Prøv: forespørgsel = twitter.search.tweets (q = "#Terremoto", geokode = " %f, %f, %dkm" %(breddegrad, længdegrad, alcance), max_id = sidste_id) print ("leu")

undtagen: print ("erro acesso twitter") pause

for resultat i forespørgsel ["status"]:

#------------------------------------------------- ---------------------- # behandler kun et resultat, hvis det har en geografisk placering # ----------------- ---------------------------------------------------------- ---- 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") pause

Trin 7: Estrutura AWS

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

Brug af en virtuel virtuel registrering af Ubuntu til styring af AWS EC2

Anvender en AWS IOT CORE til MQTT -konfiguration og konfiguration af funktioner

Utilizmos emner til AWS SNS kan også bruges til AWS IOT CORE

Anbefalede: