Inhaltsverzeichnis:
- Schritt 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Schritt 2: Sensoren Digitais - Veröffentlichung
- Schritt 3: Codigo Para Acionamento Sirene
- Schritt 4: Codigo Twitter - Posten
- Schritt 5: Centro De Comando
- Schritt 6: Codigo Twitter - Monitoração
- Schritt 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
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 de pânico bot. Ainda no cenário de colaboração prevemos integration com o Twitter und aplicativos com suporte mqtt para acionamento do alerta.
Diante eine Möglichkeit von Diversos, die den Zugang zur Lösung, Caberá um das Centro de Operações avaliar se a informação esta correta evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possibilidade de fakenews. Tal tomada decisão é entscheidende diante ao pânico que um alarme falso pode gerar.
Como-Solução de Alerta de mensagem estamos zu berücksichtigen oder uso envio de SMS, Alerta através de cliente mqtt, email, sirene und twitter.
Kontinuierliches Projekt mit AWS-Rekursionen, einschließlich IOT CORE, EC2 und SNS
Sensoren da DragonBord 410c
Kunden Android mqtt
Sendo todo desenvolvido em python
Autor:
Diego Fernandes dos Santos – [email protected]
Gabriel Piovani Moreira dos Santos – [email protected]
Gustavo Venancio Luz – [email protected]
Paulo Henrique Almeida Santos – [email protected]
Schritt 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo oder 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 através do protocolo mqtt um event sinalizand.
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, und todo novo alerta decresce decresce o contador em 20 seguntos.
programa rodando dentro da drachen borad 410c
#!/usr/bin/python3import spidev aus libsoc import gpio from time import sleep
# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client als 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("Nachrichten-ID: " + str(mid) + "\n") pass
# Criamos o client und 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. Makleradresse ="34.230.74.201"
pub.connect(broker_address)
if _name_=='_main_': gpio_cs = gpio. GPIO(18, gpio. DIRECTION_OUTPUT)
mit gpio.request_gpios([gpio_cs]): contador=0 adc_value_old=0 adc_value2_old=0 während contador < 50: gpio_cs.set_high() sleep(0.00001) gpio_cs.set_low() rx = spi.xfer(channel_select1) gpio_high() 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 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)
Schritt 2: Sensoren Digitais - Veröffentlichung
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 oder Botão de Pânico pressionado a contagem regressiva é iniciada.
programa rodando dentro da drachen borad 410c
from libsoc_zero. GPIO import Buttonfrom libsoc_zero. GPIO import Tilt from time import sleep import paho.mqtt.client als 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("Nachrichten-ID: " + str(mid) + "\n") pass
def detectaTilt(): count = 0 sleep_count = 0 while True: try: Tilt.wait_for_tilt(1) außer: 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 und setamos suas configuracoes mqttc = mqtt. Client()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
thema = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect("34.230.74.201", 1883)
Neigung = Neigung('GPIO-A')
btn = Schaltfläche('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")
Schritt 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 als mqtt
from 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 combroker")
# 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 Brokerbroker_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 sub.subscribe("SIRENE", qos=0)
# Schleife für escuta sub.loop_forever()
Schritt 4: Codigo Twitter - Posten
Código para publicação do twitter assim que acionado o alarme.
código rodando na maquina virtual von AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status # - postet eine Statusnachricht auf Ihrer Chronik #--- -------------------------------------------------- ------------------- importieren Sie paho.mqtt.subscribe als Abonnieren
Importzeit
aus Twitter-Import *
#------------------------------------------------- ---------------------- # Wie soll unser neuer Status sein? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
#------------------------------------------------- ---------------------- # Laden Sie unsere API-Anmeldeinformationen #---------------------- ------------------------------------------------- importieren sys sys.path.append(."") import config
#------------------------------------------------- ---------------------- # Twitter-API-Objekt erstellen #---------------------- ------------------------------------------------- Twitter = Twitter(auth = OAuth('senha removida))
#------------------------------------------------- ---------------------- # Posten Sie einen neuen Status # Twitter-API-Dokumente: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
while 1: m = Subscribe.simple("twitteralarme", hostname="172.31.83.191", reserved=False) if m.topic=="twitteralarme" and str(m.payload.decode("utf-8")) =="on": results = twitter.statuses.update(status = (new_status)+str(time.time())) # print("aktualisierter Status: %s" % new_status)
Schritt 5: Centro De Comando
semper que acionado um dispositivo manual oder 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.
Para uso do Dashboard utilizamos um android do telefone para compor a mesa de operação do centro de comando.
código rodando na maquina virtual von AWS EC2
import paho.mqtt.client als pahoimport paho.mqtt.subscribe als abonnieren import paho.mqtt.publish als veröffentlichen import json import time import six import ssl from time import sleep
Themen = ['#']
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 = Falsch
def on_connect(client, userdata, flags, rc): global connflag connflag = True print(connflag) print("Verbindung hat Ergebnis zurückgegeben: " + 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_Cone, mqawt(, keepalive=60) mqttc.loop_start()
während 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) und (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("Nachricht", 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(topics, hostname="172.31.83.191", reserved=False) if m.topic=="ACIONADO" and str(m.payload.decode(" utf-8"))=="OFF": gatilho=0 print("cancelado") if m.topic=="medico" und str(m.payload.decode("utf-8"))=="on ": if connflag == True: mqttc.publish("medico", json.dumps("MEDICOS - EMERGENCIA TERREMOTO"), qos=1) if m.topic=="bombeiro" und str(m.payload.decode("utf-8"))=="on": if connflag == True: mqttc.publish("bombeiro", json.dumps("BOMBEIRO - EMERGENCIA TERREMOTO"), qos=1) if m.topic==" Ambulancia" und 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" und 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 sonst: print("Acionado") publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=time.time()+60
Schritt 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtual von AWS EC2
n
von twitter import *import config import paho.mqtt.publish als publish
ab zeit importieren schlaf
twitter = Twitter(auth = OAuth(config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
Breite = -23.546211 Längengrad = -46.637840 Höhe = 50 Ergebnisse = 1
publish.single("twitter_alarme", "ON", hostname="34.230.74.201")
result_count = 0 last_id = Keine Flag = 0
für i im Bereich (60): #----------------------------------------- ------------------------------ # eine Suche basierend auf Breiten- und Längengraden durchführen # Twitter-API-Dokumente: https://dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- versuchen: query = twitter.search.tweets(q = "#Terremoto", geocode = "%f, %f, %dkm" % (Breitengrad, Längengrad, alcance), max_id = last_id) print("leu")
außer: print("erro acesso twitter") break
for result in query["statuses"]:
#------------------------------------------------- ---------------------- # ein Ergebnis nur verarbeiten, wenn es eine Geolokalisierung hat #----------------- -------------------------------------------------- ---- 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
Schritt 7: Estrutura AWS
Utilizamos uma maquina virtual rodando ubuntu na estrutura AWS EC2
Verwendung eines AWS IOT CORE für MQTT-Dienste und Konfigurationen als konforme oder tipps für die Mensagem
Verwenden von Themen für AWS SNS que eram acionados pelo AWS IOT CORE