Inhoudsopgave:

Centro De Comando Emergencias - Erupção De Vulcão E Terremotos - Ajarnpa
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos - Ajarnpa

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

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos - Ajarnpa
Video: VULCÕES: PODER E DEVASTAÇÃO - DOCUMENTÁRIO COMPLETO EM HD 2024, November
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 desastres naturais, onde será possível a detecção dos acontecimentos através the sensores IOT de temperatura, luminosidade, ostecilação (ostelicaço) Er is geen samenwerkingsverzoek voorafgegaan aan het integreren van Twitter en aplicativos com suporte mqtt para acionamento do alerta.

Het is mogelijk om verschillende oplossingen te vinden voor het oplossen van problemen, om het middelpunt van de opera's te vinden die kunnen worden geïnformeerd over de mogelijkheid om automatisch en via nepnieuws beschikbaar te zijn. Tal tomada de decisão é cruciale diante ao panico que um alarme falso pode gerar.

Oplossingen voor het waarschuwen van mensen die rekening houden met het gebruik van sms, waarschuwingen voor klanten, e-mail, sirene en twitter.

O projeto verder door middel van AWS incluindo IOT CORE, EC2 en SNS

Sensoren van DragonBord 410c

klanten android mqtt

Sendo todo desenvolvido em python

Auto's:

Diego Fernandes dos Santos – [email protected]

Gabriel Piovani Moreira dos Santos – [email protected]

Gustavo Venancio Luz – [email protected]

Paulo Henrique Almeida Santos – [email protected]

Stap 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos

Dragonbord 410c - Publicação Dos Sensores - Analogicos
Dragonbord 410c - Publicação Dos Sensores - Analogicos

Het is mogelijk om een openbare temperatuursensor te vinden, temperatuursensoren en verlichtingsinstellingen te configureren voor de juiste detectie van verschillende soorten paden om een waarschuwing te geven aan het protocol.

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, e todo novo alert a detectado decresce o contador em 20 segundos.

programa rodando dentro da dragon borad 410c

#!/usr/bin/python3import spidev van libsoc import gpio van time import sleep

# Importa lib para comunicacao com MOSQUITTO importeer paho.mqtt.client als mqtt

spi = spidev. SpiDev() spi.open(0, 0) spi.max_speed_hz=10000 spi.mode = 0b00 spi.bits_per_word = 8

#Gebruik een porta ADC1 channel_select1=[0x01, 0x80, 0x00]

#Para usar a porta ADC2 use of seguinte vetor de configuraÃÆ'§ÃÆ'£o channel_select2=[0x01, 0xA0, 0x00]

def on_connect(mqttc, obj, vlaggen, 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 of client en 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)

met gpio.request_gpios([gpio_cs]): contador=0 adc_value_old=0 adc_value2_old=0 terwijl contador < 50: gpio_cs.set_high() sleep(0.00001) gpio_cs.set_low() gpio_cs.set_low() rx = spi.xpiohigh_selects.xfer_channel_selects.xfer_) 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%

if adc_value_old==0: adc_value_old=adc_value if adc_value > (adc_value_old*1.05): pub.publish("ALARME", "ON") print ("Alarmado temperatuur") adc_value_old=adc_value slaap(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%

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)

Stap 2: Sensores Digitais - Publicação

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

código para publicação dos sensores digitais

Os sensores digitalis neste projeto foram of tilte que detecta os tremores en o botão para simular of uso de um botão de panico.

quando detectado uma anomalia of botão de panico pressionado a contagem regressiva é iniciada.

programa rodando dentro da dragon borad 410c

from libsoc_zero. GPIO import Buttonfrom libsoc_zero. GPIO import Tilt from time import sleep import paho.mqtt.client as mqtt import sys

def on_connect(mqttc, obj, vlaggen, 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) behalve: sleep_count += 1 else: count += 1 sleep_count += 1 als sleep_count > 999: pauze

print("count:", count) if count>200: pub = mqttc.publish("TERREMOTO", "ON") pub = mqttc.publish("SISMOGRAFO", str(count)) # Criamos o client en setamos suas configuratiecoes mqttc = mqtt. Client()

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

onderwerp = "grupo3"

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

kantelen = kantelen('GPIO-A')

btn = Knop('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 ", "UIT") # else: # pub = mqttc.publish("PANICO", "UIT") # print("Botao UIT")

Stap 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Code voor inschrijving voor SIRENE, programma voor rodando dentro van dragon board 410c

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

from libsoc_zero. GPIO import LED from time import sleep led = LED('GPIO-E') #led.off()

# Define o que fazer oa conectar def on_connect(client, obj, flags, rc): print("ConexÃ'£o estabelecida com broker")

# Definieer o que fazer oa 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

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

# Loop para escuta sub.loop_forever()

Stap 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 en maquina virtual door AWS EC2

#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status # - plaatst een statusbericht op je tijdlijn #--- -------------------------------------------------- ------------------ import paho.mqtt.subscribe als abonneren

import tijd

van twitter importeren *

#------------------------------------------------- ---------------------- # wat moet onze nieuwe status zijn? #------------------------------------------------- --------------------- new_status = "#Terremoto Procure uma zona segura - teste"

#------------------------------------------------- ---------------------- # laad onze API-referenties #---------------------- ------------------------------------------------- importeren sys sys.path.append(".") import config

#------------------------------------------------- --------------------- # maak twitter API-object aan #---------------------- ------------------------------------------------- twitter = Twitter(auth = OAuth('senha removida))

#------------------------------------------------- --------------------- # post een nieuwe status # twitter API docs: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------

while 1: m = subscribe.simple("twitteralarme", hostname="172.31.83.191", behouden=False) if m.topic=="twitteralarme" en str(m.payload.decode("utf-8")) =="aan": resultaten = twitter.statuses.update(status = (new_status)+str(time.time())) # print("bijgewerkte status: %s" % new_status)

Stap 5: Centro de Comando

Centro de Comando
Centro de Comando

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

Voor het gebruik van het dashboard voor Android-telefoons voor het uitvoeren van een mesa de operação do centro de comando.

código rodando en maquina virtual door AWS EC2

importeer paho.mqtt.client als pahoimporteer paho.mqtt.subscribe als abonneer importeer paho.mqtt.publish as publish importeer json importeer tijd importeer zes importeer ssl vanaf tijd import slaap

onderwerpen = ['#']

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

def on_connect(client, userdata, flags, rc): global connflag connflag = True print(connflag) print("Verbinding heeft resultaat opgeleverd: " + str(rc))

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

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

while 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) and (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, hostname="172.31.83.191") gatilho=0 sleep(5) m = subscribe.simple(topics, hostname="172.31.83.191", behouden=False) if m.topic=="ACIONADO" en 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" en str(m.payload.decode("utf-8"))=="on": if connflag == True: mqttc.publish("bombeiro", json.dumps("BOMBEIRO - EMERGENCIA TERREMOTO"), qos=1) if m.topic==" ambulancia" en 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" 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 else: print("Acionado") publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=time.time()+60

Stap 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 en maquina virtual door AWS EC2

N

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

van tijd import slaap

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

breedtegraad = -23.546211 lengtegraad = -46.637840 alcance = 50 resultaten = 1

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

result_count = 0 last_id = Geen vlag = 0

voor i in bereik (60): #----------------------------------------- ----------------------------- # voer een zoekopdracht uit op basis van lengte- en breedtegraad # twitter API-documenten: https://dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- probeer: query = twitter.search.tweets(q = "#Terremoto", geocode = "%f, %f, %dkm" % (breedtegraad, lengtegraad, alcance), max_id = last_id) print("leu")

behalve: print("erro acesso twitter") pauze

voor resultaat in zoekopdracht ["statussen"]:

#------------------------------------------------- ---------------------- # verwerk een resultaat alleen als het een geolocatie heeft #----------------- -------------------------------------------------- ---- if result["geo"]: result_count += 1 last_id = resultaat["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") pauze

Stap 7: Estrutura AWS

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

Utilizamos uma maquina virtual rodando ubuntu op estrutura AWS EC2

Gebruik een AWS IOT CORE voor service van MQTT onde configuraties als conforme of tipo de mensagem

Gebruik van onderwerpen voor AWS SNS en gebruikers van AWS IOT CORE