安全工作区旨在创建一个点对点网络,其中一堆AWS IoT EduKit将共享一个通用接口。该接口将由 BLE(Bluetooth LOW ENERGY) UART 协议创建。这些设备可以一次在它们之间共享一个消息。
当一个设备(Sender)想要发送消息时,它会与其他设备(Recipient)连接并收集它的GATT属性。这些属性是由接收设备提供的服务和特性。收集这些属性后,发送方设备可以在该接口上读取/写入数据,接收方设备将监听这些数据。
一个 android 应用程序将作为管理设备也与该界面相关联。如果任何设备想要向管理应用程序发送消息,它也是可能的。
近来,自然灾害的加剧已成为大多数国家的可怕局面。这些自然灾害包括地震、暴雨造成的山体滑坡、海啸对人口地区造成巨大损失,尤其是附近有工作场所的情况下。此外,我们不能否认与这些事件有关的死亡对社会造成沉重打击的事实。
有时办公室和工作场所不承认情况的严重性。即使是天气预报也无法预测影响的确切时间和情况的严重程度。以下是地震造成可怕情况的一些案例。6.4级地震使建筑物倒塌| 来源。以及因大地震而导致14人死亡的倒塌建筑| 来源。
在大多数情况下,被困在倒塌建筑物瓦砾下的人可以存活一段时间,但他们无法通知外面的人或他们的代表当局他们的存在。虽然救援队及时赶到并尽了最大努力,但问题是,他们不知道去哪里寻找还活着的人。结果,那些仅仅幸存下来的人无法从倒塌的建筑物中活着逃脱。
即使不仅是办公室或工作场所,在 Covid-19 期间,许多员工也不得不在家工作。但它也不安全,因为当任何自然灾害来袭时,住宅区或住宅区可能会受到影响。
此外,人为的有缺陷的建筑物和结构故障、建筑物着火而找不到逃生门的问题可能会导致与地震或任何自然灾害相同的麻烦。拉纳广场事件造成1134人死亡,数千人受伤| 来源。过去十年以来,采矿作业中发生的事故也夺走了很多人的生命| 来源。
这就是 Secure Workspace 发挥作用的地方。在物联网的现代时代,蓝牙/低功耗蓝牙 (BLE) 等高级连接选项使通信选项变得简单可靠。小型集成设备,例如:AWS IoT EduKit具有 IoT 云访问和 BLE UART 通信协议。因此,可以构建通信网络并将消息从一个设备传递或接收到另一个设备。
每当有人陷入不稳定的情况或遇到问题时,他/她可以通过向最近的与 BLE 连接的AWS IoT EduKit设备发送 SOS 消息来通知。此外,还将有一个管理员 android 应用程序,它可以搜索活动设备并与之连接并监听响应。
在我们继续之前,我们需要为AWS IoT EduKit设备设置环境。需要关注的一些关键点:
为了便于理解,我们可以将系统分为两部分。
要检查 DynamoDB 上是否存在用户数据,我们需要创建一个可以调用触发器的事件。作为回报,我们将获得来自 DynamoDB 的记录。对于我们需要执行的任务,没有可用的操作,例如:在“AWS IoT Core 规则”部分从 DynamoDB 获取数据。
为此,我们可以做的是创建一个AWS Lambda 函数。 Lambda 函数用作无服务器计算机,它可以在触发某种事件时执行任务。对于我们的案例,我们将使用格式化的 MQTT 消息来触发事件。在输出中,我们还将获得一个 MQTT 响应,但加载了我们想要从 DynamoDB 获得的记录的 JSON 数据。
让我们关注列出的 lambda 函数中的“SendMQTTtoCORE2AWS”函数。
# SendMQTTtoCORE2AWS Lambda Function
# Python 3.8
...
# TODO implement
client = boto3.resource("dynamodb")
table = client.Table("Save_User_Data")
data = table.scan()["Items"]
client = boto3.client('iot-data', region_name='us-west-2', endpoint_url='https://a25wmxf9jzsaoa-ats.iot.us-west-2.amazonaws.com')
# Change topic, qos and payload
response = client.publish(
topic='env/core',
qos=0,
payload=json.dumps(data[0]["User_Data"])
)
...
不仅是一个 lambda 函数,我们还需要一个IoT 规则,它可以作为触发器来调用该函数。这是我的 IoT 规则“Fetch_Data”来调用“ SendMQTTtoCORE2AWS” lambda 函数。
“Fetch_Data”规则是什么:
SELECT Tag FROM 'env/msg' WHERE Tag = "Fetch_Data"
AWS IoT EduKit发生了什么:
# UiFlow MicroPython 1.12 Firmware
# .. Dictionary["Tag"]="Fetch_Data" this is must otherwise, SQL query won't match
...
aws = AWS(things_name='AWS_CORE2', host='a25wmxf9jzsaoa-ats.iot.us-west-2.amazonaws.com', port=8883, keepalive=60, cert_file_path="/flash/res/certificate.pem.crt", private_key_path="/flash/res/private.pem.key")
aws.start()
aws.publish(str('env/msg'),str((json.dumps((Dictionary)))))
...
**请参阅此处了解如何设置 DynamoDB 表和存储设备数据
**请参阅此处了解如何使用 python 创建 Lambda 函数
这样,我们可以从 dynamoDB 获取数据并将其作为 MQTT 消息发送到AWS IoT EduKit。
搜索现有数据并在设备部分获取结果已完成。现在,我们可以进入下一部分,即将数据插入数据库,我们刚刚通过键盘提供。
在我们完成名称、消息和密码的输入后,将使用该名称、消息和密码创建一个字典[一个保存键和值对的 python 数据结构]。
# Uiflow MicroPython 1.12 Firmware
...
DictionaryOfSendingInfo={"Name_Data":listOfInputs[0],"Password":listOfInputs[1],"Message":listOfInputs[2],"Tag":"Send_Data"}
...
稍后,字典被发送到 AWS DynamoDB 并作为记录存储在表下Save_User_Data.
但是,要在 DynamoDB 上存储数据这样的操作,必须触发一些事件。因此,我们需要在AWS IoT Core 中为此制定规则。
这些是我的物联网规则。目前,我们只关注“Save_Data”规则。
什么是“Save_Data”规则:
SELECT Name_Data, Password, Message, Tag FROM 'env/msg' WHERE Tag = "Send_Data"
**请参阅此处了解如何设置 DynamoDB 表和存储设备数据
AWS IoT EduKit发生了什么:
# UiFlow MicroPython 1.12 Firmware
# .. Dictionary["Tag"]="Send_Data" this is must otherwise, SQL query won't match
...
aws = AWS(things_name='AWS_CORE2', host='a25wmxf9jzsaoa-ats.iot.us-west-2.amazonaws.com', port=8883, keepalive=60, cert_file_path="/flash/res/certificate.pem.crt", private_key_path="/flash/res/private.pem.key")
aws.start()
aws.publish(str('env/msg'),str((json.dumps((Dictionary)))))
...
这样,字典数据(名称、密码和消息)将作为 MQTT 消息(JSON 有效负载)传输并存储在 DynamoDB 上。如果没有找到现有数据,这就是用户注册部分的全部内容。
仪表板背后发生了什么
Profile view and edit button:
与之前一样,使用“SendMQTTtoCORE2AWS” Lambda 函数从 AWS DynamoDB 获取数据。如果按下配置文件视图按钮,则可以在“配置文件视图页面”上看到输出。如有必要,我们可以从这里编辑注册的数据。要编辑数据,我们需要另一个事件,这与我们之前在 DynamoDB 中所做的插入操作不同。现在,我们将不得不创建另一个规则,可以编辑之前保存的数据。
为了达到我们的目的,我们将使用这个 lambda 函数“EditFunctionDynamoDB”。
# EditFunctionDynamoDB Lambda Function
# Python 3.8
...
client = boto3.resource("dynamodb")
table = client.Table("Save_User_Data")
response = table.update_item(
Key={
'Record_Time': data[0]["Record_Time"],
},
UpdateExpression="set User_Data.Name_Data=:n, User_Data.Message=:m, User_Data.Password=:p, User_Data.Tag=:t",
ExpressionAttributeValues={
':n': event["Name_Data"]
':m': event["Message"],
':p': event["Password"],
':t': event["Tag"]
},
ReturnValues="UPDATED_NEW"
)
...
但要调用该函数,必须有一条关于“AWS IoT Core”的规则。在这里,我们将使用“Edit_Data”规则。
什么是“Edit_Data”规则:
SELECT Name_Data, Password, Message, Tag FROM 'env/msg' WHERE Tag = "Edit_Data"
有了这个,我们可以更新之前保存在 AWS DynamoDB 上的记录。现在,我们进入下一节。
SOS button:
在紧急情况下,我们可以使用此按钮将之前存储的 SOS 消息直接发送到附近的设备。将使用BLE UART 进行通信。
# UiFlow Micropython 1.12 Firmware
...
uart_ble = ble_uart.init(user_info["Name_Data"])
uart_ble.write(message)
...
我们已经到了可以向AWS IoT EduKit设备或管理应用程序发送 SOS 消息的地步。所以,我们分成两个部分。
虽然,在这两种情况下,通过 BLE UART 发送消息是相同的,但接收设备不同。这就是为什么区分它们,将使我们更好地理解。
来自发件人:
# Sample Code Snippet
# UiFlow Micropython 1.12 Firmware
# From Sender
from ble import ble_uart
...
uart_ble = ble_uart.init("Device 1")
uart_ble.write(message)
...
致收件人:
# Sample Code Snippet
# UiFlow Micropython 1.12 Firmware
# Receive data on recipient
from ble import ble_uart
label0 = M5Label('Received Data', x=133, y=99, color=0x000, font=FONT_MONT_14, parent=None)
...
def on_recv():
# global params
global label0
# Show the received text and make an alarm
speaker.playWAV("res/Alarm.wav")
label0.set_text(str(uart_ble.read()))
...
来自发件人:
# UiFlow Micropython 1.12 Firmware
# From Sender
from ble import ble_uart
...
uart_ble = ble_uart.init(user_info["Name_Data"])
uart_ble.write(message)
...
致收件人:
// Java 8 Android API - 23
// On recipient
...
if(Read.equals(characteristic.getUuid().toString()))
{
value = characteristic.getStringValue(0);
Log.w(TAG, "Value--> "+ value);
// receives data when GATT characteristics match with device service UUID
...
在这里,重要的讨论主题将是:
BLE,或者简单来说,低功耗蓝牙连接提供了两个设备之间的短距离通信协议。连接后,两个设备都可以共享数据。它们中的任何一个都可以充当发送者(服务器),而另一个可以充当接收者(客户端)。而且它不需要任何集中式服务器来相互连接。
直到两个设备都有足够的电池来打开它们的 BLE 模块,它们才能进行通信。当任何自然灾害发生时,首先断开的是互联网连接。出于这个原因,我们无法与他人交流并告知他们我们正在经历的绝境。但是有了BLE,就可以寻求帮助。
这就是为什么 BLE 是 Secure Workspace 的支柱。
目前,Secure Workspace已通过一对一设备(与另一台 AWS IoT EduKit设备或管理应用程序)进行测试和运行,以传输 SOS 消息。但是,网络范式中会有很多这样的AWS IoT EduKit设备。所以,应该有一些操作来知道哪一个要发送数据。
因此,构建轮询操作将是成功实施 Secure Workspace 的下一个任务。
对于建筑基础设施脆弱的第三世界国家来说,像安全工作空间这样的项目非常需要,以应对不断增加的自然灾害/灾难,因为它可以对寻找幸存者产生良好的影响,并且当这些灾难发生在工作场所或家。
试图使项目文档尽可能详细,并在每个部分之后附加有用的链接。希望能帮助到你 :)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !