Turinys:

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

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

Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 žingsniai
Video: Tsunami llega a Perú! 😱 Playa Redondo Miraflores. 2024, Lapkritis
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 and 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 ir aplicativos com support mqtt para acionamento do alerta.

Pasinaudokite įvairiomis galimyb ÷ mis įeiti į solução, pasikonsultuokite su centriniu operatoriumi, kuris yra viešai prieinamas ir pateikiamas informacijos koregavimo įrodymas. Tal tomada de decisão é essential diante ao pânico que um alarme falso pode gerar.

Išsiųskite pranešimų apie SMS žinutes, pranešimų apie klientus, el. Pašto, sirenos ir „Twitter“pranešimus.

O AWS kartojimo, įskaitant IOT CORE, EC2 ir SNS, projeto kontūras

Sensores da DragonBord 410c

klientas android mqtt

Atsisiųskite „desenvolvido em python“

Autores:

Diego Fernandes dos Santos - [email protected]

Gabrielis Piovani Moreira dos Santos - [email protected]

Gustavo Venancio Luz - [email protected]

Paulo Henrique Almeida Santos - [email protected]

1 žingsnis: „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 luminesidade 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 segments, and todo novo alerta detectado decresce o contador em 20 segundos.

programa rodando dentro da dragon borad 410c

#!/usr/bin/python3import spidev iš libsoc importuoti gpio iš laiko importavimo miego

# 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 naudokite portą ADC2, naudokite konfigūraciją arba nustatykite kanalą_select2 = [0x01, 0xA0, 0x00]

def on_connect (mqttc, obj, vėliavos, 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 ("Pranešimo ID:" + str (viduryje) + "\ n") praeiti

# „Criamos“klientas ir „setamos suas“konfigūracijos 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)

jei _vardas _ == '_ pagrindinis_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)

su gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0, o contador <50: gpio_cs.set_high () miegas (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] ir 0xff) adc_value = ((((adc_value * 5)) / 1024) - 0,5) * 100 spausdinimo ("Temperatūra: % 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 temperatura") adc_value_old = adc_value sleep (1)

