华为云用户手册

  • 步骤3:基础权限开通 基础权限开通需要登录管理员账号,为子用户账号开通Server功能所需的基础权限(ModelArts FullAccess/BMS FullAccess/E CS FullAccess/VPC FullAccess/VPC Administrator/VPCEndpoint Administrator)。 登录 统一身份认证 服务管理控制台。 单击目录左侧“用户组”,然后在页面右上角单击“创建用户组”。 填写“用户组名称”并单击“确定”。 在操作列单击“用户组管理”,将需要配置权限的用户加入用户组中。 单击用户组名称,进入用户组详情页。 在权限管理页签下,单击“授权”。 图2 “配置权限” 在搜索栏输入“ModelArts FullAccess”,并勾选“ModelArts FullAccess”。 图3 ModelArts FullAccess 以相同的方式,依次添加:BMS FullAccess、ECS FullAccess、VPC FullAccess、VPC Administrator、VPCEndpoint Administrator。(Server Administrator、DNS Administrator为依赖策略,会自动被勾选)。 单击“下一步”,授权范围方案选择“所有资源”。 单击“确认”,完成基础权限开通。
  • 注意事项 本文旨在指导如何在Snt9b裸金属服务器上,进行磁盘合并挂载、安装docker等环境配置。在配置前请注意如下事项: 首次装机时需要配置存储、固件、驱动、网络访问等基础内容,这部分配置尽量稳定减少变化。 裸机上的开发形式建议开发者启动独立的Docker容器作为个人开发环境。Snt9b的裸机包含8卡算力资源,一般来说多人可以共用这个裸机完成开发与调测工作。多人使用为了避免冲突,建议各自在自己的docker容器中进行独立开发,并提前规划好每个人使用的具体卡号,避免相互影响。 ModelArts提供了标准化基础容器镜像,在容器镜像中已经预置了基础MindSpore或PyTorch框架和开发调测工具链,推荐用户直接使用该镜像,用户也可以使用自己的业务镜像或昇腾AscendHub提供的镜像。如果镜像中预置的软件版本不是您期望的版本,可以自行安装替换。 开发形式推荐通过容器中暴露的SSH端口以远程开发的模式(VSCode SSH Remote、 Xshell)连接到容器中进行开发,可以在容器中挂载宿主机的个人存储目录,用于存放代码和数据。 当前指导中很多操作步骤在最新发放的Snt9b裸机环境中已经预置,无需用户再手动配置,用户在操作中如发现某个步骤已有预置配置可直接跳过该步骤。
  • 计费模式概述 设备接入服务 提供按需计费、包年/包月两种计费模式,以满足不同场景下的用户需求。 包年/包月:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。一般适用于设备需求量长期稳定的成熟业务。 按需计费:一种后付费模式,即先使用再付费,按照实际使用时长计费。按需计费模式允许您根据实际业务需求灵活地调整资源使用。 表1列出了两种计费模式的区别。 表1 计费模式 计费模式 包年/包月 按需计费 付费方式 预付费 后付费 计费周期 按订单的购买周期计费。 标准版实例:按小时结算。 基础版实例(2023年1月1日前):按照实际产生的消息数计费。 适用计费项 标准版实例、企业版实例。 标准版实例、基础版实例。 变更规格 支持变更实例规格。 标准版实例支持变更实例规格。 基础版实例不支持变更实例规格。 适用场景 适用于可预估资源使用周期的场景,价格比按需计费模式更优惠。对于长期使用者,推荐该方式。 适用于资源需求波动的场景,可以随时开通,随时删除。 设备接入服务(IoTDA)计划于2023年1月1日起将原基础版升级为标准版免费单元,原基础版用户可继续使用基础版,新用户可直接使用标准版免费单元,支持平滑扩容至更高规格以及更多的服务组合能力。原基础版用户如需迁移至标准版可参考迁移指导。 父主题: 计费模式
  • 计费示例 假设您在2023/04/18 9:59:30开通了一个标准版S1单元,然后在2023/04/18 11:45:46将其删除,则: 第一个计费周期为2023/04/18 09:00:00 ~ 2023/04/18 10:00:00,在2023/04/18 09:59:30 ~ 2023/04/18 10:00:00间产生费用,该计费周期内的计费时长为30秒。 第二个计费周期为2023/04/18 10:00:00 ~ 2023/04/18 11:00:00,在2023/04/18 10:00:00 ~ 2023/04/18 11:00:00间产生费用,该计费周期内的计费时长为3600秒。 第三个计费周期为2023/04/18 11:00:00 ~ 2023/04/18 12:00:00,在2023/04/18 11:00:00 ~ 2023/04/18 11:45:46间产生费用,该计费周期内的计费时长为2746秒。 您需要为每个计费周期付费,计费公式如表2所示。产品价格计算器中标出了资源每小时的价格,您需要将每小时价格除以3600,得到每秒价格。 表2 计费公式 资源类型 计费公式 资源单价 设备接入基础版实例(2023年1月1日前) 百万消息单价 * 计费周期内消息数 3.6元/百万条消息 设备接入标准版实例 单元类型单价 * 单元数量 * 购买时长 请参见设备接入价格计算器,计费模式选择“按需计费”,然后选择您要购买的单元类型,购买单元数量默认为1,购买时长默认为1小时。查看页面下方的“配置费用”即为该实例资源每小时的价格。
  • 变更配置后对计费的影响 如果您在购买按需计费实例后变更了实例配置,会产生一个新订单并开始按新配置的价格计费,旧订单自动失效。 如果您在一小时内变更了实例配置,所在计费周期的计费信息按变更后的配置生成。 例如,您在9:00:00开通了1个标准版S1单元,并在9:30:00升配为1个S2单元,那么在这一个小时的计费周期会产生两条计费信息。 第一条对应09:00:00 ~ 9:30:00,实例规格按照1个S1单元的计费信息。 第一条对应09:30:00 ~ 10:00:00,实例规格按照1个S2单元的计费信息。 单个标准版实例可配置多个同类型的计量单元,如5个S1,但不能配置不同类型的单元,如2个S1和3个S2混合。支持随时升降单元个数及类型,如2个S1升级为5个S1、2个S1升级为2个S2。免费单元S0支持升级至ST/S1/S2/S3,升级后原S0不再保留。
  • 适用计费项 以下计费项支持按需计费。 表1 适用计费项 计费项 说明 基础版实例(2023年1月1日前) 按实际产生的消息数计费,3.6元/百万条消息,每月前一百万条消息免费。 标准版实例 按实例规格与使用时长计费。 设备接入服务(IoTDA)计划于2023年1月1日起将原基础版升级为标准版免费单元,原基础版用户可继续使用基础版,新用户可直接使用标准版免费单元,支持平滑扩容至更高规格以及更多的服务组合能力。原基础版用户如需迁移至标准版可参考迁移指导。
  • 如何开发网关 网关是一个特殊的设备,除具备一般设备功能之外,还具有子设备管理、子设备消息转发的功能。SDK提供了AbstractGateway抽象类来简化网关的实现。该类提供了子设备管理功能,需要从平台获取子设备信息并保存(需要子类提供子设备持久化接口)、子设备下行消息转发功能(需要子类实现转发处理接口)、以及上报子设备列表、上报子设备属性、上报子设备状态、上报子设备消息等接口。 使用AbstractGateway类 继承该类,在构造函数里提供子设备信息持久化接口,实现其下行消息转发的抽象接口: 1 2 3 4 5 6 7 public abstract void onSubdevCommand(String requestId, Command command); public abstract void onSubdevPropertiesSet(String requestId, PropsSet propsSet); public abstract void onSubdevPropertiesGet(String requestId, PropsGet propsGet); public abstract void onSubdevMessage(DeviceMessage message); iot-gateway-demo代码介绍 工程iot-gateway-demo基于AbstractGateway实现了一个简单的网关,它提供tcp设备接入能力。关键类: SimpleGateway:继承自AbstractGateway,实现子设备管理和下行消息转发 StringTcpServer:基于netty实现一个TCP server,本例中子设备采用TCP协议,并且首条消息为鉴权消息 SubDevicesFilePersistence:子设备信息持久化,采用json文件来保存子设备信息,并在内存中做了缓存 Session:设备会话类,保存了设备id和TCP的channel的对应关系 SimpleGateway类 添加或删除子设备处理 添加子设备:AbstractGateway的onAddSubDevices接口已经完成了子设备信息的保存。我们不需要再增加额外处理,因此SimpleGateway不需要重写onAddSubDevices接口 删除子设备:我们不仅需要修改持久化信息,还需要断开当前子设备的连接。所以我们重写了onDeleteSubDevices接口,增加了拆链处理,然后调用父类的onDeleteSubDevices。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override public int onDeleteSubDevices(SubDevicesInfo subDevicesInfo) { for (DeviceInfo subdevice : subDevicesInfo.getDevices()) { Session session = nodeIdToSesseionMap.get(subdevice.getNodeId()); if (session != null) { if (session.getChannel() != null) { session.getChannel().close(); channelIdToSessionMap.remove(session.getChannel().id().asLongText()); nodeIdToSesseionMap.remove(session.getNodeId()); } } } return super.onDeleteSubDevices(subDevicesInfo); } 下行消息处理 网关收到平台下行消息时,需要转发给子设备。平台下行消息分为三种:设备消息、属性读写、命令。 设备消息:这里我们需要根据deviceId获取nodeId,从而获取session,从session里获取channel,就可以往channel发送消息。在转发消息时,可以根据需要进行一定的转换处理。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Override public void onSubdevMessage(DeviceMessage message) { //平台接口带的都是deviceId,deviceId是由nodeId和productId拼装生成的,即 //deviceId = productId_nodeId String nodeId = IotUtil.getNodeIdFromDeviceId(message.getDeviceId()); if (nodeId == null) { return; } //通过nodeId获取session,进一步获取channel Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { log.error("subdev is not connected " + nodeId); return; } if (session.getChannel() == null){ log.error("channel is null " + nodeId); return; } //直接把消息转发给子设备 session.getChannel().writeAndFlush(message.getContent()); log.info("writeAndFlush " + message); } 属性读写: 属性读写包括属性设置和属性查询。 属性设置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Override public void onSubdevPropertiesSet(String requestId, PropsSet propsSet) { if (propsSet.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(propsSet.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(propsSet)); //为了简化处理,我们在这里直接回响应。更合理做法是在子设备处理完后再回响应 getClient().respondPropsSet(requestId, IotResult.SUC CES S); log.info("writeAndFlush " + propsSet); } 属性查询: 1 2 3 4 5 6 7 @Override public void onSubdevPropertiesGet(String requestId, PropsGet propsGet) { //不建议平台直接读子设备的属性,这里直接返回失败 log.error("not supporte onSubdevPropertiesGet"); deviceClient.respondPropsSet(requestId, IotResult.FAIL); } 命令:处理流程和消息类似,实际场景中可能需要不同的编解码转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Override public void onSubdevCommand(String requestId, Command command) { if (command.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(command.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把command对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(command)); //为了简化处理,我们在这里直接回命令响应。更合理做法是在子设备处理完后再回响应 getClient().respondCommand(requestId, new CommandRsp(0)); log.info("writeAndFlush " + command); } 上行消息处理 上行处理在StringTcpServer的channelRead0接口里。如果会话不存在,需要先创建会话: 如果子设备信息不存在,这里会创建会话失败,直接拒绝连接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override protected void channelRead0(ChannelHandlerContext ctx, String s) throws Exception { Channel incoming = ctx.channel(); log.info("channelRead0" + incoming.remoteAddress() + " msg :" + s); //如果是首条消息,创建session //如果是首条消息,创建session Session session = simpleGateway.getSessionByChannel(incoming.id().asLongText()); if (session == null) { String nodeId = s; session = simpleGateway.createSession(nodeId, incoming); //创建会话失败,拒绝连接 if (session == null) { log.info("close channel"); ctx.close(); } } 如果会话存在,则进行消息转发: 1 2 3 4 5 6 7 else { //如果需要上报属性则调用reportSubDeviceProperties DeviceMessage deviceMessage = new DeviceMessage(s); deviceMessage.setDeviceId(session.getDeviceId()); simpleGateway.reportSubDeviceMessage(deviceMessage, null); } 到这里,网关的关键代码介绍完了,其他的部分看源代码。整个demo是开源的,用户可以根据需要进行扩展。比如修改持久化方式、转发中增加消息格式的转换、实现其他子设备接入协议。 iot-gateway-demo的使用 创建子设备的产品,步骤可参考创建产品。 在创建的产品中定义模型,添加服务,服务ID为parameter。并且新增alarm和temperature两个属性,如下图所示 图9 模型定义-子设备产品 修改StringTcpServer的main函数,替换构造参数,然后运行该类。 1 2 3 simpleGateway = new SimpleGateway(new SubDevicesFilePersistence(), "ssl://iot-acc.cn-north-4.myhuaweicloud.com:8883", "5e06bfee334dd4f33759f5b3_demo", "mysecret"); 在平台上看到该网关在线后,添加子设备。 图10 设备-添加子设备 表1 子设备参数 参数名称 参数描述 所属产品 子设备所属的产品,选择步骤1创建的产品。 设备名称 即device_name,可自定义,如subdev_name 设备标识码 即node_id,填写subdev。 设备ID 即devicee_id,可不填写,自动生成。 此时网关上日志打印: 2024-04-16 21:00:01 INFO SubDevicesFilePersistence:112 - add subdev, the nodeId is subdev 运行TcpDevice类,建立连接后,输入步骤3中注册的子设备的nodeId,如subdev。 图11 子设备连接 此时网关设备日志打印: 2024-04-16 21:00:54 INFO StringTcpServer:196 - initChannel: /127.0.0.1:21889 2024-04-16 21:01:00 INFO StringTcpServer:137 - channelRead0 is /127.0.0.1:21889, the msg is subdev 2024-04-16 21:01:00 INFO SimpleGateway:100 - create new session ok, the session is Session{nodeId='subdev', channel=[id: 0xf9b89f78, L:/127.0.0.1:8080 - R:/127.0.0.1:21889], deviceId='subdev_deviceId'} 在平台上看到子设备上线。 图12 设备列表-设备在线 子设备上报消息 图13 子设备上报消息 查看日志看到上报成功 2024-04-16 21:02:36 INFO StringTcpServer:137 - channelRead0 is /127.0.0.1:21889, the msg is hello 2024-04-16 21:02:36 INFO MqttConnection:299 - publish message topic is $oc/devices/5e06bfee334dd4f33759f5b3_demo/sys/messages/up, msg = {"name":null,"id":null,"content":"hello","object_device_id":"subdev_deviceId"] 2024-04-16 21:02:36 INFO MqttConnection:299 - publish message topic is $oc/devices/5e06bfee334dd4f33759f5b3_demo/sys/gateway/sub_devices/properties/report, msg = {"devices":[{"services":[{"properties":{"temprature":2,"alarm":1},"service_id":"parameter","event_time":null}],"device_id":"subdev_deviceId"}]] 查看消息跟踪 在平台上找到网关,选择 设备详情-消息跟踪,打开消息跟踪。继续让子设备发送数据,等待片刻后看到消息跟踪: 图14 消息跟踪-直连设备
  • 准备工作 开发环境要求:已经安装JDK(版本1.8以上)和maven 访问SDK下载页面,下载SDK,整个工程包含以下子工程: iot-device-sdk-java:sdk代码 iot-device-demo:普通直连设备的demo代码 iot-gateway-demo:网关设备的demo代码 iot-bridge-sdk:网桥的sdk代码 iot-bridge-demo:网桥的demo代码,用来演示如何将tcp设备桥接到平台 iot-bridge-sample-tcp-protocol:子设备使用tcp协议链接网桥的样例 iot-device-code-generator:设备代码生成器,可以根据产品模型自动生成设备代码 编译安装:进入到SDK根目录,执行mvn install
  • 创建产品 为了方便体验,我们提供了一个烟感的产品模型,烟感会上报烟雾值、温度、湿度、烟雾报警、还支持响铃报警命令。以烟感例,体验消息上报、属性上报等功能。 访问设备接入服务,单击“管理控制台”进入设备接入控制台,选择您的实例,单击实例卡片进入。查看MQ TTS 设备接入 域名 ,保存该地址。 单击左侧导航栏“产品”,单击页面左侧的“创建产品”。 根据页面提示填写参数,然后单击“确定”完成产品的创建。 基本信息 所属资源空间 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。 协议类型 选择“MQTT”。 数据格式 选择“JSON”。 设备类型选择 选择”自定义类型” 设备类型 填写“smokeDetector” 高级配置 产品ID 不填写 产品描述 请根据实际情况填写。
  • 设备初始化 创建设备时,需要写入在注册设备时获取的设备ID、密码,以及1中获取的设备对接信息,注意格式为ssl://域名信息:端口号 或 ssl://IP地址:端口号 1 2 3 4 5 6 // 获取证书路径:加载iot平台的ca证书,进行服务端校验,使用sdk默认的ca.jks即可。 URL resource = MessageSample.class.getClassLoader().getResource("ca.jks"); File file = new File(resource.getPath()); //例如在iot-device-demo文件 MessageSample.java中修改以下参数 IoTDevice device = new IoTDevice("ssl://域名信息:8883", "5e06bfee334dd4f33759f5b3_demo", "mysecret", file); 所有涉及设备ID和密码的文件均需要修改成对应的信息。 建立连接。调用init接口,该接口是阻塞调用,如果建立连接成功会返回0。 1 2 3 if (device.init() != 0) { return; } 如果连接成功就会打印: 1 2023-07-17 17:22:59 INFO MqttConnection:105 - Mqtt client connected. address :ssl://域名信息:8883 创建设备并连接成功后,可以开始使用设备进行通信。调用IoT Device 的getClient接口获取设备客户端,客户端提供了消息、属性、命令等通讯接口。
  • 查看设备详情 在设备列表中,单击具体的设备进入到设备详情页面。 图2 设备-设备详情 页签名 说明 设备信息 查看设备信息:查看设备基本信息,包括设备标识码(nodeId)、设备ID(deviceId),节点类型、设备软固件版本信息等。用户也可通过调用修改设备接口修改设备的基本信息。 设备标识码(nodeId),设备唯一物理标识,如IMEI、MAC地址等,用于设备在接入 物联网平台 时携带该标识信息完成注册鉴权。 设备ID(deviceId),用于唯一标识一个设备,在注册设备时由物联网平台分配获得,是设备在IoT平台上的内部标识,用于设备接入时鉴权,及后续在网络中通过deviceId进行消息传递。 重置密钥:密钥用于设备采用原生MQTT、NB-IoT设备、集成SDK的设备接入物联网平台的鉴权认证。重置密钥后,需要将新的密钥信息更新到设备中,设备重新发起注册时,携带新的密钥进行认证。 物模型数据:查看最近一次设备上报到平台的数据。 云端运行日志 物联网平台支持记录平台与应用侧及平台与设备侧之间的消息交互情况,您可以在控制台查看这些信息,详细操作请参考查看运行日志。 云端下发 您可以在控制台上创建单个设备的命令下发及消息下发(仅MQTT设备支持)任务。详细操作请参考云端数据下发。 设备影子 物联网平台提供设备影子功能,用于缓存设备状态。设备在线时,可以直接获取下发的命令;设备离线时,上线后可以主动获取下发的命令。详细操作请参考设备影子。 消息跟踪 物联网平台支持通过消息跟踪功能进行快速的故障定位和原因分析。详细操作请参考设备消息跟踪。 设备监控 设备运行日志:物联网平台支持接收设备上传的日志,您若打开设备日志开关,可将本地日志流转到 云日志 服务(LTS)(注:此功能仅适用于MQTT设备)。 设备异常检测:物联网平台提供设备异常检测功能。详细操作参考设备异常检测 子设备 物联网平台支持设备直连,也支持设备挂载在网关上,作为网关的子设备,由网关直连。详细操作参考网关与子设备。 标签 物联网平台支持定义不同的标签,并对设备打标签。详细操作请参考标签。 群组 物联网平台支持将设备添加到不同群组中,以便处理对海量设备的批量操作。详细操作请参考群组。
  • 设备状态含义 在控制台上可以查看设备当前状态,如在线、离线、未激活、异常、冻结。用户也可以通过订阅方式获取设备的状态信息。设备状态定义如下: 状态类型 状态 短连接设备(如NB-IoT设备) 长连接设备(MQTT) 连接状态 在线 如果在25小时内设备有上报过数据,设备的状态为“在线”;如果在25小时内未上报过数据,设备的状态会变为“异常”。 设备与平台之间一直连接,无断开。 离线 设备接入平台后,设备在超过49小时未上报数据,平台会将设备置为“离线”状态。 设备与平台之间的连接断开1分钟后(数据自动刷新周期为1分钟),置为“离线”状态。 如果在界面上手动刷新状态,则直接显示“离线”。 异常 设备接入平台后,设备在超过25小时未上报数据,平台会将设备置为“异常”状态。 无此状态。 未激活 已在平台上完成设备注册但真实设备还未接入平台。请根据设备初始化操作完成设备的接入。 已在平台上完成设备注册但真实设备还未接入平台。请根据设备初始化操作完成设备的接入。 管理状态 冻结 用户主动将设备状态置于冻结状态,设备冻结后不能再连接上线,当前仅支持冻结与平台直连的设备。
  • 什么是产品模型 产品模型用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,如颜色、开关等。当定义完一款产品模型后,再进行创建设备时,就可以使用在控制台上定义的产品模型。 产品模型包括产品信息和服务能力: 产品信息 描述一款设备的基本信息,包括设备类型、协议类型。 例如:设备类型为“WaterMeter”,协议类型为“CoAP”。 服务能力 描述设备具备的业务能力。将设备业务能力拆分成若干个服务后,再定义每个服务具备的属性、命令以及命令的参数。 以水表为例,水表具有多种能力,如上报水流、告警、电量、连接等各种数据,并且能够接受服务器下发的各种命令。产品模型文件在描述水表的能力时,可以将水表的能力划分五个服务,每个服务都需要定义各自的上报属性或命令。说明如下: 服务类型 描述 基础(WaterMeterBasic) 用于定义水表上报的水流量、水温、水压等参数,如果需要命令控制或修改这些参数,还需要定义命令的参数。 告警(WaterMeterAlarm) 用于定义水表需要上报的各种告警场景的数据,必要的话需要定义命令。 电池(Battery) 定义水表的电压、电流强度等数据。 传输规则(DeliverySchedule) 定义水表的一些传输规则,必要的话需要定义命令。 连接(Connectivity) 定义水表连接参数。 具体定义几个服务是非常灵活的,如上面的例子可以将告警服务拆分成水压告警服务和流量告警服务,也可以将告警服务合入到水表基础服务中。
  • 产品模型开发方法 物联网平台提供了多种开发产品模型的方法,您可以根据自己需求,选择对应的方法开发产品模型。 自定义模型(在线开发):从零自定义构建产品模型。详细参考在线开发产品模型。 上传模型文件(离线开发):将本地写好的产品模型上传到平台。详细请参考离线开发产品模型。 Excel导入:通过导入文件的方式快速开发产品模型。详细请参考Excel导入。 导入库模型(平台预置产品模型):您可以使用平台预置的产品模型,快速完成产品开发。当前平台提供了标准模型和厂商模型。标准模型遵循行业标准的产品模型,适用行业内绝大部分厂商设备,而厂商模型针对设备类型发布的产品模型,适用于用行业内少量厂家设备。您可以根据实际需求选择相应的产品模型。
  • 操作步骤 访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。 单击左侧导航栏“产品”,单击页面左侧的“创建产品”。根据页面提示填写参数,然后单击“确定”,完成产品的创建。 基本信息 所属资源空间 下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 为产品命名。产品名称在相同资源空间有唯一性。长度不超过64,只允许中文、字母、数字、以及_?'#().,&%@!-字符的组合。 协议类型 MQTT:使用MQTT协议接入平台的设备,数据格式可以是二进制也可以是JSON格式,采用二进制时需要部署编解码插件。 LwM2M/CoAP:使用在资源受限(包括存储、功耗等)的NB-IoT设备,数据格式是二进制,需要部署编解码插件才能与物联网平台交互。 HTTPS:HTTPS是基于HTTP协议,通过SSL加密的一种安全通信协议。物联网平台支持HTTPS协议通信。 Modbus:物联网平台支持使用Modbus协议接入,使用Modbus协议的设备接入IoT边缘节点的方式为非直连。直连设备和非直连设备差异说明,请参考这里。 HTTP(TLS加密)、ONVIF、OPC-UA、OPC-DA、Other,TCP,UDP:通过边缘接入。 数据格式 JSON:平台和设备之间的通信协议采用JSON格式。 二进制码流:您需在控制台开发编解码插件,将设备上报的二进制码流数据转换为JSON格式,将平台下发的JSON格式数据解析为二进制码流格式,设备才能与平台进行通信。 所属行业 请根据实际情况选择。 设备类型 请根据实际情况选择。 高级配置 产品ID 定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。 产品描述 产品描述。请根据实际情况填写。 产品创建成功后,您可以单击“更多-删除”删除不再使用的产品。删除产品后,该产品下的产品模型、编解码插件等资源将被清空,请谨慎操作。
  • 约束与限制 使用自定义鉴权功能,要求设备必须使用TLS同时支持SNI(Server Name Indication),SNI中需要携带平台分配的域名。 每个用户默认最多支持10个自定义鉴权的配置。 自定义鉴权的函数最大处理时间为5秒,5秒内函数没返回结果,则认为鉴权失败。 每个用户总鉴权请求的TPS限制参考产品规格说明,自定义鉴权为总鉴权TPS的50%(不包含设备自注册)。 若用户开启了缓存FunctionGraph的鉴权结果,则在相同参数下,函数服务的修改生效时间需在缓存超期后才能生效。 在所有的设备接入鉴权方式中,当满足自定义鉴权条件时(匹配到设备携带的自定义鉴权器名称或用户配置了默认自定义鉴权器),优先采用自定义鉴权方式进行设备接入。
  • 概述 自定义鉴权是指用户可以通过函数服务自定义实现鉴权逻辑,以对接入平台的设备进行身份认证。 在设备接入物联网平台前,用户可以通过应用服务调用控制台配置自定义鉴权信息,然后通过调用函数服务(FunctionGraph)配置自定义鉴权函数。在设备接入物联网平台时,物联网平台会获取设备ID和自定义鉴权函数名称等参数,并向FunctionGraph发起发起鉴权请求,由用户实现鉴权逻辑以完成设备的接入鉴权。
  • 制作调测证书 调测证书,又叫做自签名证书,用于客户端通过HTTPS访问服务端时进行安全认证。在物联网平台的使用中,可用于物联网平台向应用服务器采用HTTPS协议推送数据时,物联网平台认证应用服务器的合法性。本文以Windows环境为例,介绍通过Openssl工具制作调测证书的方法,生成的证书为PEM编码格式的证书,后缀为.cer。 常见的证书存储格式如下表所示。 存储格式 说明 DER 二进制编码,后缀名.der/.cer/.crt PEM BASE 64编码,后缀名.pem/.cer/.crt JKS Java的证书存储格式,后缀名.jks 自签名证书仅用于调测阶段,在商用时,您需要向知名CA机构申请证书,否则可能会带来安全风险。 在浏览器中访问这里,下载并安装OpenSSL工具。 以管理员身份运行cmd命令行窗口。 执行cd c:\openssl\bin(请替换为openssl实际安装路径),进入openssl命令视图。 执行如下命令生成CA根证书私钥文件ca_private.key。 openssl genrsa -passout pass:123456 -aes256 -out ca_private.key 2048 aes256:代表加密算法。 passout pass:代表私钥密码。 2048:代表密钥长度。 执行如下命令使用CA根证书私钥文件生成csr文件ca.csr,用于6生成CA根证书。 openssl req -passin pass:123456 -new -key ca_private.key -out ca.csr -subj "/C=CN/ST=GD/L=SZ/O=Huawei/OU=IoT/CN=CA" 如下信息您可以根据实际情况进行修改。 C:代表国家,填写CN。 ST:地区,如GD。 L:城市,如SZ。 O:组织,如Huawei。 OU:组织单位,如IoT。 CN:Common Name,填写为CA的组织名,如CA。 执行如下命令生成CA根证书ca.cer。 openssl x509 -req -passin pass:123456 -in ca.csr -out ca.cer -signkey ca_private.key -CAcreateserial -days 3650 如下信息您可以根据实际情况进行修改。 passin pass:必须与4中设置的私钥密码保持一致。 days:代表证书有效期。 执行如下命令生成应用服务器端私钥文件。 openssl genrsa -passout pass:123456 -aes256 -out server_private.key 2048 执行如下命令生成应用服务器端csr文件,用于生成服务端证书。 openssl req -passin pass:123456 -new -key server_private.key -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=Huawei/OU=IoT/CN=appserver.iot.com" 如下信息您可以根据实际情况进行修改。 C:代表国家,填写CN。 ST:地区,如GD。 L:城市,如SZ。 O:组织,如Huawei。 OU:组织单位,如IoT。 CN:Common Name,一般填写为应用服务器的域名或IP。 通过CA私钥文件ca_private.key对服务端csr文件server.csr进行签名,生成服务端证书文件server.cer。 openssl x509 -req -passin pass:123456 -in server.csr -out server.cer -sha256 -CA ca.cer -CAkey ca_private.key -CAserial ca.srl -CAcreateserial -days 3650 (可选)如果您需要.crt/.pem后缀的证书,可以根据如下命令进行转换。下面将以server.cer转为为server.crt为例进行说明,需要转换ca.cer证书时,请将命令中的server替换为ca。 openssl x509 -inform PEM -in server.cer -out server.crt 在openssl安装目录的bin文件夹下,获取生成的CA证书(ca.cer/ca.crt/ca.pem)、应用服务器证书(server.cer/server.crt/server.pem)和私钥文件(server_private.key)。其中CA证书用于加载到物联网平台,应用服务器证书和私钥文件用于加载到应用服务器。
  • 概述 订阅推送的示意图如下图所示: 物联网平台采用HTTPS协议向应用服务器进行消息推送时,物联网平台需要校验应用服务器的真实性,需要在物联网平台上加载CA证书,该证书由应用服务器侧提供(调测时可自行制作调测证书,商用时建议更换为商用证书,否则会带来安全风险)。 推送机制:物联网平台向应用服务器推送消息后,如果应用服务器接收消息成功,会向物联网平台返回200 OK响应码。如果应用服务器无响应(或响应时间超过15秒),或者应用服务器向物联网平台返回非200响应码(如500、501、502、503、504等),表示消息推送失败,消息推送失败后该消息将被丢弃。推送失败连续累计达到10次,物联网平台会将该订阅URL的主机地址加入黑名单,在黑名单期间消息将会积压在平台(默认积压最近24小时或1GB数据,若只想保留最新数据可参考数据转发积压策略配置进行配置)。此后每3分钟尝试对黑名单中的订阅URL主机地址进行消息推送,如果推送失败,则继续保持黑名单;如果推送成功,则解除黑名单。解除黑名单后消息将会以最大流控值推送完积压的消息后才会正常推送最新消息(默认流控为800TPS,自定义配置参考数据转发流控策略配置)。
  • 操作步骤 以下示例主要针对平台中创建流转规则配置。通过修改流转规则可以实现不同场景的应用。 访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。在左侧导航栏“规则”中单击“数据转发”,可到数据转发界面。 图2 数据转发-列表 单击“创建规则”按照业务具体填写需要转发的数据参数,填写完成后单击“创建规则”。参数值可参考下图。 图3 新建流转规则-M2M 表1 创建数据转发规则-参数说明 参数说明 规则名称 自定义,如test。长度不超过256,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。 规则描述 自定义,对该规则的描述。 数据来源 转发规则的数据来源,下拉可选择多种数据来源。在使用M2M时,请选择“设备消息”。 触发事件 不同的数据来源有不同的触发事件,若使用M2M,请选择“设备消息上报”。 资源空间 下拉选择所属的资源空间。可以选择所有资源空间,如无对应的资源空间,请先创建资源空间。 数据过滤语句 使用SQL语句可以进行数据筛选,详情可见:SQL语句。图片中在WHERE中填入notify_data.body.topic IN ('/test/M2M'),代表只有Topic为“/test/M2M”的数据进行数据转发。 在创建数据转发规则的第二步,可以添加转发到的目标,包括设置转发后的Topic、缓存时间等。若使用M2M,请将转发目标设置为“设备”,按照业务具体填写参数后单击“确定”。 图4 新建转发目标-转发至设备 表2 设置转发目标-参数说明 参数说明 转发目标 下拉选择转发目标,在设备间消息通信中,请选择为“设备”。 Topic 自定义,长度不超过128个字符,可以以$和/开头,不可以$和/符号结尾;不允许有a-zA-Z0-9() ',-.:=@;_!*'%?+\以外的符号。 ttl 数据缓存时间。当设备不在线时,数据会进行缓存(当ttl为0时不缓存),当设备上线时再进行下发。输入值范围在0~1440(一天)分钟,且值为5的倍数。 启动规则。在创建数据转发规则的第三步,单击页面中央的“启动规则”,完成规则设置。 图5 启动规则-转发至设备
  • 使用流程 以下流程主要以设备间一对一为例: 图1 M2M使用流程 创建流转规则,设置转发Topic:在控制台界面创建M2M流转规则并设置转发Topic。 策略配置:在控制台界面进行策略配置。通过策略配置允许发送、接收数据的设备进行发布及订阅。 设备A、B鉴权:设备发起连接鉴权(MQTT设备),鉴权参数填写请参考:设备连接鉴权。 设备B订阅Topic:设备对云服务端进行主题订阅。设备B订阅的Topic为创建流转规则中设置的Topic。若订阅成功,平台返回订阅成功ACK。 设备A数据上报:设备对云服务端进行主题发布。若发布成功,平台返回发布成功ACK。 设备B收到数据:若转发成功,设备B将收到设备A发送的数据。
  • 创建资源空间 用户首次开通设备接入服务时,物联网平台自动为用户创建了一个默认资源空间,“默认资源空间”每个实例仅有一个,不允许删除。 您可以基于默认资源空间创建产品,注册设备等,也可以参考如下步骤创建新的资源空间。 图1 资源空间-资源空间列表 如果您是老用户,即2020年04月27日00:00前开通的设备接入服务,平台设置默认资源空间的规则请参考设置默认资源空间的规则。 访问设备接入服务,单击“管理控制台”进入设备接入控制台。 单击左侧导航栏“IoTDA实例”,选择您的实例,单击实例卡片进入实例。 在左侧导航栏选择“资源空间”,单击“新建资源空间”,在弹出的页面中,填写参数后,单击“确定”。 资源空间名称必须为账号下唯一。 图2 资源空间-创建资源空间
  • 约束与限制 使用自定义鉴权功能,要求设备必须使用TLS同时支持SNI(Server Name Indication),SNI中需要携带平台分配的域名。 默认每个用户最多支持5个自定义鉴权模板,只能启用一个激活状态的模板。 鉴权模板函数嵌套最大深度为5层。 模板内容体最大长度不能超过4000字符,且不能包含中文字符。 设备为密钥认证类型时,模板密码函数必须包含设备原始密钥参数(iotda::device::secret)。 使用模板鉴权时,鉴权参数username不能与自定义函数鉴权username格式重叠,否则会使用自定义函数鉴权,比如: {deviceId}|authorizer-name={authorizer-name}|xxx 自定义模板鉴权优先级高于平台默认鉴权,即激活自定义鉴权模板后设备就会使用模板鉴权,不会再使用平台默认鉴权方式。
  • 制作设备CA调测证书 本文以Windows环境为例,介绍通过Openssl工具制作调测证书的方法,生成的证书为PEM编码格式的证书。 在浏览器中访问这里,下载并进行安装OpenSSL工具。 以管理员身份运行cmd命令行窗口。 执行cd c:\openssl\bin(请替换为openssl实际安装路径),进入openssl命令视图。 执行以下命令生成生成密钥对。 openssl genrsa -out rootCA.key 2048 执行以下命令,使用密钥对中的私有密钥生成 CA 证书。 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem 系统提示您输入如下信息,所有参数可以自定义。 Country Name (2 letter code) [AU]:国家,如CN。 State or Province Name (full name) []: 省份,如GD。 Locality Name (for example, city) []:城市,如SZ。 Organization Name (for example, company) []:组织,如Huawei。 Organizational Unit Name (for example, section) []:组织单位,如IoT。 Common Name (e.g. server FQDN or YOUR name) []: 名称,如zhangsan。 Email Address []:邮箱地址,如1234567@163.com。 在openssl安装目录的bin文件夹下,获取生成的CA证书(rootCA.pem)。
  • 准备事项 在使用全力防基础版之前,请先 注册华为账号 并开通华为云。具体操作详见注册华为账号并开通华为云、实名认证。 如果您已开通华为云并进行实名认证,请忽略此步骤。 请保证账户有足够的资金,防止购买全力防基础版失败。具体操作请参见账户充值。 请确保已为账号赋予相关权限。具体操作请参见创建用户并授权使用CNAD。 在华北-北京四区域参考购买弹性云服务器创建一台ECS服务器并绑定弹性公网IP。 如果用户已有符合要求的ECS服务器,可重复使用,无需再次创建。
  • 操作流程 本章节介绍如何快速购买全力防高级版并开启防护,流程如图1所示。 图1 操作流程 操作步骤 说明 准备事项 注册华为账号、开通华为云、为账户充值、授予DDoS原生高级防护权限、准备ECS服务器。 步骤一:购买全力防高级版 在指定区域购买全力防高级版。 步骤二:购买专属EIP并绑定ECS 在指定区域购买DDoS防护专属EIP并绑定到ECS服务器。 步骤三:创建防护策略 为防护对象创建并配置防护策略。 步骤四:添加防护对象 将防护对象添加到全力防高级版实例。
  • 计费周期和规则 按小时计费 需要至少每小时上报一次话单数据,且最好在消费时间下一个小时的0-15分钟内完成上报,譬如,用户消费时间在13:25,最好在14:00-14:15内上报,这样能及时给用户扣费,否则就会出现扣费延迟,如果无法实现实时上报,需要在2小时完成上报 按天计费 推荐每小时将已经明确的用量话单上报到云商店,如果必须每天汇总上报一次,需要保证必须在次日的00:00-00:15内完成上报,最大不能超过01:00,否则用户的扣费会延迟到下一天
  • 前提条件 发布SaaS类产品之前,您须将您的SaaS类产品部署在华为云国际站的基础设施上,华为云云商店不接受部署在非华为云国际站的基础设施上的SaaS类产品发布申请。 发布SaaS类产品之前,您需要遵循SaaS类产品接入指南V2.0进行接口开发调测,以供华为云云商店调用。 发布SaaS类产品之前,请先进行应用接入调试,华为云云商店提供了应用接入调试功能,务必保证对应场景的生产接口都能调试通过,系统会针对调测通过的用例进行保存用于商品发布、修改及审核上架时接口校验,以保证用户购买您的SaaS商品后,能够正常开通。 发布SaaS类商品如涉及为用户提供网站服务(包括业务前台,管理后台portal等),您需确保您的应用不存在恶意内容,高危漏洞等。请您根据SaaS类商品安全 漏洞扫描 操作指导及安全规范的指引,对应用完成安全漏洞扫描自测试 ,商品发布时关联相应的扫描测试报告一起提交审核。 2024年5月1日后新入驻的商家或者上架新商品,统一按《SaaS类商品接入指南 V2.0》的规范进行接口开发和调测。 SaaS 2.0接口协议提供更高的安全性、可靠性、易用性。
  • 结算流程 每月7日(非工作日自动顺延至下一个工作日处理),华为云会对上个月内满足出账条件(详见出账结算条件)的订单生成对账单,账单生成后运营经理将在3个工作日内审核并发送给商家。 请仔细阅读结算规则,如对账单数据有异议,可提交工单反馈问题。如华为云核实数据有误,差额部分将在下一个结算周期内调账处理。 序号 流程名称 流程角色 时长 说明 1 历史交易出账 华为云 1个工作日 每月7号(如遇节假日则顺延至下一工作日) 2 审核并发送账单给服务商 华为云 3个工作日 通知发送到服务商的华为云账号所绑定的邮箱 3 确认对账单 服务商 - 华为云云商店卖家中心进行对账。 (自北京时间 2024 年 12 月 24 日 00:00 起,后续新发送给您的各类账单将统一取消“商家确认对账单”环节。) 4 发起会签付款流程 华为云 6个工作日 - 5 会签完成通知服务商开具发票 华为云 1个工作日 系统下发邮件通知 6 开具发票并邮寄或发送给华为云 服务商 - 服务商根据当地税法开具相应税率的发票并发送至指定邮箱或寄送到指定接收地址,详见《发票管理》 7 验收发票及付款 华为云 8个工作日 接收并验证发票无误后,华为云将在第8个工作日付款;如发票有误,工作人员将回复商家邮箱告知,商家需开重新开具发票。 父主题: 结算管理
  • 前提条件 发布SaaS类商品之前,您须将您的SaaS类商品部署在华为云IAAS基础设施资源(华为云IAAS)上,华为云云商店不接受部署在非华为云IAAS上的SaaS类商品发布申请。 SaaS类商品的生产接口地址需要部署在华为云上,且为域名地址。 发布SaaS类商品如涉及为用户提供网站服务(包括业务前台,管理后台portal等),您需确保您的应用不存在恶意内容,高危漏洞等。商家需按照云商店商品安全审核标准3.0自检SaaS网站并且完成通过SaaS安全扫描。 发布SaaS类商品前,您需要进行接口开发,以供华为云云商店调用。具体接入操作请参见:手册指导:SaaS类商品接入指南 V2.0;视频指导:通用SaaS类商品接入常见问题说明、联营SaaS类商品接入指导。
共100000条