Taula de continguts:
- Pas 1: Dragonbord 410c - Publicació Dos Sensors - Analògics
- Pas 2: Sensors digitats: publicació
- Pas 3: Codigo Para Acionamento Sirene
- Pas 4: Codigo Twitter: publicació
- Pas 5: Centre de Comando
- Pas 6: Codigo Twitter: Monitoração
- Pas 7: Estrutura AWS
Vídeo: Centro De Comando Emergencies - Erupção De Vulcão E Terremotos: 7 Steps
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Projecte acadèmic per atender cenário de colaboração através da internet para divulgação de desastres naturais, on serà possible a detecció dos aconteciments através de sensors 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 e aplicativos com a suport mqtt per accionament do alerta.
Diante a possibilidade de diversos meios de entrada na solución, caberá um centro de operaciones avaliar se a informação esta correta evitando assim falsos-positius dos dispositius automatitzats i avaliar a possibilitat de fakenews. Tal tomada de decisió és crucial davant del pànic que um alarma també pot gerar.
Com a solució d’alerta de mensatge estem considerant o utilitzar l’enviament d’SMS, alerta através de client mqtt, email, sirene e twitter.
O projecto contou com a ús de recursos per AWS inclòs IOT CORE, EC2 i SNS
Sensors da DragonBord 410c
clientes android mqtt
Sendo tot desenvolupat em python
Autors:
Diego Fernandes dos Santos - [email protected]
Gabriel Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz: [email protected]
Paulo Henrique Almeida Santos - [email protected]
Pas 1: Dragonbord 410c - Publicació Dos Sensors - Analògics
Abaixo o codigo de publicación dos sensores analógicos, os sensores de temperatura e luminosidad está configurado para que assim que detectarem una variació fora del patró previ estabilitzat enviarem alerta através del protocol mqtt sinalitzant um esdeveniment.
Este alerta começa a contagem regressiva que pot ser suspès o accelerat pel seu operador.
O contador para o alerta começa contagem regressiva em 60 segunts, i tot nou alerta detectat decresce o contador em 20 segons.
programa rodant dins da dragon borad 410c
#! / usr / bin / python3import spidev des de libsoc import gpio des de la importació del temps de repòs
# 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 usar a porta ADC2 use o next 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 ("Id del missatge:" + str (mid) + "\ n") pass
# Criamos o client e setamos suas configuracoes mqttc = mqtt. Client ()
mqttc.on_message = missatge_mqttc.on_connect = connectar-se mqttc.on_publish = publicar-se
pub = mqtt. Client ("grup3")
# Conexao com localhost, uma vez que testamos fora de labredes. broker_address = "34.230.74.201"
pub.connect (broker_address)
if _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
amb gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 mentre que 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 print ("Temperatura:% f / n"% adc_value) pub.publish ("temperatura", str (adc_value)) # teste per accionar contador do alarme, teste ultima leitura + 5%
si adc_value_old == 0: adc_value_old = adc_value si adc_value> (adc_value_old * 1.05): pub.publish ("ALARME", "ON") imprimeix ("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_ (rx [2] & 0xff) adc_value2 = adc_value2 / 10 print ("Lluminositat:% f / n"% adc_value2) pub.publish ("lluminositat", str (adc_value2))
# teste para accionar contador do alarme, teste ultima leitura + 50%
si adc_value2_old == 0: adc_value2_old = adc_value2 si adc_value2> (adc_value2_old * 1.5): pub.publish ("ALARME", "ON") imprimeix ("Alarmado Luminosidade") adc_value2_old = adc_value2 dormir (3)
Pas 2: Sensors digitats: publicació
código para publicação dos sensores digitais
Os sensores digitais en aquest projecte foram o tilte que detecta os tremores e o botão para simular o uso de um botão de pânico.
quan detectat uma anomalia o botão de pânico pressionado a contagem regressiva é iniciada.
programa rodant dins da dragon borad 410c
des del botó d'importació libsoc_zero. GPIOde la importació libsoc_zero. GPIO Inclina a partir de la importació del temps importació del son paho.mqtt.client com 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 ("Identificador de missatge:" + str (mid) + "\ n") pass
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 = missatge_mqttc.on_connect = connectar-se mqttc.on_publish = publicar-se
topic = "grup3"
# Conexao com localhost, uma vez que testamos fora de labredes. mqttc.connect ("34.230.74.201", 1883)
tilt = Tilt ('GPIO-A')
btn = Botó ('GPIO-C')
mentre que 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 ")
Pas 3: Codigo Para Acionamento Sirene
Codi per a subscripció per a l'accionament de SIRENE, programa rodant dins de dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
des de libsoc_zero. GPIO importació LED des de la importació del temps sleep led = LED ('GPIO-E') # led.off ()
# Define o que fazer ao connectar def on_connect (client, obj, flags, rc): print ("Conex࣠o estabelecida com broker")
# Define 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 client sub = mqtt. Client ("grupo3")
sub.connect (broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Increve no topico sub.subscribe ("SIRENE", qos = 0)
# Loop per escuta sub.loop_forever ()
Pas 4: Codigo Twitter: publicació
Codi per a publicació de twitter assim que accionat o alarma.
codi rodant na maquina virtual da AWS EC2
#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status #: publica un missatge d'estat a la vostra cronologia # --- -------------------------------------------------- ------------------ importa paho.mqtt.subscribe com a subscriptor
temps d'importació
des de la importació de twitter *
# ------------------------------------------------- ---------------------- # quin hauria de ser el nostre nou estat? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
# ------------------------------------------------- ---------------------- # carregueu les nostres credencials d'API # ---------------------- ------------------------------------------------- importació sys sys.path.append (".") configuració d'importació
# ------------------------------------------------- ---------------------- # create object API de twitter # ---------------------- ------------------------------------------------- Twitter = Twitter (auth = OAuth ('senha removida))
# ------------------------------------------------- ---------------------- # publica un estat nou # Documents de l'API de twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------
mentre que 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", retened = False) si m.topic == "twitteralarme" i str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("estat actualitzat:% s"% new_status)
Pas 5: Centre de Comando
sempre que accionat amb dispositiu manual o detectat amb alerta manual do usuari és acionada uma contagem regressiva per envio de mensagem. O operador podeu cancel·lar o enviar o accionar o enviar imediato do alerta.
Per a l’ús del tauler s’utilitza un telèfon Android per compor a taula d’operació del centre de comandament.
codi rodant na maquina virtual da AWS EC2
importació paho.mqtt.client com pahoimport paho.mqtt.subscribe as subscribe importació paho.mqtt.publish as publica importació importació json importació temps importació sis ssl des importació temps suspensió
temes = ['#']
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 = Fals
def on_connect (client, dades d'usuari, indicadors, rc): connflag global connflag = Impressió veritable (connflag) print ("Resultat de la connexió retornat:" + str (rc))
def on_message (client, userdata, msg): # print ("teste") print (msg.topic + "" + str (msg.payload))
def on_log (client, dades de l'usuari, nivell, 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, ciphers = none), ciphers = None, keepalive = 60) mqttc.loop_start ()
mentre que 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: publish.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) i (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 (" missatge ", 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 ", retained = False) si m.topic ==" ACIONADO "i str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") if m.topic ==" medico "and str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "and str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulància "i 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" i 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
Pas 6: Codigo Twitter: Monitoração
codi monitoração do twitter, pesquisa post na regiao de sorocaba
codi rodant na maquina virtual da AWS EC2
n
des de twitter import * import config import paho.mqtt.publish com publica
a partir del temps importació de son
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
latitud = -23,546211 longitud = -46,637840 alcance = 50 resultats = 1
publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Cap indicador = 0
per a l’interval (60): # ----------------------------------------- ------------------------------ # realitzeu una cerca basada en latitud i longitud # documents de l'API de twitter: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- try: query = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (latitud, longitud, alcance), max_id = last_id) print ("leu")
excepte: imprimir ("erro acesso twitter") pausa
per obtenir resultats en la consulta ["estats"]:
# ------------------------------------------------- ---------------------- # només processa un resultat si té una geolocalització # ----------------- -------------------------------------------------- ---- 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") publish.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break
Pas 7: Estrutura AWS
Utilitzem una maquina virtual rodant ubuntu na estrutura AWS EC2
Utilitzeu un AWS IOT CORE per al servei de MQTT on configurem com a segons conforme o tipus de missatge
Utilitzem temes de AWS SNS que porten pèls acionats AWS IOT CORE
Recomanat:
Comando Por Voz - DragonBoard410c: 5 passos
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar a instalar e configurar el programa Julius junto com a Coruja, que s ã o respectivamente um programa de reconhecimiento de voz e o modelo ac ú stico em Portugu ê s.A vantagem da use ç ã o do Ju
Esterilitzador UVC per a emergències COVID-19: 3 passos
Esterilitzador UVC per a emergències COVID-19: Com fer una caixa d’esterilització UVC. El primer és el primer. L’electricitat és perillosa! Si no esteu segur i competent, no intenteu res que s'esmenta a continuació. La llum UVC (253,7 nm) és potent, pot cegar-vos i possiblement causar càncer de pell i
E.S.D.U (Unitat de droides del servei d’emergències): 7 passos
E.S.D.U (Unitat de droides del servei d’emergències): Avui construirem una E.S.D.U (Unitat de droides del servei d’emergències). La E.S.D.U es divideix en 3 classes: Policia, Bombers i Medic. Tot això encara no està completament desenvolupat, però espero que puguem actualitzar-los i desenvolupar-los junts com a com
Banc d'alimentació d'emergència: DIY Toolbox Solar: ràdio + carregador + llum per a emergències: 4 passos
Emergency Power Bank - DIY Toolbox Solar: Radio + Charger + Light for Emergency !: Afegiu el 28 de març de 2015: Vaig fer la meva caixa d’eines per a emergències i l’utilitzo ara que la meva ciutat estava enterrada al fang. Com a experiència, puc dir que vaig servir per carregar telèfons i escoltar ràdio. Una antiga caixa d’eines? un altaveu de PC antic? una bateria de 12 volts no utilitzada? Podeu fer
Centro De Cómputo Para Niños Con Raspberry Pi: 7 Steps
Centro De Cómputo Para Niños Con Raspberry Pi: Estos ser à ns els primers passos de la Raspberry Pi i per ello necessari: Raspberry Pi 2 Adaptador de red a micro USB Tarjeta micro SD (de 8 gb) Cable HDMI Cargador Rat ó n Teclado para computadoraEn cas de contar amb un Kit d'inici