Sisällysluettelo:
- Vaihe 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Vaihe 2: Sensores Digitais - Publicação
- Vaihe 3: Codigo Para Acionamento Sirene
- Vaihe 4: Codigo Twitter - viesti
- Vaihe 5: Centro De Comando
- Vaihe 6: Codigo Twitter - Monitoração
- Vaihe 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Projeto acadêmico para atender cenário de colaboração através da internet para divulgação de desastres naturais, onde será possível and detecção dos acontecimentos através de sensores IOT de temperatura, luminosidade, oscilação (tilte) e botão de pânico. Ainda no cenário de colaboração prevemos integração com tai Twitter ja aplicativos com support mqtt para acionamento do alerta.
Diante a vaihtoehtona erilaisiin ratkaisuihin, joka on saatavana solução, Caberá um centro de de operações julkisesti se informaatio esta korjaus evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possibleilidade de factenews. Tal tomada de decisão ja olennainen diante ao pânico que um alarmme falso pode gerar.
Como solução de alerta de mensagem estamos apsioitu tai uso do envio de SMS, alerta através de cliente mqtt, email, sirene e twitter.
AWS -ohjelmointi, mukaan lukien IOT CORE, EC2 ja SNS
Sensores da DragonBord 410c
clientes android mqtt
Lähetä se pythonin kehittämiseen
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]
Vaihe 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo tai 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é 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 contactgem regressiva em 60 seguntos, and todo novo alerta detectado decresce o contador em 20 segundos.
ohjelma rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev from libsoc Import gpio from Time Import Sleep
# Importa lib para comunicacao com MOSQUITTO tuoda paho.mqtt.client nimellä 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 käytä porta ADC2 -käyttöä tai sekoita vetor de configuraÃÆ'⧧ÃÆ'à £ o channel_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, liput, 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 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)
jos _nimi _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 kun contador <50: gpio_cs.set_high () uni (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 ("Lämpötila: % f / n" % adc_value) pub.publish ("lämpötila", str (adc_value)) # teste para acionar contador do alarmme, 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 ("Alarmadon lämpötila") adc_value_old = adc_value sleep (1)
gpio_cs.set_high () uni (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 (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 alarmme, 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
Vaihe 2: Sensores Digitais - Publicação
código para publicação dos sensores digitalis
Os sensores digitalis 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 detado uma anomalia tai botão de pânico pressionado a contagem regressiva é initiada.
ohjelma rodando dentro da dragon borad 410c
alkaen libsoc_zero. GPIO -tuontipainike
def on_connect (mqttc, obj, liput, 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 kun True: try: tilt.wait_for_tilt (1) paitsi: sleep_count += 1 else: count += 1 sleep_count += 1 if sleep_count> 999: break
print ("count:", count) jos määrä> 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)
kallistus = kallistus ('GPIO-A')
btn = Painike ('GPIO-C')
kun taas True: uni (0,25) havaitseeTilt () jos btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") tulosta ("Botao ON") uni (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")
Vaihe 3: Codigo Para Acionamento Sirene
Codigo para subscrição para acionamento da SIRENE, ohjelma rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
from libsoc_zero. GPIO tuonti LED ajan tuonnin lepotilasta = LED ('GPIO-E') #led.off ()
# Define o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("ConexÃÆ'à £ £ estabelecida com broker")
# Määritä fazer ao -vastaanotin uma mensagem def on_message (asiakas, obj, viesti): 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 -välittäjä broker_address = "34.230.74.201"
# Cria o cliente sub = mqtt. Client ("grupo3")
sub.connect (välittäjän_osoite)
sub.on_message = on_message sub.on_connect = on_connect
# Lisää aihetta sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Vaihe 4: Codigo Twitter - viesti
Código para publicação do twitter assim que acionado or alarmme.
codigo rodando ja maquina virtuaalinen AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-lähettää tilaviestin aikajanallesi # --- -------------------------------------------------- ------------------ tuoda paho.mqtt.subscribe as subscribe
tuonnin aika
Twitter -tuonnista *
#------------------------------------------------- ---------------------- # mikä meidän uuden asemamme pitäisi olla? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------- ---------------------- # lataa API-tunnuksemme # ---------------------- ------------------------------------------------- tuonti sys sys.path.append (".") tuonti kokoonpano
#------------------------------------------------- ---------------------- # luo twitter-sovellusliittymäobjekti # ---------------------- ------------------------------------------------- viserrys = Twitter (auth = OAuth ('senha removeida))
#------------------------------------------------- ---------------------- # julkaise uusi tila # twitter-sovellusliittymäasiakirjat: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
kun taas 1: m = tilaa.simple ("twitteralarme", isäntänimi = "172.31.83.191", säilytetty = epätosi), jos m.topic == "twitteralarme" ja str (m.payload.decode ("utf-8")) == "päällä": tulokset = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("päivitetty tila: % s" % new_status)
Vaihe 5: Centro De Comando
semper que acionado um dispositivo manual oru detectado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operaattorikoodin perustaja o envio ou acionar o envio imediato do alerta.
Voit käyttää dasboard -käyttöjärjestelmää Android -puhelimella, joka on tarkoitettu operaation keskustaan.
codigo rodando ja maquina virtuaalinen AWS EC2
tuoda paho.mqtt.client nimellä pahoimport paho.mqtt. tilata tilaamaan tuonti paho.mqtt.publish as julkaisu tuonti json tuonti aika tuonti kuusi tuonti ssl aikatuonnin lepotilasta
topic = ['#']
gatilho = 0 hora_disparo = 0 publis.single ("ACIONADO", "OFF", qos = 1, isäntänimi = "172.31.83.191") publis.single ("sensor1", "OFF", qos = 1, hostname = "172.31".83.191 ") publis.single (" anturi2 "," POIS ", qos = 1, isäntänimi =" 172.31.83.191 ")
connflag = Väärä
def on_connect (asiakas, käyttäjätiedot, liput, rc): global connflag connflag = True print (connflag) print ("Yhteys palautti tuloksen:" + str (rc))
def on_message (asiakas, käyttäjätiedot, viesti): # print ("teste") print (msg.topic+""+str (msg.payload))
def on_log (asiakas, käyttäjätiedot, taso, buf): print (msg.topic+""+str (msg.payload))
mqttc = paho. Client ("Välittäjä_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, salakirjoitukset, ei-salaukset), keepalive = 60) mqttc.loop_start ()
kun taas 1: hora = aika.aika () uni (.1) publis.single ("LEDTERREMOTO", "päällä", qos = 1, isäntänimi = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publis.single ("TEMPO", str. (pyöreä (hora_disparo-hora, 0)), qos = 1, isäntänimi = "172.31.83.191") publis.single ("LEDTERREMOTO", "päällä", qos = 1, isäntänimi = "172.31.83.191") muu: julkaise.single ("TEMPO", "99", qos = 1, isäntänimi = "172.31.83.191") # print ("") if (hora> hora_disparo) ja (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 (" viesti ", json.dumps (" TERREMOTO - PROCURE UMA ZONA SEGURA "), qos = 1)
# print ("teste SNS") # publis.single ("LED", "päällä", isäntänimi = "172.31.83.191") publis.single ("SIRENE", "päällä", qos = 1, isäntänimi = "172.31. 83.191 ") publis.single (" TEMPO "," TERREMOTO ", qos = 1, isäntänimi =" 172.31.83.191 ") publis.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") publis.single ("twitteralarme", "päällä", qos = 1, isäntänimi = "172.31.83.191") publis.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 unia (5) m = tilaa.simple (aiheet, isäntänimi =" 172.31.83.191 ", säilytetty = epätosi), jos m.topic ==" ACIONADO "ja str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" peruutus "), jos m.topic ==" medico "ja str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) jos m.topic ==" bombeiro "ja str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) jos m.topic == " ambulancia "ja str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) jos m. topic == "urgente" ja str (m.payload.decode ("utf-8")) == "on": publis.single ("ACIONADO", 1, qos = 1, isäntänimi = "172.31.83.191") gatilho = 1 hora_disparo = aika.aika ()+5 jos str (m.payload.decode ("utf-8")) == "ON": jos gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 muuta: print ("Acionado") publis.single ("ACIONADO", 1, qos = 1, isäntänimi = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
Vaihe 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
codigo rodando ja maquina virtuaalinen AWS EC2
n
twitteristä tuonti *tuonti konfiguraation tuonti paho.mqtt.julkaisu julkaistavaksi
tuontihetkestä
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
leveysaste = -23.546211 pituusaste = -46.637840 alcance = 50 resultados = 1
publis.single ("twitter_alarme", "ON", isäntänimi = "34.230.74.201")
result_count = 0 last_id = Ei lippua = 0
i alueella (60): #----------------------------------------- ------------------------------ # suorita haku leveys- ja pituusasteiden perusteella # twitter API -asiakirjat: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- kokeile: query = twitter.search.tweets (q = "#Terremoto", geokoodi = " %f, %f, %dkm" %(leveysaste, pituusaste, alcance), max_id = last_id) print ("leu")
paitsi: tulosta ("erro acesso twitter") tauko
haun ["statuses"] tulokselle:
#------------------------------------------------- ---------------------- # käsittele tulosta vain, jos sillä on maantieteellinen sijainti # ----------------- -------------------------------------------------- ---- jos tulos ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 publis.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publis.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") tauko
Vaihe 7: Estrutura AWS
Käytä apuohjelmia, kuten maquina virtuaalista rodandoa, ubuntu ja estrutura AWS EC2
Käytä AWS IOT CORE -palvelua MQTT: n palvelimille ja konfiguraatioille, kuten konfiguraatio tai tyyppinen mensagem
Hyödylliset aiheet AWS SNS -palvelussa AWS IOT CORE
Suositeltava:
Comando Por Voz - DragonBoard410c: 5 vaihetta
Comando Por Voz - DragonBoard410c: Este guia ir á asennus ja asennusohjelma Julius junto com o Coruja, que s ã o respectivamente um program de reconhecimento de voz e o modelo ac ú stico em Portugu ê s. Vantagem da utiliza ç ã o do Ju
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
Centro De Cómputo Para Niños Con Raspberry Pi: 7 vaihetta
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 Adapter de red a micro USB Tarjeta micro SD (de 8 gb) Kaapeli HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio