Sadržaj:
- Korak 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- 2. korak: Sensores Digitais - Publicação
- Korak 3: Codigo Para Acionamento Sirene
- Korak 4: Codigo Twitter - objavite
- Korak 5: Centro De Comando
- Korak 6: Codigo Twitter - Monitoração
- Korak 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
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 alertta.
Diante a possiblebilidade de diversos meios de entrada na solução, caberá um centro de de operações avaliar se a informação esta correta evitando assim falsos-positivos dos dispositivos automatizado e e avaliar a possiblebi de fakenews. Tal tomada de Decisionão é ključni diante ao pânico que um alarme falso pode gerar.
Como solução de alertta de mensagem estamos Regardrando o uso do envio de SMS, alertta através de cliente mqtt, email, sirene e twitter.
O projektu contou com uso de recursos da AWS uključuje IOT CORE, EC2 i SNS
Senzori da DragonBord 410c
klijenti android mqtt
Sendo todo desenvolvido em python
Autores:
Diego Fernandes dos Santos - [email protected]
Gabriel Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz - [email protected]
Paulo Henrique Almeida Santos - [email protected]
Korak 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.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev iz libsoc import gpio iz time import sleep sleep
# Importa lib para comunicacao com MASQUITTO uvoz paho.mqtt.client kao 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, zastave, 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 poruke:" + 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 (brokerska_adresa)
if _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
s gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 dok contador <50: gpio_cs.set_high () spavanje (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 ispis ("Temperatura: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # test para acionar contador do alarmme, teste ultima leitura + 5%
ako je adc_value_old == 0: adc_value_old = adc_value ako je 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))
# test para acionar contador do alarmme, teste ultima leitura + 50%
ako je adc_value2_old == 0: adc_value2_old = adc_value2 ako je adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_va2
2. korak: 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
from libsoc_zero. GPIO import Buttonfrom libsoc_zero. GPIO import Tilt from time import sleep sleep import paho.mqtt.client kao mqtt import sys
def on_connect (mqttc, obj, zastave, 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 ("ID poruke:" + str (mid) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) osim: 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, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
nagib = nagib ('GPIO-A')
btn = Gumb ('GPIO-C')
dok je 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 ")
Korak 3: Codigo Para Acionamento Sirene
Codigo para subscrição para acionamento da SIRENE, program rodando dentro da dragon board 410c
# Importa lib para comunicacao com MASQUITTOimport paho.mqtt.client kao mqtt
from libsoc_zero. GPIO LED za uvoz iz vremena import sleep sleep led = LED ('GPIO-E') #led.off ()
# Definirajte o que fazer ao conectar def on_connect (klijent, obj, zastave, rc): print ("ConexÃÆ' £ o estabelecida com broker")
# Definirajte o que fazer ao receber uma mensagem def on_message (client, obj, message): print ("LED" + str (message.payload.decode ("utf-8")))) ako 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 (brokerska_adresa)
sub.on_message = na_poruci sub.on_connect = on_connect
# Increve nema topico sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Korak 4: Codigo Twitter - objavite
Código para publicação do twitter assim que acionado o alarme.
código rodando na maquina virtualni da AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-objavljuje poruku statusa na vašoj vremenskoj traci # --- -------------------------------------------------- ------------------ import paho.mqtt.subscribe as subscribe
vrijeme uvoza
s uvoza na twitteru *
#------------------------------------------------- ---------------------- # koji bi trebao biti naš novi status? #------------------------------------------------- ---------------------- new_status = "#Terremoto Nabavite uma zona segura-teste"
#------------------------------------------------- ---------------------- # učitajte naše vjerodajnice za API # ---------------------- ------------------------------------------------- uvoz sys sys.path.append (".") import config
#------------------------------------------------- ---------------------- # izradi twitter API objekt # ---------------------- ------------------------------------------------- twitter = Twitter (auth = OAuth ('senha removida))
#------------------------------------------------- ---------------------- # objavite novi status # twitter API dokumenti: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
dok 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", zadržano = False) ako je m.topic == "twitteralarme" i str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("ažurirano stanje: % s" % new_status)
Korak 5: Centro De Comando
semper que acionado um dispositivo manual ou detectado um alertta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode Cancelar o envio ou acionar o envio imediato do alertta.
Za korištenje dasboard -a u android -u na telefonu za kompor a mesa de operação do centro de comando.
código rodando na maquina virtualni da AWS EC2
uvoz paho.mqtt.client kao pahoimport paho.mqtt.subscribe as subscribe uvoz paho.mqtt.publish kao objava import json vrijeme uvoza uvoz šest uvoz ssl iz vremena uvoz mirovanja
teme = ['#']
gatilho = 0 hora_disparo = 0 published.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") published.single ("sensor1", "OFF", qos = 1, hostname = "172.31.83.191 ") published.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")
connflag = Netočno
def on_connect (client, userdata, flags, rc): global connflag connflag = True print (connflag) print ("Veza je vratila rezultat:" + 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 ()
dok je 1: hora = time.time () sleep (.1) published.single ("LEDTERREMOTO", "uključeno", 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 (okruglo (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") published.single ("LEDTERREMOTO", "uključeno", qos = 1, ime hosta = "172.31.83.191") else: objavi.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 ("poruka", json.dumps ({'poruka': "TERREMOTO"}), qos = 1) # mqttc.publish ("poruka", "TERREMOTO ", qos = 1) mqttc.publish (" poruka ", json.dumps (" TERREMOTO - NABAVA UMA ZONA SEGURA "), qos = 1)
# print ("teste SNS") # published.single ("LED", "uključeno", ime hosta = "172.31.83.191") published.single ("SIRENE", "uključeno", qos = 1, ime hosta = "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 (themes, hostname =" 172.31.83.191 ", retained = False) ako je m.topic ==" ACIONADO "i str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancellado ") ako je m.topic ==" medico "i str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "i str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "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": published.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5 ako je str (m.payload.decode ("utf-8")) == "ON": ako je 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
Korak 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtualni da AWS EC2
n
from twitter import *import config import paho.mqtt.publish as published
od vremena uvoz sna
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
zemljopisna širina = -23,546211 zemljopisna dužina = -46,637840 alkansa = 50 rezultata = 1
published.single ("twitter_alarme", "UKLJUČENO", hostname = "34.230.74.201")
result_count = 0 last_id = Nema zastavice = 0
za i u rasponu (60): #----------------------------------------- ------------------------------ # izvršite pretraživanje na temelju zemljopisne širine i dužine # twitter API dokumenti: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- pokušajte: query = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(zemljopisna širina, dužina, alkansa), max_id = last_id) ispis ("leu")
osim: print ("erro acesso twitter") break
za rezultat u upitu ["statusi"]:
#------------------------------------------------- ---------------------- # obrađuje rezultat samo ako ima geolokaciju # ----------------- -------------------------------------------------- ---- ako je rezultat ["geo"]: rezultat_broj += 1 zadnji_id = rezultat ["id"] spavanje (1) ako je rezultat_broj == rezultat: zastava += 1 objava.single ("twitter_alarme", "UKLJUČENO", hostname = "34.230.74.201") published.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break
Korak 7: Estrutura AWS
Upotrijebite uma maquina virtualni rodando ubuntu na strukturi AWS EC2
Koristite AWS IOT CORE za servise MQTT -a i konfigurirajte ih kao prilagođene za slanje poruka
Koristite topics za AWS SNS que eram acionados pelo AWS IOT CORE
Preporučeni:
Dizajn igre brzim pokretom u 5 koraka: 5 koraka
Dizajn igre u Flick -u u 5 koraka: Flick je zaista jednostavan način stvaranja igre, osobito nečega poput zagonetke, vizualnog romana ili avanturističke igre
Broj koraka: 17 koraka
الكشف عن عن أنواع المحاليل: محمدآل سعودالكشف عن المحاليل رابط الفديو
Prepoznavanje lica na Raspberry Pi 4B u 3 koraka: 3 koraka
Prepoznavanje lica na Raspberry Pi 4B u 3 koraka: U ovom Instructableu ćemo izvršiti detekciju lica na Raspberry Pi 4 sa Shunya O/S pomoću knjižnice Shunyaface. Shunyaface je biblioteka za prepoznavanje/otkrivanje lica. Cilj projekta je postići najbržu brzinu otkrivanja i prepoznavanja s
Comando Por Voz - DragonBoard410c: 5 koraka
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar a instalar e configurar o programu 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 ç ã o do
Centro De Cómputo Para Niños Con Raspberry Pi: 7 koraka
Centro De Cómputo Para Niños Con Raspberry Pi: Eto ser ser aacute; n los primeros pasos de la Raspberry Pi y para ello necesitaremos: Raspberry Pi 2 Adapter za crveni i mikro USB Tarjeta micro SD (de 8 gb) Kabel HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio