Съдържание:
- Стъпка 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Стъпка 2: Sensores Digitais - 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 07:52
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 temperature, luminosidade, oscilação (tilte) e botão. Ainda no cenário de colaboração prevemos integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.
Diante може да се отклони от диверсионен мейос от ентрада на решение, да се получи център за операция, да се предостави информация за корекция на евитандо, която да е фалшиво-позитивно, да се разпореди автоматично и да се използва възможност за фалшиви новини. Tal tomada de Decisionão é решаващо diante ao pânico que um alarme falso pode gerar.
Como solução de alertta de mensagem estamos obzir или oso do envio de SMS, alerta através de cliente mqtt, email, sirene e twitter.
Проектирайте контуза за използване на AWS, включващ IOT CORE, EC2 и SNS
Sensores da DragonBord 410c
клиенти на android mqtt
Sendo todo desenvolvido em python
Autores:
Диего Фернандес дос Сантос - [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 temperature 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, e todo novo alerta detectado decresce o contador em 20 segundos.
програма rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev от libsoc импортиране на gpio от време за импортиране на сън
# Importa lib para comunicacao com MOSQUITTO импортира paho.mqtt.client като 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, 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") 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, 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)
с 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_select1) gpio) 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 печат ("Температура: % f / n" % adc_value) pub.publish ("температура", str (adc_value)) # teste para acionar contador do alarmme, teste ultima leitura + 5%
ако adc_value_old == 0: adc_value_old = adc_value ако adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") print ("Alarmado температура") 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 | (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%
ако adc_value2_old == 0: adc_value2_old = adc_value2 ако adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_va2
Стъпка 2: Sensores Digitais - 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 o 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
от libsoc_zero. GPIO Бутон за импортиране от libsoc_zero. GPIO импортиране Наклон от време импортиране спящ импорт paho.mqtt.client като mqtt импортираща система
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") pass
def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) с изключение на: 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 конфигурира mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
topic = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
tilt = 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 subscrição para acionamento da SIRENE, програма rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client като mqtt
от libsoc_zero. GPIO LED за импортиране от време за импортиране sleep sleep = LED ('GPIO-E') #led.off ()
# Определете o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("ConexÃÆ' £ o estabelecida com broker")
# Определете 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 (broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Не увеличавайте подписка за topico sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Стъпка 4: Codigo Twitter - Публикувайте
Código para publicação do twitter assim que acionado o alarme.
código rodando на виртуална машина за AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-публикува съобщение за състоянието на вашата времева линия # --- -------------------------------------------------- ------------------ импортирайте paho.mqtt.абонирайте се като абонирайте се
време за импортиране
от Twitter внос *
#------------------------------------------------- ---------------------- # какъв трябва да бъде новият ни статус? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------- ---------------------- # заредете нашите идентификационни данни за API # ---------------------- ------------------------------------------------- внос sys sys.path.append (".") конфигурация за импортиране
#------------------------------------------------- ---------------------- # създайте twitter API обект # ---------------------- ------------------------------------------------- туитър = Twitter (auth = OAuth ('senha removida))
#------------------------------------------------- ---------------------- # публикувайте ново състояние # twitter 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
semper que acionado um dispositivo manual ou 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.
За да използвате dasboard, използвайте телефона с Android до телефона, за да го сравните с оператора до centro de comando.
código rodando на виртуална машина за AWS EC2
импортиране на paho.mqtt.client като pahoimport paho.mqtt.subscribe as subscribe внос paho.mqtt.publish като публикуване на импортиране json време за импортиране импортиране на шест импортиране ssl от време импортиране на сън
теми = ['#']
gatilho = 0 hora_disparo = 0 Публикувай.83.191 ") published.single (" сензор2 "," ИЗКЛ. ", Qos = 1, име на хост =" 172.31.83.191 ")
connflag = False
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 (client, userdata, level, 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_TLSv1con, cip, keepalive = 60) mqttc.loop_start ()
докато 1: hora = time.time () sleep (.1) published.single ("LEDTERREMOTO", "включено", qos = 1, hostname = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: published.single ("TEMPO", str (кръг (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") published.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") else: публикува.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 ("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") # published.single ("LED", "on", hostname = "172.31.83.191") published.single ("SIRENE", "on", qos = 1, hostname = "172.31. 83.191 ") published.single (" TEMPO "," TERREMOTO ", qos = 1, hostname =" 172.31.83.191 ") published.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") published.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") published.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 sleep (5) m = subscribe.simple (теми, име на хост =" 172.31.83.191 ", запазено = False), ако m.topic ==" ACIONADO "и str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" Cancelado "), ако 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 == " ambulancia "и 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" и str (m.payload.decode ("utf-8")) == "on": published.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") published.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
Стъпка 6: Codigo Twitter - Monitoração
código monitorração do twitter, pesquisa post on regiao de sorocaba
código rodando на виртуална машина за AWS EC2
н
от twitter import *import config import paho.mqtt.publish като публикация
от време внос сън
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
географска ширина = -23,546211 дължина = -46,637840 alcance = 50 резултата = 1
published.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Няма флаг = 0
за i в обхват (60): #----------------------------------------- ------------------------------ # изпълнете търсене въз основа на географска ширина и дължина # twitter API документи: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- опитайте: query = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(географска ширина, дължина, alcance), max_id = last_id) печат ("leu")
освен: print ("erro acesso twitter") break
за резултат в заявка ["статуси"]:
#------------------------------------------------- ---------------------- # обработва резултат само ако има геолокация # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 published.single ("twitter_alarme", "ON", hostname = "34.230.74.201") published.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break
Стъпка 7: Estrutura AWS
Използвайте ума макина виртуален rodando ubuntu с еструктура AWS EC2
Използвайте AWS IOT CORE за обслужване на MQTT и конфигурирайте като ações conforme o tipo de mensagem
Използвайте топ теми за AWS SNS que eram acionados pelo AWS IOT CORE
Препоръчано:
Първи стъпки с безжични сензори за температура и вибрации на дълги разстояния: 7 стъпки
Първи стъпки с безжични сензори за температура и вибрации на дълги разстояния: Понякога вибрациите са причина за сериозни проблеми в много приложения. От валове и лагери на машината до работа на твърдия диск, вибрациите причиняват повреда на машината, ранна подмяна, ниска производителност и нанасят сериозен удар върху точността. Мониторинг
Първи стъпки с STM32f767zi Cube IDE и качване на персонализирана скица: 3 стъпки
Първи стъпки с STM32f767zi Cube IDE и качване на персонализирана скица: КУПЕТЕ (щракнете върху теста, за да закупите/посетете уеб страницата) STM32F767ZISUPPORTED SOFTWARE · STM32CUBE IDE · KEIL MDK ARM µVISION · EWARM IAR EMBEDDED WORKBENCH използва се за програмиране на STM микроконтролери
Как да направите 4G LTE двойна BiQuade антена Лесни стъпки: 3 стъпки
Как да направя 4G LTE двойна BiQuade антена лесни стъпки: През повечето време, с което се сблъсквах, нямам добра сила на сигнала за ежедневните ми работи. Така. Търся и опитвам различни видове антени, но не работи. След загубено време намерих антена, която се надявам да направя и изпробвам, защото тя не градивен принцип
Comando Por Voz - DragonBoard410c: 5 стъпки
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar a instalar e configurar o program Julius junto com o Coruja, que s ã o respectivamente um program de reconhecimento de voz e o modelo ac ú stico em Portugu ê s.A vantagem da utiliza ç ã o do Ju
Centro De Cómputo Para Niños Con Raspberry Pi: 7 стъпки
Centro De Cómputo Para Niños Con Raspberry Pi: Естотният сървър не е подходящ за Raspberry Pi и е необходим: Raspberry Pi 2 Адаптер червен и микро USB Tarjeta micro SD (de 8 gb) Кабел HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio