جدول المحتويات:
- الخطوة 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- الخطوة 2: Sensores Digitais - Publicação
- الخطوة 3: Codigo Para Acionamento Sirene
- الخطوة 4: Codigo Twitter - Post
- الخطوة 5: Centro De Comando
- الخطوة 6: Codigo Twitter - Monitoração
- الخطوة 7: Estrutura AWS
فيديو: Centro De Comando Emergencias - بوابة Erupção De Vulcão E: 7 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
Projeto acadêmico para atender cenário de colaboração através da internet para divulgação de desastres naturais، onde será posível a detecção dos acontecimentos através de sensores IOT de temperature، luminosidade، ãoscilação (tilto de e botico. Ainda no cenário de colaboração prevemos Integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.
Diante a luxibilidade deiversos de entrada na solução، caberá um centro de de operações avaliar se a informação esta correta evitando assim falsos-positivos dosivos automatizado e avaliar a possible de fakenews. Tal tomada de decisão é Critical diante ao pânico que um alarme falso pode gerar.
Como solução de alerta de mensagem estamos مراعاة 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 e SNS
سينسورس دا دراغون بورد 410 ج
عملاء android mqtt
Sendo todo desenvolvido em python
أوتورز:
دييجو فرنانديز دوس سانتوس - [email protected]
غابرييل بيوفاني موريرا دوس سانتوس - [email protected]
غوستافو فينانسيو لوز - [email protected]
باولو هنريك ألميدا سانتوس - [email protected]
الخطوة 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo o codigo de publicação dos sensors analógicos، os sensores de temperatura e luminosidade estão configurados para que assim que detão variação fora do padrão pré estabelecido enviarem um alerta através do Protocolo mqtt sinalizando um event.
Este alerta começa a contagem regressiva que pode ser suspensa ou acelerada pelo operador.
يجب أن يكون الأمر معديًا للعدوى بعد 60 سيغونتوس ، يجب عليك أن تفعل ذلك من جديد في حالة تأهب.
programa rodando dentro da dragon borad 410c
#! / usr / bin / python3import spidev من libsoc استيراد gpio من وقت استيراد النوم
# 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 استخدم 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): طباعة (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)
إذا _name _ == '_ main_': gpio_cs = gpio. GPIO (18، gpio. DIRECTION_OUTPUT)
مع gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 بينما contador <50: gpio_cs.set_high () سكون (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_high_elect1)) 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 ("tematura"، 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 temperature") 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 = | (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 = sleep (3)
الخطوة 2: Sensores Digitais - Publicação
código para publicação dos sensores digitais
حساسات نظام التشغيل الرقمية التي تم إنشاؤها من أجل الكشف عن حالة الارتعاش أو الوصول إلى حالة مماثلة باستخدام طريقة بسيطة في البانيكو.
quando Discoverado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
programa rodando dentro da dragon borad 410c
من libsoc_zero. GPIO استيراد زر من libsoc_zero. GPIO استيراد الإمالة من وقت استيراد السكون استيراد paho.mqtt.client مثل mqtt import sys
def on_connect (mqttc، obj، flags، rc): print ("Conectado" + str (rc))
def on_message (mqttc، obj، msg): طباعة (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc، obj، mid): # print ("معرف الرسالة:" + str (mid) + "\ n") pass
def DiscoveraTilt (): count = 0 sleep_count = 0 بينما True: جرب: tilt.wait_for_tilt (1) باستثناء: 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
الموضوع = "grupo3"
# Conexao com localhost، uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201" ، 1883)
الإمالة = الإمالة ("GPIO-A")
btn = زر ("GPIO-C")
while True: sleep (0.25) detaTilt () 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 ")
الخطوة 3: Codigo Para Acionamento Sirene
Codigo para Subscrição الفقرة acionamento da SIRENE ، programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
من libsoc_zero. GPIO استيراد مؤشر LED من وقت استيراد السكون led = LED ('GPIO-E') # led.off ()
# تحديد o que fazer ao conectar def on_connect (client، obj، flags، rc): print ("Conex࣠o estabelecida com broker")
# تحديد o que fazer ao receiver uma mensagem def on_message (client، obj، message): print ("LED" + str (message.payload.decode ("utf-8"))) إذا كانت str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()
# IP do 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 sub.subscribe ("SIRENE"، qos = 0)
# Loop para escuta sub.loop_forever ()
الخطوة 4: Codigo Twitter - Post
Código para publicação do twitter assim que acionado o alarme.
código rodando na maquina الظاهري من AWS EC2
#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - ينشر رسالة حالة على جدولك الزمني # --- -------------------------------------------------- ------------------ استيراد paho.mqtt.subscribe كاشتراك
وقت الاستيراد
من تويتر استيراد *
# ------------------------------------------------- ---------------------- # ماذا يجب أن تكون حالتنا الجديدة؟ # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
# ------------------------------------------------- ---------------------- # تحميل بيانات اعتماد API الخاصة بنا # ---------------------- ------------------------------------------------- يستورد sys sys.path.append (".") استيراد التكوين
# ------------------------------------------------- ---------------------- # إنشاء كائن واجهة برمجة تطبيقات twitter # ---------------------- ------------------------------------------------- تويتر = Twitter (auth = OAuth ('senha removida))
# ------------------------------------------------- ---------------------- # انشر حالة جديدة # مستندات واجهة برمجة تطبيقات twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------
while 1: m = subscribe.simple ("twitteralarme"، hostname = "172.31.83.191"، retained = False) if m.topic == "twitteralarme" و str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("حالة محدثة:٪ s"٪ new_status)
الخطوة 5: Centro De Comando
دليل الاستخدام أو التنبيه أو الكشف عن دليل الاستخدام أو الاستخدام المعدي للتراجع عن البيئة. O operador pode cancellar o envio ou acionar o envio imediato do alerta.
تستخدم لوحة التحكم باستخدام نظام android do telefone para compor a mesa de operação do centro de comando.
código rodando na maquina الظاهري من AWS EC2
import paho.mqtt.client as pahoimport paho.mqtt.subscribe as Subscribe import paho.mqtt.publish as publish import json import time import six import ssl from time import sleep
المواضيع = ['#']
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، اسم المضيف =" 172.31.83.191 ")
connflag = خطأ
def on_connect (client، userdata، flags، rc): global connflag connflag = طباعة True print (connflag) ("نتيجة الاتصال المرتجعة:" + str (rc))
def on_message (client، userdata، msg): # print ("teste") طباعة (msg.topic + "" + str (msg.payload))
def on_log (client، userdata، level، buf): طباعة (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، mqshost. ، keepalive = 60) mqttc.loop_start ()
while 1: hora = time.time () sleep (.1) publish.single ("LEDTERREMOTO" ، "on" ، qos = 1 ، اسم المضيف = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message"، json.dumps ({'message': "TERREMOTO"}) ، qos = 1) إذا 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") وإلا: انشر.single ("TEMPO"، "99"، qos = 1، اسم المضيف = "172.31.83.191") # print ("") if (hora> hora_disparo) و (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 ، اسم المضيف = "172.31.83.191 ") gatilho = 0 سكون (5) m = subscribe.simple (مواضيع ، اسم المضيف =" 172.31.83.191 "، محتفظ به = خطأ) إذا كان m.topic ==" ACIONADO "و str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancellado ") إذا كانت m.topic ==" medico "و str (m.payload.decode (" utf-8 ")) ==" تشغيل ": if connflag == True: mqttc.publish (" medico "، json.dumps (" MEDICOS - EMERGENCIA TERREMOTO ") ، qos = 1) إذا كانت m.topic ==" bombeiro "و str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro"، json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO") ، qos = 1) إذا كان m.topic == " ambulancia "وشارع (m.payloa d.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("ambulancia"، json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO") ، qos = 1) إذا م. topic == "Urgente" and 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 آخر: print ("Acionado") publish.single ("ACIONADO"، 1، qos = 1، hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60
الخطوة 6: Codigo Twitter - Monitoração
código monitoração do twitter، pesquisa post na regiao de sorocaba
código rodando na maquina الظاهري من AWS EC2
ن
من تويتر استيراد * استيراد التكوين استيراد paho.mqtt.publish كنشر
من وقت استيراد النوم
twitter = Twitter (auth = OAuth (config.access_key ، config.access_secret ، config.consumer_key ، config.consumer_secret))
خط العرض = -23.546211 خط الطول = -46.637840 الكانس = 50 نتيجة = 1
publish.single ("twitter_alarme"، "ON"، اسم المضيف = "34.230.74.201")
result_count = 0 last_id = بلا علم = 0
بالنسبة إلى i في النطاق (60): # ----------------------------------------- ------------------------------ # قم بإجراء بحث بناءً على خطوط الطول والعرض # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- جرّب: الاستعلام = twitter.search.tweets (q = "#Terremoto" ، الكود الجغرافي = "٪ f،٪ f،٪ dkm"٪ (خطوط الطول، خط الطول، alcance)، max_id = last_id) طباعة ("leu")
باستثناء: كسر طباعة ("erro acesso twitter")
للنتيجة في الاستعلام ["الحالات"]:
# ------------------------------------------------- ---------------------- # معالجة النتيجة فقط إذا كان لها موقع جغرافي # ----------------- -------------------------------------------------- ---- إذا كانت النتيجة ["geo"]: result_count + = 1 last_id = النتيجة ["id"] سكون (1) if result_count == resultados: flag + = 1 publish.single ("twitter_alarme" ، "ON" ، اسم المضيف = "34.230.74.201") publish.single ("twitter" ، "TERREMOTO - DETECTADO" ، اسم المضيف = "34.230.74.201") فاصل
الخطوة 7: Estrutura AWS
Utilizamos uma maquina Virtual rodando ubuntu na estrutura AWS EC2
استخدم AWS IOT CORE para o serviço de MQTT onde configuramos باعتباره متوافقًا مع إرشادات mensagem
موضوعات استخدام AWS SNS que eram acionados pelo AWS IOT CORE
موصى به:
تصميم اللعبة في فليك في 5 خطوات: 5 خطوات
تصميم اللعبة في Flick in 5 Steps: Flick هي طريقة بسيطة حقًا لصنع لعبة ، لا سيما شيء مثل الألغاز أو الرواية المرئية أو لعبة المغامرة
نظام اردوينو لتنبيه وقوف السيارة عند الرجوع للخلف - خطوات خطوة: 4 خطوات
نظام اردوينو لتنبيه وقوف السيارة عند الرجوع للخلف | خطوات بخطوة: في هذا المشروع ، سأصمم دائرة مستشعر لعكس مواقف السيارات من Arduino باستخدام مستشعر الموجات فوق الصوتية Arduino UNO و HC-SR04. يمكن استخدام نظام التنبيه العكسي للسيارة المستند إلى Arduino للتنقل الذاتي ومجموعة الروبوتات وغيرها من النطاقات
اكتشاف الوجه على Raspberry Pi 4B في 3 خطوات: 3 خطوات
اكتشاف الوجه على Raspberry Pi 4B في 3 خطوات: في هذا Instructable سنقوم باكتشاف الوجه على Raspberry Pi 4 باستخدام Shunya O / S باستخدام مكتبة Shunyaface. Shunyaface هي مكتبة للتعرف على الوجوه / الكشف عنها. يهدف المشروع إلى تحقيق أسرع سرعة في الكشف والتعرف مع
Comando Por Voz - DragonBoard410c: 5 خطوات
Comando Por Voz - DragonBoard410c: Este guia ir & aacute؛ مجموعة برامج Julius junto com o Coruja، que s & atilde؛ o respectivamente um programa de Rechecimento de voz e o modelo ac & uacute؛ stico em Portugu & ecirc؛ s.A vantagem da utiliza & ccedil؛ & atilde؛ o do Ju
Centro De Cómputo Para Niños Con Raspberry Pi: 7 خطوات
Centro De Cómputo Para Niños Con Raspberry Pi: Estos ser & aacute؛ 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 gb) Cable HDMI Cargador Rat & oacute؛ n Teclado para الكمبيوتر مع التحكم في مجموعة أدوات المعلومات