gpio_cs.set_high () miegas (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 = adc (rx [2] ir 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 miegas

2 žingsnis: 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 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

iš libsoc_zero. GPIO importavimo mygtukas iš libsoc_zero. GPIO importas Pakreipti nuo laiko importavimo miego importas paho.mqtt.client kaip mqtt import sys

def on_connect (mqttc, obj, vėliavos, 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 ("Pranešimo ID:" + str (mid) + "\ n") pass

def detectaTilt (): count = 0 sleep_count = 0, o tiesa: try: tilt.wait_for_tilt (1), išskyrus: sleep_count += 1 else: count += 1 sleep_count += 1 if sleep_count> 999: break

print ("count:", count), jei skaičius> 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

tema = "grupo3"

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

pakreipti = pakreipti („GPIO-A“)

btn = Mygtukas („GPIO-C“)

nors tiesa: miegas (0,25) detaTilt (), jei btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") miegas (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")

3 žingsnis: „Codigo Para Acionamento Sirene“

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

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

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

iš libsoc_zero. GPIO importo šviesos diodas iš laiko importavimo miego režimo šviesos diodas = LED ('GPIO-E') #led.off ()

# Apibrėžkite fazer ao conectar def on_connect (klientas, objektas, vėliavos, rc): print („ConexÃà £ £ įsteigimo com brokeris“)

# Apibrėžkite fazer ao imtuvą uma mensagem def on_message (klientas, obj, pranešimas): 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 brokeris 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

# Nepateikite temos subprenumeruoti ("SIRENE", qos = 0)

# Loop para escuta sub.loop_forever ()

4 žingsnis: „Codigo Twitter“- įrašas

„Codigo Twitter“- įrašas
„Codigo Twitter“- įrašas
„Codigo Twitter“- įrašas
„Codigo Twitter“- įrašas

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

virtualus kodas AWS EC2

#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-paskelbia būsenos pranešimą jūsų laiko juostoje # --- -------------------------------------------------- ------------------ importuoti paho.mqtt.prenumeruoti kaip prenumeruoti

importo laikas

iš „Twitter“importo *

#------------------------------------------------- ---------------------- # koks turėtų būti mūsų naujas statusas? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"

#------------------------------------------------- ---------------------- # įkelkite mūsų API kredencialus # ---------------------- ------------------------------------------------- importas sys sys.path.append (".") importavimo konfig

#------------------------------------------------- ---------------------- # sukurkite „Twitter“API objektą # ---------------------- ------------------------------------------------ twitteris = „Twitter“(auth = OAuth ('senha removeida))

#------------------------------------------------- ---------------------- # paskelbkite naują būseną # twitter API dokumentai: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------

o 1: m = prenumeruoti.simple ("twitteralarme", hostname = "172.31.83.191", išlaikytas = False), jei m.topic == "twitteralarme" ir str (m.payload.decode ("utf-8")) == "on": rezultatai = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("atnaujinta būsena: % s" % new_status)

5 žingsnis: Centro De Comando

Centro De Comando
Centro De Comando

semper que acionado um dispositivo manual or you detectado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. Operatoriaus pareigų atšaukėjas arba envio ar akionaro ar envio imediato do Alerta.

Jei norite naudoti „Android“telefoną, naudokitės „Android“telefonu, kad galėtumėte naudotis centro centru.

virtualus kodas AWS EC2

importuoti paho.mqtt.client kaip pahoimport paho.mqtt.

temos = ['#']

gatilho = 0 hora_disparo = 0 publis.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publis.single ("sensor1", "OFF", qos = 1, hostname = "172.31".83.191 ") public.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")

connflag = Netiesa

def on_connect (klientas, vartotojo duomenys, vėliavos, rc): global connflag connflag = True print (connflag) print ("Ryšys grąžino rezultatą:" + str (rc))

def on_message (klientas, vartotojo duomenys, žinutė): # print ("teste") print (msg.topic+""+str (msg.payload))

def on_log (klientas, vartotojo duomenys, lygis, 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, šifravimo prieigos kodai), keepalive = 60) mqttc.loop_start ()

o 1: hora = laikas.laikas () miegas (.1) publis.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")

# if connflag == Tiesa: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publis.single ("TEMPO", str. (apvalus (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") publis.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") else: public.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) ir (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 (" pranešimas ", json.dumps (" TERREMOTO - PROCURE UMA ZONA SEGURA "), qos = 1)

# print ("teste SNS") # publis.single ("LED", "on", hostname = "172.31.83.191") publis.single ("SIRENE", "on", qos = 1, hostname = "172.31. 83.191 ") public.single (" TEMPO "," TERREMOTO ", qos = 1, pagrindinio kompiuterio pavadinimas =" 172.31.83.191 ") publis.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") public.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") publis.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 miego (5) m = prenumeruoti.paprastas (temos, pagrindinio kompiuterio pavadinimas =" 172.31.83.191 ", išlaikytas = klaidingas), jei m.topic ==" ACIONADO "ir str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 spausdinti (" atšaukti "), jei m.topic ==" medico "ir str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == Tiesa: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) jei m.topic ==" bombeiro "ir str (m.payload.decode ("utf -8")) == "on": if connflag == Tiesa: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) jei m.topic == " ambulancia "ir str (m.payloa d.decode ("utf -8")) == "on": if connflag == Tiesa: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) jei m. tema == "urgente" ir str (m.payload.decode ("utf-8")) == "on": publis.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5, jei str (m.payload.decode ("utf-8")) == "ON": jei gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 dar: spausdinti („Acionado“) publis.single („ACIONADO“, 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60

6 žingsnis: „Codigo Twitter“- „Monitoração“

„Codigo Twitter“- „Monitoração“
„Codigo Twitter“- „Monitoração“

„Twitter“stebėjimo kodas, „pesquisa“įrašas ir regioo de sorocaba

virtualus kodas, skirtas virtualiai AWS EC2

n

iš „Twitter“importo *importavimo konfigūracijos importo paho.mqtt.publish kaip paskelbti

iš laiko importuoti miegą

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

platuma = -23,546211 ilguma = -46,637840 alcance = 50 resultados = 1

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

result_count = 0 last_id = Nėra vėliavos = 0

i diapazone (60): #----------------------------------------- ------------------------------ # atlikite paiešką pagal platumą ir ilgumą # twitter API dokumentai: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- pabandykite: query = twitter.search.tweets (q = "#Terremoto", geokodas = " %f, %f, %dkm" %(platuma, ilguma, alcance), max_id = last_id) print ("leu")

išskyrus: spausdinti ("erro acesso twitter") pertrauka

užklausos rezultatui ["statusai"]:

#------------------------------------------------- ---------------------- # apdorokite rezultatą tik tada, kai jis turi geografinę vietą # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 publis.single ("twitter_alarme", "ON", hostname = "34.230.74.201") public.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") pertrauka

7 žingsnis: Estrutura AWS

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

Naudokite virtualų „maquina“virtualųjį rodiklį, kuriame yra „AWS EC2“

Naudoti AWS IOT CORE, skirtą MQTT tarnybai, konfigūruoti kaip konfigūraciją arba tipo mensagem

Naudojimo temos, skirtos AWS SNS, skirtos AWS IOT CORE

Rekomenduojamas: