当前位置: 首页 > news >正文

HaaS510开板式DTU真机连云:上报监测数据至阿里云物联网平台

背景

HaaS: Hardware as a Service。

HAAS510 是一种开板式 DTU ,旨在为用户已开发好的设备快速增加 4G 连云能力的 4G CAT1 数传模块。它通过将模组与用户设备集成到一个外壳内,既保持设备的一体性,又降低重新开发 PCB 的时间消耗和模组开发的难度。 HAAS510 产品采用了 JavaScript 脚本的方式,将模组的本地串口通信和通过 4G 连接云端平台的能力开放给用户。同时,它还为用户提供了编写本地业务逻辑的能力,使得用户可以根据不同的应用场景,在设备侧完成数据清洗甚至一些简单的控制功能,从而给用户带来更大的创新自由度。

依托阿里云物联网平台,结合 HAAS510 的连云能力、实际生产环境中的电气火灾监控系统以及4G物联网卡,实现对电气火灾的远程监测。

物料准备

  • 硬件设备

    • HaaS510
    • USB转双TTL串口
    • FPC天线
    • SIM卡
  • 软件环境

    • amp-win
    • SSCOM V5.13.1串口调试助手
    • VSCode
    • MQTTX

HAAS510 上有两个 UART ,并且为方便接线,对杜邦线做了分组: Main UART (用于烧录部署应用)和 Debug UART (用于调试与查看日志),由于我先接了 Debug UART ,所有 COM 口的情况如下:

  • Debug UART:COM3
  • Main UART:COM4

实际连云的接线图如下:

2023-09-02-1-Hardwear.jpg

搭建环境

硬件连接

根据 HAAS510 的文档,下载了 amp-win ,结合 SSCOM V5.13.1串口调试助手 进行了测试:按下复位键,apm shakehand begin。

2023-09-02-2-Reset.jpg

软件工具

VSCode 的插件市场搜索 haas-studio 安装,点击左下角的激活 Aos 插件。

2023-09-02-3-HaaSStudio.jpg

2023-09-02-4-Aos.jpg

VSCode 的已安装插件列表中修改了 haas-studio 的版本,从 v2.3.1 降到了 v2.2.0 ,支持创建 JavaScript 的项目。

2023-09-02-5-Project.jpg

HaaS510的HelloWorld

创建的 JavaScript 项目中自带了 HelloWorld 示例程序,点击部署运行,选择本地更新——>选择串口(我这里是COM4:Main UART)——>波特率:115200。

2023-09-02-6-HelloWorld1.jpg
或者使用以下命令进行烧录:

c:\Users\nxq01\.vscode\extensions\haas.haas-studio-2.2.0/amp/amp-win/dist/amp.exe serialput d:\JavaScript\Node.js\haas-test\test_demo\solutions\test_demo COM4 -b 115200

根据提示复位 DTU 板(板子上的reset按钮),可以通过串口工具在 Debug UART ,我这里是 COM3 ,查看调试输出。

2023-09-02-6-HelloWorld2.jpg

HaaS510真机连云上报数据

硬件连线

分别连接了 Main UART (用于烧录部署应用)和 Debug UART (用于调试与查看日志)。

注意:

  1. 如果烧录程序后,发现云平台的设备依然不在线,可能是没装SIM卡没安装天线或者SIM卡存在机卡分离等原因。
  2. 用的是实际生产环境下的物联网SIM卡,因此要到物联网卡管理平台进行激活,避免机卡分离的问题。

物联网平台配置

添加产品——>添加设备——>编辑物模型。

  • 设备三元组
{"ProductKey": "ibneFAfjvhy","DeviceName": "ElectricalFireMonitoringSystem","DeviceSecret": "9dc9c43e02ad25448de2d0913b49f802"
}

实际编码之前,先用 MQTTX 工具测试下设备的连接性。

2023-09-02-8-MQTTX.jpg

  • 物模型

根据实际的电气火灾监控系统监测指标,模拟了剩余电流、电压、电流以及功率等参数。

2023-09-02-7-ThingModel.jpg

编码实现

以下代码修改自创建的模板项目中的实例: iot-device

let iot = require('iot');
let network = require('network');let net = network.openNetWorkClient();/* 设备三元组信息 */
let productKey = 'ibneFAfjvhy';
let deviceName = 'ElectricalFireMonitoringSystem';
let deviceSecret = '9dc9c43e02ad25448de2d0913b49f802';let device;
let topic = '/sys/' + productKey + '/' + deviceName + '/thing/event/property/post';/* 模拟属性数据:JSON字符串*/
let json = '{"RC":0.5,"LineCurrent":8.0,"LineVotage":210.0,"LinePower":20.0}';function createDevice() {device = iot.device({productKey: productKey,deviceName: deviceName,deviceSecret: deviceSecret});device.on('connect', function() {console.log('(re)connected');device.subscribe({topic: topic,qos: 0});setInterval(function() {/* post props */device.postProps(json);}, 5000);/* 云端设置属性事件 */device.onProps(function(res) {console.log('cloud req msg_id is ' + res.msg_id);console.log('cloud req params_len is ' + res.params_len);console.log('cloud req params is ' + res.params);});/* 云端下发服务事件 */device.onService(function(res) {console.log('received cloud msg_id is ' + res.msg_id);console.log('received cloud service_id is ' + res.service_id);console.log('received cloud params_len is ' + res.params_len);console.log('received cloud params is ' + res.params);});});/* 网络断开事件 */device.on('disconnect', function() {console.log('disconnect ');});/* mqtt消息 */device.on('message', function(res) {console.log('mqtt message')console.log('mqtt topic is ' + res.topic);console.log('mqtt payload is ' + res.payload);})/* 关闭连接事件 */device.on('end', function() {console.log('iot client just closed');});/* 发生错误事件 */device.on('error', function(err) {console.log('error ' + err);});
}let status = net.getStatus();
console.log('net status is: ' + status);if (status == 'connect') {createDevice();
} else {net.on('connect', function() {createDevice();});
}

注意: JSON 字符串中的值类型与物模型中定义的值类型要一致;一开始将在字符串中将传感器的值写成了字符串类型,导致云平台无法解析为 Double ,报错。

2023-09-02-9-Log3.jpg

部署到DTU

将上述代码通过 Main UART 发布至 HAAS510

2023-09-02-7-APP.jpg

Debug UART 串口可以看到属性上报的记录。

2023-09-02-8-COM.jpg

效果验证

阿里云物联网平台上可以看到设备已在线。

2023-09-02-8-Online.jpg

以下是在日志服务、在线调试以及物模型数据在设备上报属性时的记录与展示。

  • 日志服务

2023-09-02-9-Log1.jpg

  • 在线调试

2023-09-02-9-Log2.jpg

  • 物模型数据

2023-09-02-9-Log4.jpg

小总结

这篇文章主要介绍了 HaaS510 开板式 DTU (数据传输单元)的真机连云过程,以及如何将监测数据上报至阿里云物联网平台。文章提供了硬件和软件环境的准备步骤,包括硬件设备和软件工具的连接和配置。然后,文章演示了如何使用 HaaS510HelloWorld 示例程序和 JavaScript 编码实现真机连云上报数据的功能。最后,文章验证了连云效果,并提供了参考资料供进一步学习和开发。

Reference

  • AIOT应用框架开发手册HaaS510

相关文章:

HaaS510开板式DTU真机连云:上报监测数据至阿里云物联网平台

背景 HaaS: Hardware as a Service。 HAAS510 是一种开板式 DTU ,旨在为用户已开发好的设备快速增加 4G 连云能力的 4G CAT1 数传模块。它通过将模组与用户设备集成到一个外壳内,既保持设备的一体性,又降低重新开发 PCB 的时间消耗和模组开…...

贾扬清开源 AI 框架 Caffe | 开源英雄

【编者按】在开源与人工智能的灿烂星河里,贾扬清的名字都格外地耀眼。因为导师 Trevor Darrell 教授的一句“你是想多花时间写一篇大家估计不是很在意的毕业论文,还是写一个将来大家都会用的框架?”,学生贾扬清一头扎进了创 Caffe…...

【objectarx.net】使用公式自动更新表格项的内容

使用公式自动更新表格项的内容...

CSS 移动端 1px(线条/边框) 不同机型上显示粗细不同,解决办法

由于不同的手机有不同的像素密度导致的。如果移动显示屏的分辨率始终是普通屏幕的2倍&#xff0c;1px的边框在devicePixelRatio2的移动显示屏下会显示成2px&#xff0c;所以在高清瓶下看着1px总是感觉变胖了 <!DOCTYPE html> <html lang"en"> <head&g…...

vue3使用vuex的示例(模块化功能)

目录 1. store/index.ts 2. main.ts 3. App.vue调用 4. 如果删除moduleA的namespaced属性, 保留moduleB的namespaced:true 5. 则App.vue修改为: 1. store/index.ts 注意: 需要使用时带上模块名称的namespaced必须为true, 不写或者为false时调用时不需要写模块名称(获取st…...

Vatee万腾的科技决策力奇迹:Vatee科技决策力的独特之选

在金融投资的复杂领域中&#xff0c;Vatee万腾以其独特的科技决策力创造了一场真正的奇迹。这不仅是一种引领投资者走向成功的选择&#xff0c;更是一种开启新时代的科技决策奇迹。 Vatee的科技决策力背后蕴藏着强大的智慧和创新。通过大数据分析、智能算法的运用&#xff0c;V…...

ai技术是怎么换脸的,实现原理是什么,有那些软件

人工智能&#xff08;AI&#xff09;在近年来的迅猛发展中&#xff0c;带来了许多令人惊叹的技术创新&#xff0c;其中之一就是人工智能换脸技术。这项技术通过深度学习和图像处理的手段&#xff0c;使得用户可以将自己的面孔替换成其他人物&#xff0c;引发了广泛的讨论和应用…...

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的&#xff0c;他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具&#xff0c;旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的…...

oracle备份一个表需要做的操作

在 Oracle 中备份一个表可以通过以下步骤完成&#xff0c;包括备份表结构&#xff08;DDL&#xff09;和备份表数据&#xff08;DML&#xff09;&#xff1a; 备份表结构&#xff08;DDL&#xff09;&#xff1a; 使用 CREATE TABLE AS SELECT&#xff1a; 创建一个新表&#…...

C 语言 switch 语句

C 语言 switch 语句 在本教程中&#xff0c;您将通过一个示例学习在C语言编程中创建switch语句。 switch语句使我们可以执行许多代替方案中的一个代码块。 虽然您可以使用if…else…if阶梯执行相同的操作。但是&#xff0c;switch语句的语法更容易读写。 switch … case的语…...

架构师:构建高可用服务治理Consul集群与Kong网关管理

1、简述 在微服务架构中,高可用性和服务治理是非常重要的方面。Consul作为一个开源的服务发现和配置工具,可以帮助我们实现高可用服务治理。Kong是一个用于管理 API 网关的工具,它可以提供强大的流量控制和安全功能。本文将介绍如何构建一个高可用的Consul集群,并结合Kong…...

elemenui的Upload上传整合成数组对象

1. 普通直接上传 <el-upload action"" :before-upload"doBeforeUpload"><el-button type"success" size"mini">导入</el-button></el-upload> methods:{doBeforeUpload(file) {let reader new FileReader(…...

莫桑比克市场开发攻略,收藏一篇就够了

中国与莫桑比克之间的经贸关系源远流长&#xff0c;两国之间的贸易和投资合作呈现出快速增长的趋势。莫桑比克是农业国&#xff0c;生产以及生活资料依赖进口&#xff0c;市场潜力还是非常不错的&#xff0c;今天就给大家分享一下。文章略长&#xff0c;大家点赞收藏关注慢慢看…...

go语言学习

1、示例代码&#xff1a; imgName : g.Cfg().MustGet(ctx, "migrate.img-arm-rbd").String() 在给定的代码行中&#xff0c;g.Cfg() 是一个函数调用&#xff0c;它返回一个配置对象。MustGet(ctx, "migrate.img-arm-rbd") 则是在这个配置对象上调用的方法…...

安哥拉市场开发攻略,收藏一篇就够了

安哥拉是非洲南部的一个国家&#xff0c;中国是安哥拉最大的贸易伙伴&#xff0c;安哥拉是中国在非洲的第二大贸易伙伴&#xff0c;中国人在安哥拉也是非常受欢迎的&#xff0c;虽然安哥拉经济比较落后&#xff0c;但是市场潜力还是非常不错的。今天就来给大家分享一下安哥拉的…...

第六章 :Spring Boot web开发常用注解(一)

第六章 &#xff1a;Spring Boot web开发常用注解&#xff08;一&#xff09; 前言 本章节知识重点&#xff1a;作者结合自身开发经验&#xff0c;以及觉察到的一个现象&#xff1a;Springboot注解全面理解和掌握的并不多&#xff0c;对注解进行了全面总结&#xff0c;共分两个…...

Unity DOTS系列之System中如何使用SystemAPI.Query迭代数据

最近DOTS发布了正式的版本, 我们来分享一下System中如何基于SystemAPI.Query来迭代World中的数据&#xff0c;方便大家上手学习掌握Unity DOTS开发。 SystemAPI.Query的使用 System有两种&#xff0c;一种是Unmanaged 的ISystem,一种是managed 的SystemBase,这两种System都可…...

【objectarx.net】创建渐变填充

net.gradientHatch(创建渐变填充)...

【软考】信息安全基本要素

目录 一、机密性二、完整性三、可用性四、可控性五、可审查性六、可鉴别性七、不可抵赖性八、可靠性 一、机密性 1.保证信息不泄露给未经授权的进程或实体&#xff0c;只供授权者使用 二、完整性 1.信息只能被得到允许的人修改&#xff0c;并且能够被判别该信息是否已被篡改过…...

[C++ ]:7.内存管理+模板引入。

内存管理模板引入 一.内存管理&#xff1a;1.内存区域划分图&#xff1a;2.区域划分实例&#xff1a;3.C 内存管理方式&#xff1a;newdelete4.自定义类型的new和delete&#xff1a;一.简单类&#xff1a;二.日期类&#xff1a;三.栈类&#xff1a;四.队列类&#xff08;栈实现…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...