Table des matières:
- Étape 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Étape 2: Sensores Digitais - Publicação
- Étape 3: Codigo Para Acionamento Sirene
- Étape 4: Codigo Twitter - Publier
- Étape 5: Centro De Comando
- Étape 6: Codigo Twitter - Monitoração
- Étape 7: Estrutura AWS
Vidéo: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Projet 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 temperatura, luminosidade, oscilação (tilte) pâe bot. Ainda no cenário de colaboração prevemos integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.
Diante a possibidade de diversos meios de entrada na solução, caberá um centro de operações avaliar se a informação esta correta evitando assim falses-positivos dos dispositivos automatizado e avaliar a possibidade de fakenews. Tal tomada decisão é crucial diante ao pânico que um alarm falso pode gerar.
Como solução de alerta de mensagem estamos considerando o uso do envio de SMS, alerta através de cliente mqtt, email, sirene e twitter.
O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 et SNS
Capteurs de DragonBord 410c
clients android mqtt
Sendo todo desenvolvido em python
Auteurs:
Diego Fernandes dos Santos – [email protected]
Gabriel Piovani Moreira dos Santos – [email protected]
Gustavo Venancio Luz – [email protected]
Paulo Henrique Almeida Santos – [email protected]
Étape 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 pre estabelecido enviarem um alerta atraves 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.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev from libsoc import gpio from time import sleep
# Importa lib para comunicacao com MOUSTTO 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 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("Message Id: " + str(mid) + "\n") pass
# Criamos o client et setamos suas configuracoes mqttc = mqtt. Client()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
pub = mqtt. Client("groupe3")
# Conexao com localhost, uma vez que testamos fora do labredes. adresse_courtier ="34.230.74.201"
pub.connect(adresse_courtier)
si _name_=='_main_': gpio_cs = gpio. GPIO(18, gpio. DIRECTION_OUTPUT)
avec gpio.request_gpios([gpio_cs]):) contador = contador + 1 valeur_adc = (rx[1] << 8) & 0b1100000000 valeur_adc = valeur_adc | (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 | (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)
Étape 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.
programa rodando dentro da dragon borad 410c
de 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, 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("Message Id: " + str(mid) + "\n") pass
def detectaTilt(): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt(1) sauf: 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
sujet = "groupe3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect("34.230.74.201", 1883)
inclinaison = inclinaison('GPIO-A')
btn = Bouton('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")
Étape 3: Codigo Para Acionamento Sirene
Codigo para subscrição para acionamento da SIRENE, programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
de libsoc_zero. GPIO import LED from time import sleep led = LED('GPIO-E') #led.off()
# Define o que fazer ao conectar def on_connect(client, obj, flags, rc): print("ConexÒ£o estabelecida com broker")
# Définir 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
# Increve no topico subscribe("SIRENE", qos=0)
# Loop para escuta sub.loop_forever()
Étape 4: Codigo Twitter - Publier
Código para publicação do twitter assim que acionado o alarm.
código rodando na maquina virtual da AWS EC2
#!/usr/bin/env python #----------------------------------------- ------------------------------- # twitter-post-status # - publie un message d'état sur votre timeline #--- -------------------------------------------------- ------------------ importer paho.mqtt.subscribe comme s'abonner
heure d'importation
à partir de l'importation twitter *
#------------------------------------------------- ---------------------- # quel devrait être notre nouveau statut ? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
#------------------------------------------------- ---------------------- # charger nos identifiants API #---------------------- ------------------------------------------------- importer sys sys.path.append(".") importer la configuration
#------------------------------------------------- ---------------------- # créer un objet API twitter #---------------------- ------------------------------------------------- Twitter = Twitter(auth = OAuth('senha removida))
#------------------------------------------------- ---------------------- # poster un nouveau statut # docs API twitter: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
tandis que 1: m = subscription.simple("twitteralarme", hostname="172.31.83.191", retenu=False) if m.topic=="twitteralarme" et str(m.payload.decode("utf-8")) =="on": results = twitter.statuses.update(status = (new_status)+str(time.time())) # print("updated status: %s" % new_status)
Étape 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.
Pour utiliser le tableau de bord et Android faire un téléphone pour composer une mesa de operação do centro de comando.
código rodando na maquina virtual da AWS EC2
importer paho.mqtt.client en tant que pahoimport paho.mqtt.subscribe en tant qu'abonnement importer paho.mqtt.publish en tant que publier importer json importer l'heure importer six importer ssl à partir de l'heure importer le sommeil
sujets = ['#']
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 = Faux
def on_connect(client, userdata, flags, rc): global connflag connflag = True print(connflag) print("La connexion a renvoyé le résultat: " + 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_TLSv1_2, mawttaws=N, 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: publier.single("TEMPO", "99", qos=1, hostname="172.31.83.191") # print(" ") si (hora>hora_disparo) et (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 = subscription.simple(topics, hostname="172.31.83.191", retenu=False) if m.topic=="ACIONADO" et str(m.payload.decode(" utf-8"))=="OFF": gatilho=0 print("annuler") if m.topic=="medico" et str(m.payload.decode("utf-8"))=="on ": if connflag == True: mqttc.publish("medico", json.dumps("MEDICOS - EMERGENCIA TERREMOTO"), qos=1) if m.topic=="bombeiro" et str(m.payload.decode("utf-8"))=="on": if connflag == True: mqttc.publish("bombeiro", json.dumps("BOMBEIRO - EMERGENCIA TERREMOTO"), qos=1) if m.topic==" ambulancia" et str(m.payloa d.decode("utf-8"))=="on": if connflag == True: mqttc.publish("ambulancia", json.dumps("AMBULANCIA - EMERGENCIA TERREMOTO"), qos=1) si m. topic=="urgente" et 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
Étape 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
m
de twitter import *import config importer paho.mqtt.publish as publier
du temps importer le sommeil
twitter = Twitter(auth = OAuth(config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
latitude = -23.546211 longitude = -46.637840 alcance = 50 resultados = 1
publier.single("twitter_alarme", "ON", hostname="34.230.74.201")
result_count = 0 last_id = Aucun indicateur = 0
pour i dans la plage (60): #----------------------------------------- ------------------------------ # effectuer une recherche basée sur la latitude et la longitude # docs API twitter: https://dev. twitter.com/rest/reference/get/search… #-------------------------------------- ---------------------------------- essayez: query = twitter.search.tweets(q = "#Terremoto", geocode = "%f, %f, %dkm" % (latitude, longitude, alcance), max_id = last_id) print("leu")
sauf: print("erro acesso twitter") pause
pour le résultat dans la requête["status"]:
#------------------------------------------------- ---------------------- # ne traite un résultat que s'il a une géolocalisation #----------------- -------------------------------------------------- ---- if result["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") publier.single("twitter", "TERREMOTO - DETECTADO", hostname="34.230.74.201") pause
Étape 7: Estrutura AWS
Utilizamos uma maquina virtual rodando ubuntu na estrutura AWS EC2
Utilise un AWS IOT CORE pour le service de MQTT onde configuré comme ações conforme o tipo de mensagem
Utilizmos topicos do AWS SNS que eram acionados pelo AWS IOT CORE
Conseillé:
Comment fabriquer une antenne double biquade 4G LTE en quelques étapes faciles : 3 étapes
Comment créer une antenne double biquade 4G LTE Étapes faciles : La plupart du temps, je n'ai pas une bonne force de signal pour mes travaux quotidiens. Donc. Je recherche et essaye différents types d'antenne mais ne fonctionne pas. Après une perte de temps, j'ai trouvé une antenne que j'espère fabriquer et tester, car ce n'est pas un principe de construction
Game Design dans Flick en 5 étapes : 5 étapes
Game Design dans Flick en 5 étapes : Flick est un moyen très simple de créer un jeu, en particulier quelque chose comme un puzzle, un roman visuel ou un jeu d'aventure
Système d'alerte de stationnement en marche arrière Arduino - Étapes par étape : 4 étapes
Système d'alerte de stationnement en marche arrière Arduino | Étapes par étape : dans ce projet, je vais concevoir un circuit de capteur de stationnement inversé pour voiture Arduino simple à l'aide d'un capteur à ultrasons Arduino UNO et HC-SR04. Ce système d'alerte de marche arrière basé sur Arduino peut être utilisé pour une navigation autonome, une télémétrie de robot et d'autres r
Comando Por Voz - DragonBoard410c : 5 étapes
Comando Por Voz - DragonBoard410c: Este guia irá Ensinar a instalar e configurar o programa Julius junto com o Coruja, que são respectivamente um programa de reconhecimento de voz e o modelo acústico em Português.A vantagem da utilizaç do &
Centro De Cómputo Para Niños Con Raspberry Pi: 7 étapes
Centro De Cómputo Para Niños Con Raspberry Pi: Estos serán los primeros pasos de la Raspberry Pi y para ello necesitaremos: Raspberry Pi 2 Adaptador de red a micro USB Tarjeta micro SD(de 8 go) Cable HDMI Cargador Ratón Teclado para computadoraEn cas de contar avec un kit de démarrage