Оглавление:
- Шаг 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Шаг 2: Цифровые сенсоры - Publicação
- Шаг 3: Codigo Para Acionamento Sirene
- Шаг 4: Codigo Twitter - публикация
- Шаг 5: Centro De Comando
- Шаг 6: Codigo Twitter - Monitoração
- Шаг 7: Estrutura AWS
Видео: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
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
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
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
Кодирование для подписки на использование 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 - публикация
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
Руководство по использованию устройства управления или обнаружение предупреждений в руководстве для использования в качестве средства регрессии для среды передачи сообщений. 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
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
Утилизация uma maquina virtual rodando ubuntu на платформе AWS EC2
Использовать AWS IOT CORE для обслуживания MQTT onde configuramos как параметры, соответствующие типу сообщений
Темы использования AWS SNS для работы с AWS IOT CORE
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов
Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)
Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Играйте в Doom на своем IPod за 5 простых шагов !: 5 шагов
Играйте в Doom на своем IPod за 5 простых шагов!: Пошаговое руководство по двойной загрузке Rockbox на iPod, чтобы играть в Doom и десятки других игр. Это действительно легко сделать, но многие люди до сих пор удивляются, когда видят, как я играю дум на своем iPod, и путаются с инструкциями
Comando Por Voz - DragonBoard410c: 5 шагов
Comando Por Voz - DragonBoard410c: Este guia ir á Установите и сконфигурируйте программу Julius junto com o Coruja, которая будет ã o соответсвующая программа реконхезимента de voz e o modelo ac ú stico em Portugu ê s.A vantagem da utiliza ç ã o do do use ç ã o do do
Centro De Cómputo Para Niños Con Raspberry Pi: 7 шагов
Centro De Cómputo Para Niños Con Raspberry Pi: Estos ser á n los primeros pasos de la Raspberry Pi и для всего необходимого: Raspberry Pi 2 Adaptador de red и micro USB Tarjeta micro SD (de 8 gb) Кабель HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio