[AWS IoT 实战3] 设备事件报警 上传图片到 DynamoDB 和 S3功能

亚马逊 AWS IoT物联网解决方案

AWS IoT 提供将您的物联网设备连接到其他设备和 AWS 云服务的云服务。 AWS IoT 提供设备软件,可帮助您将物联网设备集成到 AWS IoT基于解决方案的解决方案中。如果您的设备可以连接 AWS IoT,则 AWS IoT 可以将它们连接到 AWS 提供的云服务。

DynamoDB 是 连接 手机 app 和 通过服务(用户,设备绑定,事件报警)后台的中介,用于存储数据

S3 用于连接设备和 iot 服务器的中介,完成的功能包括 ota 升级包和事件报警推送的图片和视频数据


规则引擎是iot连接外部资源的工具,所以操作都需要基于规则引擎作为中枢进行。

iot 规则引擎连接

完成iot数据到DynamoDB 的规则引擎

SQL 语句

sql 复制代码
SELECT * FROM 'v1/devices/+/rpc/request/+'

DynamoDB 存储设置,注意 DynamoDB 的表选择

DynamoDB 表的查询

表数据详情


设备嵌入式段表数据的json数据'iot_demo_mqtt.c'

cpp 复制代码
        cJSON *reported1 = cJSON_CreateObject();
//        cJSON_AddStringToObject(reported1, "id", IOT_DEMO_IDENTIFIER);
        cJSON_AddStringToObject(reported1, "id",uuid_str);
        cJSON_AddStringToObject(reported1, "device_id", IOT_DEMO_IDENTIFIER);
        cJSON_AddStringToObject(reported1, "event_data", "https://www.lzyCamaerVideo/alarm/video1.mp4");
//        base64()
        // 将缓冲区内容添加到 JSON 对象中
//        cJSON_AddItemToObject(reported1, "event_snap_image", cJSON_CreateString(customString));
        cJSON_AddStringToObject(reported1, "event_snap_image", base64_encode(pPublishPayloadBuffer,publishPayloadBufferLen));
        cJSON_AddStringToObject(reported1, "type", "PIR");
        cJSON_AddStringToObject(reported1, "event_time", "2024-04-13T16:28:51.957226Z");
        cJSON_AddStringToObject(reported1, "createdAt", "2024-04-13T16:28:51.957226Z");
        cJSON_AddStringToObject(reported1, "updatedAt", "2024-04-13T16:28:51.957226Z");
        cJSON_AddNumberToObject(reported1, "_lastChangedAt", 1713025671967);
        cJSON_AddNumberToObject(reported1, "_version", 2);
        cJSON_AddStringToObject(reported1, "__typename", "Event");

app 开发

注意表字段的event_snap_image 使用的是 base64 ,因为是图片

app端获取DynamoDB的数据,通过amplify storage 插件功能,注意显示会通过解码成图片数据 ,然后通过 controlled 的方式获取 png 的 buffer

dart 复制代码
Future<void> downloadToMemory(String key) async {
    try {
      final result = await Amplify.Storage.downloadData(
        key: key,
        onProgress: (progress) {
          safePrint('Fraction completed: ${progress.fractionCompleted}');
        },
      ).result;

      safePrint('Downloaded data: ${result.bytes.toString()}');

      // List<int> bytes = base64.decode(result.bytes.toString());
      decodedString.value = base64.decode(utf8.decode(result.bytes));

      safePrint('decodedString: ${decodedString.value}');
      safePrint('Downloaded size: ${result.downloadedItem.key}');
      safePrint('metadata length: ${result.downloadedItem.metadata.length}');
    } on StorageException catch (e) {
      safePrint(e.message);
    }
  }

页面page调用Image 插件 ,数据是上面解码的 png decodedString1

dart 复制代码
   GFButton(
     text: "s3DownloadFile",
     onPressed: () {
       // var S3_file_path = 'event/model_Y_a63ca9be-c936-49f3-bc10-7757cb326e9
       var S3_file_path = '/Model/Model-Y/events/1713070662922.jpg';
       controller.downloadToMemory(S3_file_path);
       // controller.awsMqttServices.value.publishTopic('/yiwukong/device/ipcam
     },
   ),
   Image.memory(controller.decodedString.value,height: 100,width: 100,),

注意

S3 存储的优点是方便第三方存储,以及可以实现其他的增值服务费用

SQL语句

sql 复制代码
SELECT VALUE event_snap_image FROM 'v1/devices/+/rpc/request/+'

S3 bucket的路径设置,注意 amplify 的路径只能是 public 路径,否则 amplify 访问不到

shell 复制代码
public/event/${topic(3)}/${timestamp()}.jpg

S3 参数设置截图

相关推荐
G***技5 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
北京耐用通信7 小时前
破解AGV多协议互联难题:耐达讯自动化Profinet转Devicenet网关如何实现高效协同
人工智能·科技·物联网·网络协议·自动化·信息与通信
国产化创客8 小时前
ESP32平台web服务器开发框架选型与分析
物联网·智能家居·智能硬件
飞睿科技9 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
ESBK202510 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
fendouweiqian12 小时前
AWS WAF(配合 CloudFront)基础防护配置:免费能做什么、要不要开日志、如何限制危险方法
网络安全·aws·cloudfront
安科瑞刘鸿鹏1712 小时前
高速路灯故障难定位?用 ASL600 实现精确单灯监测与维护预警
运维·网络·物联网·安全
雪兽软件1 天前
物联网 (IoT) 将如何改变我们的工作方式
物联网
才盛智能科技1 天前
K链通×才盛云:自助KTV品牌从0到1孵化超简单
大数据·人工智能·物联网·自助ktv系统·才盛云
三佛科技-134163842121 天前
宠物洗澡打泡机方案,宠物泡泡机MCU方案开发设计分享
单片机·嵌入式硬件·物联网·智能家居·pcb工艺·宠物