• [技术干货] IoT开发,将数据转发至OBS长期储存
    [toc]文章摘要本文将使用 Python 编写一个MQTT应用程序,通过该程序上报数据至华为云IoT平台。华为云IoT平台收到数据后,根据预先配置的数据转发规则,将数据转存至对象存储服务(OBS)。理论介绍对于设备上报的数据,有两种方式让平台将设备上报数据推送给应用服务器,由应用服务器进行保存让平台将设备上报数据转发给对象存储服务(OBS),由OBS进行存储对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。本文主要介绍第二种方式 —— 使用华为云OBS服务转存数据实验讲解创建产品要在华为云IoT平台上进行开发,第一步要做的就是定义产品模型。大致步骤如下需求分析定义服务定义属性定义命令具体的可以看我这篇博客:cid:link_3已经写的很详细了,就不再赘述了。下面的实验均基于上述产品定义完成的基础上注册设备首先,进入华为云官网 cid:link_6依次点击:产品 —> IoT物联网 —> 设备接入IoTDA点击 免费试用设备 —> 所有设备 —> 注册设备填写如下内容。设备认证类型选择:密钥(输入你的密码)对话框中有一个Topic链接,导向华为云的帮助文档。地址为:cid:link_0Topic指的是:设备使用MQTT协议接入平台时,平台和设备通过Topic进行通信。确定后,会弹窗提示设备创建成功点击保存并关闭后,会自动下载一个文件:DEVICES-KEYDEVICES-KEY 的文件内容如下{ "device_id": "635d15a8222a8601d402e79c_air-conditioning", "secret": "(省略密码)" }刚创建好的设备还是“未激活”状态,需要真实连接上华为云IoT平台后,该状态才会改变编写应用程序代码(Python语言)安装依赖Python开发MQTT应用程序比较通用的项目是:paho-mqtt。PIPY官网地址为:cid:link_5试用如下命令安装依赖pip install paho-mqtt基础代码模板发布客户端 pub.py:import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, reason_code, properties): print("Connected with result code: " + str(reason_code)) client.publish('IoT平台的Topic', payload='报文内容', qos=0) def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) client = mqtt.Client(client_id='注册的客户端端ID', clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp", callback_api_version=mqtt.CallbackAPIVersion.VERSION2) client.on_connect = on_connect client.on_message = on_message client.username_pw_set('用户名', '密码') client.connect('IoT平台地址', 1883, 600) # 600为keepalive的时间间隔 client.loop_forever()接受客户端 sub.py:import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, reason_code, properties): print("Connected with result code: " + str(reason_code)) client.subscribe('IoT平台的Topic', qos=0) def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) client = mqtt.Client(client_id='注册的客户端端ID', clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp", callback_api_version=mqtt.CallbackAPIVersion.VERSION2) client.on_connect = on_connect client.on_message = on_message client.username_pw_set('用户名', '密码') client.connect('IoT平台地址', 1883, 600) # 600为keepalive的时间间隔 client.loop_forever() # 保持连接接入地址其中接入地址位置:IoT平台 —> 总览 —> 接入信息我这里的“接入地址”是f5e4964ab8.iot-mqtts.cn-north-4.myhuaweicloud.comTopic首先点击产品,进入你的产品切换到 “Topic管理”页面我们这里选择“设备上报属性数据”这条Topic(发布者:设备 | 订阅者:平台)$oc/devices/{device_id}/sys/properties/report设备ID设备ID在:设备 —> 所有设备 —> 设备列表我这里的“设备ID”是635d15a8222a8601d402e79c_air-conditioningMQTT 连接参数依次点击:设备 —> 所有设备 —> 设备详情 —> MQTT连接参数记录如下信息:client_id:635d15a8222a8601d402e79c_air-conditioning_0_0_2024041701username:635d15a8222a8601d402e79c_air-conditioningpassword:(省略密码)hostname:f5e4964ab8.iot-mqtts.cn-north-4.myhuaweicloud.com根据实际信息完善代码这里以 pub.py 为例,上报 DeviceInfo 属性这里可以使用虚拟设备在线调试,然后复制其报文,再贴入代码中这里的body信息如下{ "Manufacturer": "美的", "ProductionDate": { "begin": "2024-05-16T12:48:17.000Z", "end": "2024-05-16T12:48:22.000Z" }, "IndoorUnitModel": "EA35", "OutdoorUnitModel": "MW12345", "FluorinationPercent": 89, "DustPercent": 14, "ErrorCode": "0" }通过源码可以看到 Payload 是一个自定义类型它是一个联合类型,可以是如下几种类型之一strbytesbytearrayintfloatNone因此需要将上述body的报文转成JSON字符串来发送最终的代码如下import paho.mqtt.client as mqtt import json host = 'f5e4964ab8.iot-mqtts.cn-north-4.myhuaweicloud.com' port = 1883 username = '635d15a8222a8601d402e79c_air-conditioning' password = '(密码略)' client_id = '635d15a8222a8601d402e79c_air-conditioning_0_0_2024041701' device_id = '635d15a8222a8601d402e79c_air-conditioning' topic = f'$oc/devices/{device_id}/sys/properties/report' payload = { "Manufacturer": "美的", "ProductionDate": { "begin": "2024-05-16T12:48:17.000Z", "end": "2024-05-16T12:48:22.000Z" }, "IndoorUnitModel": "EA35", "OutdoorUnitModel": "MW12345", "FluorinationPercent": 89, "DustPercent": 14, "ErrorCode": "0" } payloadstr = json.dumps(payload) print(f'topic = {topic}') print(f'payloadstr = {payloadstr}') def on_connect(client, userdata, flags, reason_code, properties): print("Connected with result code: " + str(reason_code)) client.publish(topic, payload=payloadstr, qos=0) def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) client = mqtt.Client(client_id=client_id, clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp", callback_api_version=mqtt.CallbackAPIVersion.VERSION2) client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username=username, password=password) client.connect(host, port, 60) # 600为keepalive的时间间隔 client.loop_forever()点击在线调试,选择相应的设备点击绿色的三角形运行代码,可以看到已经连接成功了可以在消息跟踪这里看到对应的日志记录同时,在线调试这里,也可以看到 鉴权、数据流转、属性上报 的调试信息购买OBSOBS的费用说明对象存储服务OBS的定价表如下,本次实验所涉及的资费项,主要有以下两个存储费用:实验中会选择“低频访问存储数据”这块所占用的空间是需要付费的流量费用:IoT平台收到数据后,转发到OBS属于“内/公网流入流量”这块是免费的购买OBS套餐来到华为云OBS主页,点击购买cid:link_2选择“标准存储单AZ”或者“标准存储多AZ”都行,很便宜,一个月才1块钱,就能存40GB的数据了。但是注意:资源包不能抵扣已产生的用量,已购买成功的资源包不支持退订。挑选完毕后,点击右下角的“加入清单”,然后点击“立即购买”这里扫码付款即可创建桶的方式如下,首先进入“桶列表”,然后点击“创建桶”依次选择/填写区域桶名称(注意:桶名称仅支持小写字母、数字、中划线、英文点号)数据冗余存储策略默认存储类别然后点击立即创建创建好后,会自动返回桶列表。然后就可以看到刚刚创建的桶了配置转发规则回到IoT设备接入页面,在左侧点击 规则 —> 数据转发 —> 规则列表,点击“创建规则”按钮新建数据转发规则主要有以下3步骤设置转发数据:针对部分类型数据提供的快速配置,将引导您完成简单的业务设置。您也可以直接编辑过滤语句,实现更复杂的查询要求总共支持以下几种数据来源设备设备属性设备消息设备消息状态设备状态批量任务产品设备异步命令状态我们这里要做的是当接收到设备端(或模拟器)的数据上报时,转发到OBS,因此这里数据来源选择“设备属性”,触发事件选择属性上报。都设置完后,点击“创建规则”设置转发目标:您可以设置将数据转发至华为云其他服务(如OBS)或私有服务器最多支持添加10个转发目标,而且支持跨区域转发(例如这里IoT平台位于北京四,但是你的转发目标可以设置为广州的OBS)首次使用需要进行“访问授权”,直接同意即可,非常方便下面配置存储OBS的桶、数据存储的目录、文件名。文件类型用JSON或者CSV均可这里已经设置完成了启动规则:完成完整的规则定义后,您就可以控制规则的运行,以实现数据转发现在这条规则还未被启动,点击右上角的开关按钮启动规则即可切换开关后,这个规则就已经启动了回到规则列表也,就可以看到刚刚新增的这条规则了测试转发到OBS进入 监控运维 —> 消息跟踪 页面,在“设备列表”中选中你的设备。然后点击右上角的“清除数据”(方便后续调试、查看日志)切换到“在线调试”页面,选择我们的设备回到python代码,执行该代码可以看到这里已经收到“属性上报”,并且触发了“流转规则”这里虽然触发了“流转规则”但是执行失败了这是点击“详情”弹出的对话框这是点击“定位建议”弹出的对话框建议是:请您检查触发属性上报的设备对应产品的产品模型定义中是否包含您所上报数据中的服务ID从他的建议中,可以发现应该是我们上送的报文出错了。我们可以使用模拟器发送同样的指令,来看看具体报文该怎么写的在线调试页面,选择同一个产品中的“虚拟设备”(如果没有就创建一个)切换到设备模拟器,选择对应的服务,填写数据完成后,点击发送我这里之前创建的虚拟设备被冻结了,因此需要解冻设备在设备列表中选择该设备,点击操作中的解冻即可从新选择设备,发送命令。可以看到,这次设备模拟器发送成功了,应用模拟器也接收成功了从“消息跟踪”这里可以看到,模拟器上报的属性,触发对象存储服务(OBS)流转成功切换到 obs桶列表 —> 对象,可以看到数据创建成功点击查看文件信息,默认选项卡是“对象ACL”“元数据”如下从消息跟踪里找到模拟器上报属性的日志点击“详情”,复制data里的内容{"services":[{"properties":{"Manufacturer":"美的","ProductionDate":{"begin":"2024-04-01T15:21:21.000Z","end":"2024-05-01T15:21:23.000Z"},"IndoorUnitModel":"ABC","OutdoorUnitModel":"XYZ","FluorinationPercent":93,"DustPercent":24,"ErrorCode":"-1"},"service_id":"DeviceInfo","event_time":null}]}使用在线格式化后的JSON如下,工具地址:cid:link_7修正后的载荷如下time_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S') payload = {"services":[{ "properties":{ "Manufacturer":"美的", "ProductionDate": { "begin":"2024-04-01T15:21:21.000Z", "end":"2024-05-01T15:21:23.000Z" }, "IndoorUnitModel":"ABC", "OutdoorUnitModel":"XYZ", "FluorinationPercent":93, "DustPercent":24, "ErrorCode":"-1" }, "service_id":"DeviceInfo", "event_time":time_str }]}再次执行代码可以看到“消息跟踪”里,python代码上报的属性,也成功触发了OBS转发规则了(两者时间一致)再次查看OBS对象记录,可以看到大小比刚刚增加了一倍(也就是说二次提交成功),并且最后修改时间也跟上面python脚本执行时间对上了注意:帮助文档里有说“华为云对象存储服务OBS禁止通过OBS的默认域名(桶访问域名或静态网站访问域名)在线预览桶内对象,因此如果你想查看OBS文件的内容,就需要下载到本地进行查看了(不过下载需要支付流量费)”地址如下:cid:link_1最后附上最终的python代码(经过修订载荷后成功跑通的代码)# -*- coding: utf-8 -*- """ Created on Tue Apr 16 20:31:23 2024 @author: Administrator """ import json from datetime import datetime import paho.mqtt.client as mqtt host = 'f5e4964ab8.iot-mqtts.cn-north-4.myhuaweicloud.com' port = 1883 username = '635d15a8222a8601d402e79c_air-conditioning' password = '(略)' client_id = '635d15a8222a8601d402e79c_air-conditioning_0_0_2024041701' device_id = '635d15a8222a8601d402e79c_air-conditioning' topic = f'$oc/devices/{device_id}/sys/properties/report' time_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S') payload = {"services":[{ "properties":{ "Manufacturer":"美的", "ProductionDate": { "begin":"2024-04-01T15:21:21.000Z", "end":"2024-05-01T15:21:23.000Z" }, "IndoorUnitModel":"ABC", "OutdoorUnitModel":"XYZ", "FluorinationPercent":93, "DustPercent":24, "ErrorCode":"-1" }, "service_id":"DeviceInfo", "event_time":time_str }]} payloadstr = json.dumps(payload) print(f'topic = {topic}') print(f'payloadstr = {payloadstr}') def on_connect(client, userdata, flags, reason_code, properties): print("Connected with result code: " + str(reason_code)) client.publish(topic, payload=payloadstr, qos=0) print('property publish finished!') def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) client = mqtt.Client(client_id=client_id, clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp", callback_api_version=mqtt.CallbackAPIVersion.VERSION2) client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username=username, password=password) client.connect(host, port, 60) # 600为keepalive的时间间隔 client.loop_forever()释放资源停止/删除转发规则如果后续还要用到这个规则,可以先停止该规则(否则直接删除即可)停止后,状态会变为“未启动”删除OBS桶使用完后,建议删除OBS桶(虽然OBS桶是免费的,但是里面存东西需要付费)结束语通过这篇文章,可以看出,华为云IoT平台的功能基本是涵盖了IoT开发的方方面面,基本所有你能想到的,平台上都给出了一整套完整的解决方案,熟练掌握该平台,可以方便你今后快速开发迭代IoT相关的应用程序。上面的例子中,还展示了一个实际生产过程中可能遇到的报文数据错误的问题,并演示了如何通过IoT平台的“定位建议”功能,定位到该问题,并展示了一个快速的解决问题的方案 —— 通过模拟器发送指令,并核对两者日志的差异,最终完美并快速的解决问题。我正在参加【有奖征文 第29期】零代码零硬件玩转华为云IoT物联网平台多场景 链接:cid:link_4
  • [问题求助] 小熊派中的星闪、蓝牙BLE、WiFi,哪种技术传输速度更快,耗电更低?
  • [问题求助] 小熊派除了刷鸿蒙系统,还支持哪些系统?
    小熊派除了刷鸿蒙系统,还支持哪些系统?
  • [问题求助] 怎么用小熊派搭建鸿蒙系统?
    怎么用小熊派搭建鸿蒙系统?
  • [问题求助] 基于NB-IoT小熊派的智慧烟感在NB卡正常联网的情况下注册设备后依然显示设备未激活
    AT指令都正常AT+CFUN?返回+CFUN:1 AT+CGATT?返回+CGATT:1AT+CSQ返回+CSQ:18 99
  • [问题求助] 在VSCODE上安装IoT Link时总是安装IoT Link依赖环境失败
    VSCODE版本是1.49,按照教程按照Iot Link的时候就是会报错网络肯定是有连接的,装其他拓展都没问题不知道哪里出了问题,希望各位能给点意见
  • [技术干货] 【DTSE Tech Talk 精选问答】NO.54丨揭秘高可靠高性能的亿级物联网平台发展历程
    对话华为20年资深测试老兵,从手工测试到自动化测试,到实现测试服务化的成长过程,揭秘亿级物联网平台高可靠性、高性能的发展历程。直播链接:cid:link_0Q:如何通过自动化测试验证物联网平台在极端环境(如强干扰、弱信号等)下的稳定性和可用性?A:我们构建了网络时延、丢包等故障注入能力,仿真网络亚健康,集成到可靠性自动化框中例行检证Q:对于质量保障的看法和实践经验是什么?A:测试活动是质量保障的一个关键环节,通过工程能力,提升测试活动的效率及全面是我们工作的关键牵引,每年都会分析测试策略、测试设计、测试执行、专项测试等活动的效率薄弱环境,针对性地设计工程能力,比如直播中描述的,就是性能、可靠性测试效率低的一个改进实践活动。Q:在物联网平台的安全性设计中,如何防范外部攻击和内部威胁?A:华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。安全性是华为云与您的共同责任。华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。Q:是否可以分享一些具体的案例,展示在大型软件系统测试中遇到的问题以及如何解决这些问题?A:大型软件系统的微服务多,各微服务的数据也多,原始的DFX测试,是通过各种手工数据采集,通过EXL表汇聚后,人工进行分析,效率低。把性能采集到的数据,建模成测试报告格式,通过对报告中各个指标做基线,测试数据与基线比对,就可以实现自动化Q:测试效率提升的关键因素是什么?有哪些方法或技术可以显著提高测试的效率和质量?A:效率的核心还是工程能力,不能过度依赖人员能力,工程能力决定了团队的效率的底线,人员能力决定的是队团的上限,测试人员一定要有开发能力和规划能力,不然只会被牵着鼻子走,成为打下手的角色;测试人员要懂代码,能写代码,当你了解产品是怎么写出来的,就会有更好的思路对其进行验证了Q:如何促进团队内部的有效沟通和协作,以确保测试工作的顺利进行?A:规划好测试岗位,如测试经理、TSE、TE、田主等岗位,把测试各种活动划分到不同岗位,制定好各项工作的准责与输出件,确保大家都有明确的工作范围和目标Q:华为如何通过自动化测试实现亿级物联网平台在资源调度、任务分配、负载均衡等方面的优化?A:性能测试采用分层看护的方式:一、性能调优,重点关注性能目标的达成,主要在产品初期及有重大特性合入时,通过手工测试,自动采集数据的方式开展;二、完成性能调优后,使用性能数据建模的方式,采集指标、建立基线,自动例行看护指标有没有劣化。此活动可通过综合话务模型和单业务性能两个活动例行看护Q:在测试方面采取了哪些特定的策略和方法?有没有一些关键指标或技术用于评估和保障平台的质量?A:当前的研发流程普遍强调高效、快速,不论是多迭代开发模型还是devops流程,月度制定测试策略及月度评估风险都是必要的,及时应对研发过程的风险,调整测试活动,可以让策略更具备可执行性与评估有效性;产品的指标主要是业务SLA,如TPS、时延,以及资源占用情况,如CPU、内存、磁盘、数据库等Q:如何确保测试服务的质量和可靠性?是否有相关的技术和架构考量?A:测试服务也是一个产品,也需要有测试活动看护,确保运行稳定;推荐通过灰度发布的方式提供新特性,如果新特性有问题,可以快速回退,不影响日常的测试工作Q:在实现自动化测试过程中遇到的挑战,以及如何克服这些挑战。是否有一些最佳实践或工具推荐?A:性能、可靠性复用功能的自动化脚本,这是一个比较省人力的实践,但这比较考验测试架构师的能力,华为测试团队也有比较强的研发能力,现在也以服务的方式在华为云上提供使用,请参考https://support.huaweicloud.com/cloudtest/index.htmlQ:如何通过自动化测试工具对亿级物联网平台进行大规模压力测试,以发现潜在的性能瓶颈?A:性能测试采用分层看护的方式:一、性能调优,重点关注性能目标的达成,主要在产品初期及有重大特性合入时,通过手工测试,自动采集数据的方式开展;二、完成性能调优后,使用性能数据建模的方式,采集指标、建立基线,自动例行看护指标有没有劣化。此活动可通过综合话务模型和单业务性能两个活动例行看护Q:为啥要区分微服务和云服务的性能可靠性呢?对外体现云服务不可以么A:如果只是考虑通过测试发现问题的角度,的确只做云服务性能测试就足够了,但因为测试手拿着产品数据,如何通过这些数据提升性能问题的解决效率,也是测试可以带来的价值,通过微服务的性能测试报告,可以协助开发快速对性能问题定界定位Q:物联网平台自动化测试的实施步骤有哪些?A:首先需要有两个岗位,一是测试架构岗位,负责自动化框架制定,需要重点关注测试各项活动的能力复用,不能让测试人员各自为政,引入五花八门的测试工具开展测试,这样会导致严重的浪费;二是测试执行人员,及时分析测试工程能力需求,与测试架构师讨论自动化方案;这两个岗位配合好了,可以提升自动化效率。自动化的顺序建议是功能->性能->可靠性,因为功能可以为性能提升基础脚本,性能可以为可靠性提供背景流量。Q:针对高可靠性需求,物联网平台的关键技术选型有哪些?A:华为云基础底座已提供了多AZ、容器、网格、数据库、消息中间件等服务,这些服务本身有专职团队在运维,可以提供高可靠性能力Q:能举例说明一下目前IOT应用场景及其表现出来的特性A:可以参考IOT的产品文档:https://support.huaweicloud.com/bestpractice-iothub/iot_bp_0022.htmlQ:平台是如何进行设备管理和配置的,以确保设备的稳定运行和高效通信?A:可以参数IOT平台不同设备接入的实践案例,了解详细的设备管理、配置方案https://support.huaweicloud.com/bestpractice-iothub/iot_bp_0022.htmlQ:IOT 采用消息中间件是固定的吗A:IOT主要使用的消息中间件有KAFKA、PULSAR、AMQP,会按不同的业务特点进行选择Q:调用数据库的时延是通过哪个组件实现的A:通过切面技术对数据库组件进行监控,统计调用时延Q:老师说的10秒作为一个周期,上传统计数据,那10秒内的数据存在设备端还是服务端A:10秒上报的是各微服务接口统计数据,这些数据在上报前,是存在微服务的内容中的,因为只是统计数据,内存占用非常小Q:华为云是否有对应的测试服务,用于测试性能和可靠性A:华为云的testservice可以提供性能测试:https://support.huaweicloud.com/cloudtest/index.html 华为云的MAS可以提供混沌故障注入: https://support.huaweicloud.com/mas/index.htmlQ:最终通过哪些指标,来判断这个系统是OKA:产品的指标主要是业务SLA,如TPS、时延,以及资源占用情况,如CPU、内存、磁盘、数据库等Q:如何降低染色技术对性能的影响?A:不过度采集数据,只对核心的、异步的流程进行数据采集;发现某业务SLA不达标,则对此业务进行染色,协助问题分析;性能场景下,不采集消息体内容,只对数据进行统计,如微服务1秒内收到10个请求,那就只上报10这个统计值,而不上报10个消息体Q:在物料或成本有限的情况下,如果进行亿级连接的性能测试,有没有好的模拟和替代验证方案A:可以在微服务内部署AGENT的方式,对各种录制的流量进行回放;AGENT是使用切面技术实现Q:设备负载一般保持在多少比较合理A:建议一倍规格下50%左右,过高无冗余,过低有浪费Q:在面对网络不稳定或设备故障时,平台有哪些容错和恢复机制?A:平台提供了离线数据缓存能力,可以在设备上线后把数据下发给设备Q:平台是如何实现设备间的实时通信和协同工作的?A:IoT平台提供了规则引擎能力,可以实现数据与设备之间的联动,详情可参考:https://support.huaweicloud.com/usermanual-iothub/iot_01_0022.htmlQ:流量回放如何处理响应或者请求中需要修改的信息A:测试服务提供了界面,可以对回放流程中的所有消息体进行编辑,包含引入变量Q:测试开发工程师,既要懂测试,又要懂代码开发,如何兼顾?A:通过写测试服务代码,对被评估对象进行评估,而不是单纯地进行手工测试Q:调用连技术,对性能的影响如何降低?A:不过度采集数据,只对核心的、异步的流程进行数据采集;发现某业务SLA不达标,则对此业务进行染色,协助问题分析;性能场景下,不采集消息体内容,只对数据进行统计,如微服务1秒内收到10个请求,那就只上报10这个统计值,而不上报10个消息体Q:在处理海量数据时,平台是如何进行高效存储和查询的?A:华为云提供的RDS、DDS等数据库,支持高效的数据处理Q:平台支持哪些种的通信方式?wifi、蓝牙、网络?A:IOT支持的接入协议可参考文档:https://support.huaweicloud.com/usermanual-iothub/iot_01_01271.htmlQ:这个系统有结合AI吗A:有的,可以参考案例描述:https://support.huaweicloud.com/bestpractice-iothub/iot_bp_0224.htmlQ:300台设备,要实现您这样的自动化测试,大概需要多少台服务器,具体是什么样的配置A:300台设备的模似,只需要一个性能测试执行机,当前执行机最小配置是2U4GQ:流量回放如何处理响应或者请求中需要修改的信息A:测试服务提供了界面,可以对回放流程中的所有消息体进行编辑,包含引入变量Q:缓存故障,一般会导致数据丢失。为什么redis和mongo能互相替代?他们的数据是实时同步的吗A:不是全部数据都缓存,需要支撑核心业务的数据会进行缓存,如租户的鉴权数据,不需要每次业务都去查鉴权数据,可以缓存到REDIS中,每10分钟去更新一次就可以了。如果REDIS故障了,可以把这个数据缓存到MONGO中。REDIS和MONGO互替是一种BYPASS思路,需要结合微服务支撑业务的实践,做一定的设计,而不是全量数据同步。Q:故障是如何注入到微服务中的,通过什么proxy桥接吗?A:对的,通过proxy打通测试服务与容器网络的通信Q:自动生成的自动化测试的脚本是用python写的吗A:我们这边的实践是全部用JAVA,如果你对PYTHON更熟练,也可以用PYTHONQ:华为如何利用测试服务化来提升平台的稳定性?对于质量保障的看法和实践经验是什么?A:测试服务化的目地是可以提供接口启动不同的测试活动,并自动输出测试报告,这样可以方便与流水线进行对接Q:故障注入有哪些类型?A:故障注入的目标是仿真云服务运行环境异常,有虚拟机(包含了虚拟机CPU、内存、磁盘、网络等资源)、容器(包含了虚拟机CPU、内存、磁盘、网络、协议组件等资源)、依赖云服务(包含数据库、消息中间件、鉴权等云服务)、整局故障(AZ下电、REGION重启等)Q:作为开发者在物联网平台测试中如何借鉴和引入行业内先进的测试理念和技术?A:华为云有较多较好的测试实践,并以云服务方式开放出来供大家使用。华为云的testservice可以提供功能、性能测试:https://support.huaweicloud.com/cloudtest/index.html 华为云的MAS可以提供混沌故障注入: https://support.huaweicloud.com/mas/index.htmlQ:怎么获取丢包率?能详细说一下吗A:通过切面技术,对微服务流量入口方法,针对染色数据进行调用统计打点,对微服务流量出口方法,也针对染色数据进行调用统计打点。从而形成微服务入口、出口流量的数量统计,如果微服务出现了丢包,说明微服务丢数据了,也可以对比两个微服务的统计数据,从而得出微服务间是否有传输丢失Q:在面对不同通信模组和网络质量差异的情况下,平台如何设计网络架构和通信协议,以确保网络稳定性和数据传输效率?A:针对低功耗、小带宽要求的设备,我们会建使用DTLS+进行加密通信,这样可以简化协议交互流程,减少功耗与带宽开销Q:是否可以分享一些具体的案例,展示在大型软件系统测试中遇到的问题以及如何解决这些问题?A:最主要还是通过数据监控被测系统,拿到越多数据,就可以对被测系统评估得越充份,通过切面技术,对微服务进行方法级的数据获取,是一个非常好的思路,建议可以了解一下切面技术,通过这个点,来拓展数据获取思路Q:测试开发工程师,既要懂测试,又要懂代码开发,如何兼顾?A:通过写测试服务代码,对被评估对象进行评估,而不是单纯地进行手工测试Q:在确保物联网平台高性能的同时,如何控制成本?A:对平台进行性能测试时,我们会关注资源开销情况,对开销过高或过低,我们都会关注,开销过高,会通过云服务及微服务性能测试报告分析优化点;开销过低,我们会建议通过微服务合并的方式,减少微服务容器过多带来的无效开销。Q:如何解决物联网平台的海量数据处理和实时响应难题?A:几个比较经典的实践:1、微服务业务无状态化处理,借助华云CCE扩容微服务实例,提升平台的设备接入能力以及并发处理能力;2、使用华为云KAFKA作为微服务间数据总线,微服务通过异步流程处理业务,减少因业务响应时延过大,导致微服务线程占用时长过长,降低业务处理效率的风险,同时可以快速先响应,再处理数据,处理结果可以通过异步查询,或者结果订阅的方式获取;3、通过REDIS缓存依赖数据,避免多实例高频调用依赖服务接口做数据查询,减少数据查询开销和微服务性能负担Q:TraceId在微服务之间是怎么传递的A:HTTP、KAFKA等协议可以通过把traceid放到头域进行跨微服务传递,微服务内部,可以通过threadlocal变量做线程间传递Q:在华为实现测试服务化的过程中,哪些关键技术和架构调整发挥了至关重要的作用?您如何评价这些变革对于提高测试效率和准确性的影响?A:我们的实践中,最关键的技术,我觉得是把切面技术应用到了微服务数据采集上,通过这个技术我们可以采集到微服务方法级数据,可以协助我们做更详细的数据分析;另外,我们还把采集到的数据做到了可回放,这让我们可以用少量物料就开展微服务级性能、可靠性测试;数据越多,对我们的评估肯定会越准确,且可以协助开发进行更准确的问题定位Q:测试效率提升的关键因素是什么?有哪些方法或技术可以显著提高测试的效率和质量?A:效率的核心还是工程能力,不能过度依赖人员能力,工程能力决定了团队的效率的底线,人员能力决定的是队团的上限,测试人员一定要有开发能力和规划能力,不然只会被牵着鼻子走,成为打下手的角色。Q:调用链染色技术,对性能有影响,如何降低这个影响?A:不过度采集数据,只对核心的、异步的流程进行数据采集;发现某业务SLA不达标,则对此业务进行染色,协助问题分析;性能场景下,不采集消息体内容,只对数据进行统计,如微服务1秒内收到10个请求,那就只上报10这个统计值,而不上报10个消息体Q:能否详细描述华为从手工测试转向自动化测试过程中遇到的最大挑战是什么?在解决这些挑战的过程中,哪些策略或实践最为有效?A:最大的挑战是如何让测试人员不论水平高低,都可以写自动化脚本。我们的实践是核心测试人员,有能力写代码的测试人员,把自动化功能模块化,可以通过界面拖拽的方式,编辑自动化流程,降低自动化门槛Q:什么叫数据染色?是打印日志吗A:数据染色,是对外部接口带上trace id,并且这个trace id可以在全业务流程上传递,这样可以通过各微服务对trace id的感知,上报染色数据的相关数据,如消息体、接口调用时延等Q:随着设备数量的快速增长,平台是如何进行水平扩展和弹性伸缩的?A:我们是通过测试执行机容器化,横向扩容容器的方案,提升测试执行机整体性能Q:为了确保数据的安全性和隐私性,平台采用了哪些加密和认证机制?A:主要有DTLS、DTLS+、MQTTS,更详细介绍可参考产品文档https://support.huaweicloud.com/productdesc-iothub/iot_04_00115.htmlQ:在测试过程中是如何去定位测试BUG发生的位置的A:可以通过调用链和日志进行问题定界定位Q:如何模拟千万级设备连接测试?A:我们是通过性能测试执行机容器化,横向扩容容器的方案,提升测试执行机整体设备模拟性能Q:华为云IoT支持多少通讯协议的接入?和OceanConnect的关系是什么?A:IOT支持的接入协议可参考文档:https://support.huaweicloud.com/usermanual-iothub/iot_01_01271.html,OceanConnect是华为云IOT以前的一个品牌名称,现在统一为华为云IoTQ:华为云物联网平台在服务不同行业、不同应用场景时,是如何进行个性化定制和优化的?A:华为云IOT与各行业已有或新进入的IT伙伴,共同使能行业智能升级,同时,华为云IOT会把行业实践经验总结到行业平台套件中,如工业物联网平台、智慧交通平台等,提升行业智能化效率Q:Iot数据质量把控如何确保,数据安全性机制如何实现A:IOT的数据安全保障机制可参考文档:https://support.huaweicloud.com/productdesc-iothub/iot_04_00115.htmlQ:染色数据的特质是什么?A:数据染色,是对外部接口带上trace id,并且这个trace id可以在全业务流程上传递,这样可以通过各微服务对trace id的感知,上报染色数据的相关数据,如消息体、接口调用时延等Q:您们的iot云系统,能不能和其它电云系统,互为冗余运行A:华为云IOT支持数据订阅,其他电云系统可以通过数据订阅的方式,获取华为云IOT采集到的数据,同时其他电云系统也可以将数据推送到华为云IOT系统,从而实现数据的互备想要了解更多华为云IoT 相关知识,欢迎观看DTSE Tech Talk 系列技术直播
  • [问题求助] 提示我设备未激活,然后调试命令失败,该怎么处理
    提示我设备未激活,然后调试命令失败,该怎么处理
  • [问题求助] IoT 智能水表,心跳连接,多久发一次比较好?不会增加服务器压力
    IoT 智能水表,心跳连接,多久发一次比较好?不会增加服务器压力?
  • [技术干货] 2024年3月合集博客近期优秀博文
    1:解锁物联网数据管理的新境界:华为云OBS助力数据转发与存储【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/424493 2:加速物联网应用开发:华为云设备模拟器快速接入指南【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/424484 3:体验华为云IoT设备接管能力,完善无人零售的消费体验【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/424441 4:跟我一起挑战将设备快速接入IoTDA平台【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/424265 5:设备快速接入IoTDA实战【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/424229 6:Arduino+ESP8266+华为云物联网平台实现智能开关【玩转华为云】 https://bbs.huaweicloud.com/blogs/424136 7:处理结构体中的属性转换和指针偏移量 https://bbs.huaweicloud.com/blogs/424009 8:设备联动:监测设备状态变化情况并发送通知 【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/423973 9:数据转发:数据转发至OBS长期储存 【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/423972 10:设备控制:体验云端设置恒温空调 【零代码零硬件玩转华为云IoT】 https://bbs.huaweicloud.com/blogs/423969 11:【有奖征文 第29期】零代码零硬件玩转华为云IoT物联网平台多场景,赢取50元京东卡、开发者定制周边好礼! https://bbs.huaweicloud.com/blogs/423245 12:华为云短信服务教你用Python实现Cmpp协议 https://bbs.huaweicloud.com/blogs/423005
  • [问题求助] 如何应对物联网设备的功耗管理和能效优化挑战?
    如何应对物联网设备的功耗管理和能效优化挑战?
  • [问题求助] 边缘计算在物联网中扮演的角色和未来发展趋势是什么?
    边缘计算在物联网中扮演的角色和未来发展趋势是什么?
  • [技术干货] 语音识别系统的组成部分
    语音识别系统的五个主要组成部分:前端声学处理(Preprocessing)前端声学处理是语音识别流程的第一步,它负责捕获和初步处理来自麦克风等传感器的原始语音信号。这部分通常包括以下几个子步骤:声音采集:收集环境中的语音信号。预加重:对语音信号进行预加重处理,以补偿高频信号在传输过程中的衰减。分帧与加窗:将连续的语音信号分割成短时的小段(帧),并在每一帧上应用窗口函数,如汉明窗或海明窗,来减少帧边界效应。采样与量化:将模拟语音信号转换为数字信号,通过采样和量化的过程满足计算机处理要求。特征提取前的滤波:可能还包括噪声抑制、回声消除等技术去除背景噪音干扰。端点检测:确定语音活动的起始和结束时间,仅保留包含有效语音信息的帧。特征提取(Feature Extraction)特征提取模块从经过预处理后的语音信号中抽取有意义的特征参数,这些参数能够代表语音的本质内容。常用的特征包括梅尔频率倒谱系数(MFCCs)、线性预测编码(LPC)、感知线性预测(PLP)等。这些特征向量能较好地区分不同发音单元,并且降低数据维度,便于后续的模型匹配和分析。声学模型(Acoustic Model)声学模型是语音识别系统的核心组件之一,用于建立语音特征向量与语音单元(音素、子音、元音或词片段)之间的映射关系。基于统计学习方法训练的声学模型广泛应用于现代语音识别系统中,包括隐马尔可夫模型(HMM)、深度神经网络(DNN)、卷积神经网络(CNN)以及长短时记忆网络(LSTM)等结构。声学模型的任务是在大量训练样本的基础上学习各种语音特征与对应标签间的概率分布规律。语言模型(Language Model)语言模型关注的是语言的语法和语义结构,目的是根据词汇间的关联性和上下文信息评估一系列单词组成的句子出现的概率。语言模型可以基于规则编写,但更常见的是采用统计语言模型,如n-gram模型、条件随机场(CRF)、循环神经网络(RNN)及其变体长短期记忆网络(LSTM)结合注意力机制等,用以捕捉语言序列的自然属性和语境依赖性。解码器(Decoder)解码器在整个系统中起到“决策者”的作用,它利用声学模型和语言模型的输出,通过搜索算法(如Viterbi算法、WFST或CTC-BestPath解码等)找出最有可能表示输入语音信号的文本序列。解码器不仅需要找到最优路径,还可能涉及错误纠正、多轮对话理解以及适应上下文变化等方面的工作。此外,为了优化性能和用户体验,语音识别系统往往还需要集成其他辅助组件,例如:自适应和个性化模块:根据用户特定的发音习惯、口音或者环境噪声进行自适应调整。唤醒词检测(对于某些设备):在持续监听状态下仅响应特定的唤醒词语,激活整个识别过程。语音合成反馈(TTS):实现双向交互,将识别结果转化为语音反馈给用户。后处理和纠错机制:对识别出的结果进行后期校正,提高识别准确率。
  • [技术干货] 语音识别模块的原理
    语音识别模块是一种基于嵌入式技术的模块,主要用于将人类语音中的词语转换成计算机可读的格式,实现与主芯片的通讯。该模块通常包括语音识别芯片和其他附属电路,使得开发者能够方便地将其嵌入到各种智能化产品中,实现人机语音交互。语音识别模块的基本原理可以分为训练和识别两个阶段。在训练阶段,系统需要大量的语音资料来收集和处理,通过特征提取得到语音参数,并建立语音参考库。而在识别阶段,系统将输入的语音参数与参考库中的参考模型进行相似性度量比较,将相似性最高的输入特征矢量作为识别结果输出,从而实现语音识别的目的。语音识别模块的应用广泛,不仅限于智能助手、智能家居、车载系统、医疗、教育等领域,还逐渐渗透到金融、零售、公共服务等多个领域。随着技术的不断进步,语音识别模块在识别准确性、实时性和智能化方面不断提升,为人们的生活和工作带来了极大的便利。同时,语音识别模块也在不断发展和创新。例如,现在的语音识别模块可以采用非特定人识别技术,使得系统能够识别不同人的语音;也可以结合深度神经网络等先进技术,提高识别的准确性和鲁棒性。语音识别前端处理,是语音识别系统中的一个重要环节,主要负责对原始语音信号进行处理和转换,以提取出对后续识别有用的特征信息。以下是前端处理的主要步骤及其目的:1. 预加重:这是一种在发送端对输入信号高频分量进行补偿的信号处理方式。随着信号速率的增加,信号在传输过程中受损很大,预加重技术的思想就是在传输线的始端增强信号的高频成分,以补偿高频分量在传输过程中的过大衰减。这有助于提高输出信噪比,使处理后的信号更均匀、平滑,为信号参数提取提供优质的参数。2. 分帧:由于语音信号是时变的,为了使其具有短时平稳性,通常将语音信号划分为较短的帧进行处理。这样可以在每一帧内认为语音信号是平稳的,从而简化处理过程。3. 加窗:加窗是为了减少语音帧两端的不连续性,防止频谱泄漏。通过选择一个合适的窗函数(如汉明窗),可以平滑语音帧的边缘,使频谱分析更准确。4. 特征提取:在前端处理中,特征提取是一个关键步骤。通过提取语音信号中的关键特征,如能量、基频、共振峰等,可以进一步降低数据维度,提高识别效率。同时,消除噪声和不同说话人的发音差异带来的影响,使处理后的信号能够更完整地反映语音的本质特征。声学模型是建立语音特征与发音单元(音素或音节)之间的映射关系。传统的隐马尔可夫模型(HMM)是早期广泛应用的声学模型框架,它假设语音信号可以由一系列不可观测的状态生成,而状态间的转移遵循一定的概率规律。同时,每个状态会输出可观测的特征向量序列。现代的声学模型更多地利用深度神经网络(DNN、CNN、LSTM)来直接建模语音特征到音素的概率分布,或者结合CTC(Connectionist Temporal Classification)损失函数训练端到端的系统。语言模型旨在估计一组词序列出现的可能性,反映了语言的语法结构和语义连贯性。统计语言模型如n-gram模型常用于传统语音识别中,通过计算历史上下文中单词序列出现的概率来进行文本预测。近年来,随着深度学习的发展,RNN(尤其是长短期记忆网络LSTM)和Transformer架构被广泛应用于构建更强大的语言模型,能够更好地理解复杂语境并提高识别准确率。解码器的任务是在给定声学模型和语言模型的情况下,找到最可能的文本序列,即语音信号对应的字词序列。常用的解码算法包括Viterbi算法(寻找最优路径,适用于HMM模型)、WFST(Weighted Finite-State Transducers)解码和搜索空间受限的动态规划方法。对于基于深度学习的端到端语音识别系统,常常采用贪婪搜索、束搜索(Beam Search)或基于注意力机制的解码策略。联合优化通常涉及到声学模型、语言模型以及解码器等多个组件的协同调整。这种优化方法能够充分利用各个组件之间的关联性,通过联合训练或参数调整,使得整个系统在识别准确性、响应速度等方面达到更好的性能。例如,声学模型和语言模型的联合训练能够使得系统更好地理解语音信号的声学特性以及语言的上下文信息,从而提高识别的准确性。后处理则是在语音识别结果输出后,对识别结果进行进一步的处理和修正。后处理的主要目的是减少识别错误,提高识别结果的准确性和流畅性。常用的后处理方法包括纠错系统、语法检查和语义理解等。纠错系统可以识别并修正识别结果中的拼写错误、语法错误等,从而提高识别结果的准确性。语法检查和语义理解则可以帮助系统更好地理解识别结果的含义,进一步减少误解和歧义。联合优化与后处理在语音识别系统中起着至关重要的作用。它们能够相互补充、相互促进,使得整个系统在实际应用中更加可靠、高效。随着深度学习、自然语言处理等技术的不断发展,联合优化与后处理的方法也在不断创新和完善,为语音识别系统的性能提升提供了更多的可能性。
  • [技术干货] AR技术和VR技术分别指什么
    一、AR技术:扩展现实边界增强现实(AR)技术是一种将虚拟的数字信息叠加到真实世界中的技术。通过特定的设备,如AR眼镜或智能手机,用户可以看到由计算机生成的图像、文字、声音等虚拟信息,这些信息与真实环境相融合,为用户带来更加丰富和沉浸式的体验。AR技术的应用范围非常广泛。在教育领域,AR技术可以将抽象的概念具象化,帮助学生更好地理解知识。例如,在生物学课堂上,学生可以通过AR眼镜观察到细胞内部的结构和运动过程,从而更加深入地理解生物学的知识。在娱乐和游戏领域,AR技术也为用户带来了全新的体验。通过AR游戏,玩家可以与虚拟角色互动,参与到更加逼真的游戏世界中。除了教育和娱乐领域,AR技术还在医疗、设计、军事等多个领域得到了广泛应用。例如,在医疗领域,医生可以利用AR技术进行手术模拟和训练,提高手术成功率;在设计领域,设计师可以利用AR技术将设计方案直接呈现在真实环境中,方便进行修改和优化。二、VR技术:创造全新虚拟世界虚拟现实(VR)技术则是一种通过计算机生成的、可交互的三维环境,使用户仿佛置身于一个全新的世界中。VR技术通常通过头戴式显示器、手柄等设备来实现,为用户提供视觉、听觉、触觉等多种感官体验。VR技术的应用同样广泛。在游戏领域,VR游戏为玩家提供了更加真实和沉浸式的游戏体验。玩家可以戴上VR头盔,手持手柄,在虚拟世界中进行探险、战斗等各种活动,仿佛置身于一个全新的游戏世界中。在旅游领域,VR技术也可以让用户在家中就能游览世界各地的名胜古迹,体验不同的文化和风景。此外,VR技术还在教育、培训、军事等领域发挥着重要作用。例如,在军事领域,VR技术可以用于模拟实战场景,帮助士兵进行训练;在医学领域,VR技术也可以用于模拟手术操作,提高医生的技能和经验。三、AR与VR技术的比较与互补虽然AR技术和VR技术都是扩展现实的技术,但它们之间存在一些明显的差异。首先,AR技术强调的是在真实环境中添加虚拟元素,而VR技术则是完全构建一个虚拟的环境。其次,AR技术更注重与真实世界的交互,而VR技术则更多地关注虚拟世界的沉浸感。然而,AR技术和VR技术并不是相互排斥的,它们在实际应用中往往可以相互补充。例如,在旅游领域,VR技术可以为用户提供一个虚拟的旅游体验,而AR技术则可以在用户到达景点后,为他们提供更加丰富和详细的信息。在教育领域,AR技术可以帮助学生更好地理解抽象的概念,而VR技术则可以为学生提供一个更加真实和沉浸的学习环境。