Оглавление:

Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 шагов
Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 шагов

Видео: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 шагов

Видео: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 шагов
Видео: International May Day Online Rally 2023 2024, Июль
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á Возможное обнаружение сенсорных элементов IOT de temperatura, luminosidade, oscilaçãão eopo (tilteção bot). Ainda no cenário de colaboração prevemos integrationção com o Twitter e aplicativos com support mqtt para acionamento do alertta.

Diante a possible diversos meios de entrada na solução, caberá um centro de operações avaliar se a informação esta correta evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possible de fakenews. Tal tomada de decisão является решающим дианте ao pânico que um alarme falso pode gerar.

Коммуникатор сообщений об оповещении об использовании сообщений SMS, оповещений об отправлениях клиентов, электронной почте, сирене и твиттере.

О проекте, связанном с использованием ресурсов AWS, включая IOT CORE, EC2 и SNS

Сенсоры DragonBord 410c

клиенты android mqtt

Sendo todo desenvolvido em python

Авторес:

Диего Фернандес душ Сантуш - [email protected]

Габриэль Пиовани Морейра душ Сантуш - [email protected]

Густаво Венансио Луз - [email protected]

Пауло Энрике Алмейда Сантос - [email protected]

Шаг 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos

Dragonbord 410c - Publicação Dos Sensores - Аналогикос
Dragonbord 410c - Publicação Dos Sensores - Аналогикос

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é setlecido enviarem um alertta através do protocolo um sinalizando.

Estealerta começa contagem regressiva que pode ser Suspensa ou acelerada pelo operador.

O contador para o alertta começa contagem regressiva em 60 seguntos, e todo novo alertta detectado decresce o contador em 20 segundos.

программа Rodando Dentro da Dragon Borad 410c

#! / usr / bin / python3import spidev из libsoc import gpio from time import sleep

# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client как mqtt

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

# Использовать порт 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, 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): print ("Идентификатор сообщения:" + str (mid) + "\ n") передать

# Использовать клиент и настраивать параметры mqttc = mqtt. Client ()

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

pub = mqtt. Client ("группа3")

# Conexao com localhost, вы можете протестировать форумы для работы. broker_address = "34.230.74.201"

pub.connect (broker_address)

если _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)

с gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 в то время как contador <50: gpio_cs.set_high () sleep (0,00001) gpio_cs.set_low () rx = spi.xfer (channel_select ()) 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 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 = 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 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)

Шаг 2: Цифровые сенсоры - Publicação

Цифровые сенсоры - Publicação
Цифровые сенсоры - Publicação

código para publicação dos sensores digitais

Os sensores digitais neste projeto foram o tilte que detecta os tremores e o botão para simular or uso de um botão de pânico.

quando detectado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.

программа Rodando Dentro da Dragon Borad 410c

from libsoc_zero. GPIO import Button from libsoc_zero. GPIO import Tilt from time import sleep import paho.mqtt.client as 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 ("Идентификатор сообщения:" + str (mid) + "\ n") передать

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

# Conexao com localhost, вы можете протестировать форумы для работы. mqttc.connect («34.230.74.201», 1883)

tilt = Наклон ('GPIO-A')

btn = Кнопка ('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 ")

Шаг 3: Codigo Para Acionamento Sirene

Codigo Para Acionamento Sirene
Codigo Para Acionamento Sirene

Кодирование для подписки на использование SIRENE, родственная программа для платы Dragon Board 410c

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

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

# Определить o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("Conex࣠o installelecida com broker")

# Определить очередь 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 (адрес_брокера)

sub.on_message = on_message sub.on_connect = on_connect

# Увеличение без темы на подписку ("СИРЕНА", qos = 0)

# Цикл для escuta sub.loop_forever ()

Шаг 4: Codigo Twitter - публикация

Codigo Twitter - Опубликовать
Codigo Twitter - Опубликовать
Codigo Twitter - Опубликовать
Codigo Twitter - Опубликовать

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

código rodando na maquina virtual da AWS EC2

#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - размещает статусное сообщение на вашей временной шкале # --- -------------------------------------------------- ------------------ импортировать paho.mqtt.subscribe as subscribe

время импорта

из твиттера импорт *

# ------------------------------------------------- ---------------------- # каким должен быть наш новый статус? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"

# ------------------------------------------------- ---------------------- # загрузить наши учетные данные API # ---------------------- ------------------------------------------------- Импортировать sys sys.path.append (".") конфигурация импорта

# ------------------------------------------------- ---------------------- # создать объект twitter API # ---------------------- ------------------------------------------------- twitter = Твиттер (auth = OAuth ('senha Removal))

# ------------------------------------------------- ---------------------- # публикация нового статуса # документация по твиттеру API: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------

а 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", сохранено = False), если m.topic == "twitteralarme" и str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("обновленный статус:% s"% new_status)

Шаг 5: Centro De Comando

Centro De Comando
Centro De Comando

Руководство по использованию устройства управления или обнаружение предупреждений в руководстве для использования в качестве средства регрессии для среды передачи сообщений. O operador pode cancelar o envio ou acionar o envio imediato do alertta.

Для использования панели управления Android, используемой для телефонной связи, для управления центральной станцией управления.

código rodando na maquina virtual da AWS EC2

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

themes = ['#']

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 = Ложь

def on_connect (client, userdata, flags, rc): global connflag connflag = True print (connflag) print («Соединение вернуло результат:» + str (rc))

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

def on_log (клиент, данные пользователя, уровень, 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. PROTOCOLc._conneTLSv1_2, csl. PROTOCOLc., keepalive = 60) mqttc.loop_start ()

в то время как 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") еще: опубликовать.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) и (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == True: # mqttc.publish ("сообщение", 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 (themes, hostname =" 172.31.83.191 ", сохраняется = False), если m.topic ==" ACIONADO "и str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") if m.topic ==" medico "и str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "и str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " амбулансия "и ул. (м.пайлоа d.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) if m. topic == "urgente" и 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, если str (m.payload.decode ("utf-8")) == "ON": если 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

Шаг 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 da AWS EC2

п

из twitter import * import config import paho.mqtt.publish as publish

от времени импортный сон

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

широта = -23,546211 долгота = -46,637840 alcance = 50 resultados = 1

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

result_count = 0 last_id = None flag = 0

для i в диапазоне (60): # ----------------------------------------- ------------------------------ # поиск по широте и долготе # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- попробуйте: query = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (широта, долгота, alcance), max_id = last_id) print ("leu")

кроме: print ("erro acesso twitter") break

для результата в запросе ["статусы"]:

# ------------------------------------------------- ---------------------- # обрабатывать результат, только если он имеет геолокацию # ----------------- -------------------------------------------------- ---- если результат ["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") перерыв

Шаг 7: Estrutura AWS

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

Утилизация uma maquina virtual rodando ubuntu на платформе AWS EC2

Использовать AWS IOT CORE для обслуживания MQTT onde configuramos как параметры, соответствующие типу сообщений

Темы использования AWS SNS для работы с AWS IOT CORE

Рекомендуемые: