深度开发智慧路灯应用
引导式阅读
Others
深度开发智慧路灯应用
作者
HDC.Cloud
上架时间
2020-02-21 16:51:05

深度开发智慧路灯应用

您在体验过程中有任何疑问,都可以在此留言反馈>>问题反馈

1. 介绍

背景介绍

智慧路灯是城市智能化道路上重要一环,智慧路灯的实施具有节约公共照明能耗、减少人工投入和因照明引起的交通事故等多种社会意义。路灯也是大家在日常生活中可以强烈感知到的公共设施,更易理解其智能化的场景。
基于物联网解决方案,我们可以实现路灯的远程监控与控制,实现远程控制、按需照明等功能,降低路灯运行成本。

您将建立什么

在本次Codelab中,我们基于华为IoT平台设备接入管理服务、弹性云服务器、软件开发平台等服务构建一个智慧路灯应用。该应用可通过两种方案获取数据,用于显示光强和路灯状态,并支持通过设备接入管理服务下发开关灯命令。

您将会学到什么

  • 理解物联网平台如何利用设备数据。

  • 掌握设备上报数据到物联网平台的原理和方法。

  • 如何开发应用控制物联网设备。

您需要什么

  • 已实名认证的华为云账号

  • 下载智慧路灯实验工具包(点此下载),解压获取智慧路灯产品模型(SmartStreetLight.zip)和设备接入模拟器(HubSimulator.jar)

2. 资源准备

进入控制台

  1. 打开浏览器,输入华为云网站地址https://www.huaweicloud.com/,在上方菜单栏中单击“登录”。

  2. 在账号登录界面输入账户名、密码,单击“登录”。

  3. 进入华为云控制台,更改当前区域为“华北-北京四”。以保证后续实验都在该区域下进行。

安装并配置JDK1.8

  1. 下载JDK 1.8版本,如“jdk-8u161-windows-x64.exe”,并双击进行安装。官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  2. 以下以WIN7为例说明如何配置环境变量。右键单击“计算机”,选择“属性”。

  3. 单击“高级系统设置”。

  4. 单击“环境变量”。

  5. 配置系统变量。需配置3个变量:JAVA_HOME、Path、CLASSPATH(不区分大小写)。若变量名已经存在,则单击“编辑”;若变量名不存在,则单击“新建”。一般Path变量存在,JAVA_HOME变量和CLASSPATH变量需要新增。

  6. JAVA_HOME指明JDK安装路径,配置示例:C:\ProgramFiles\Java\jdk1.8.0_45。此路径下包括lib,bin等文件夹。

  7. Path变量使系统可以在任何路径下识别Java命令。如果Path变量已经存在,则需在变量值最后添加路径,配置示例:;C:\Program Files\Java\jdk1.8.0_45\bin;C:\Program Files\Java\jdk1.8.0_45\jre\bin。
    两个路径之间需要使用“;”分割,分号是英文半角。

    CLASSPATH为Java加载类(class或lib)路径,只有配置CLASSPATH,Java命令才能识别。配置示例:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(路径以“.”开始,表示当前路径)。

  8. 重启系统,使环境变量生效。

  9. 选择“开始 > 运行”,输入“cmd”,执行命令:java -version、java、javac。如果命令可以执行,则说明环境变量配置成功。

创建虚拟私有云VPC

  1. 登录华为云控制台,在“所有服务”下单击“网络>虚拟私有云”,进入网络控制台,点击“创建虚拟私有云”进入创建界面。

    基本信息:
    当前区域:华北-北京四
    名称:保持默认
    网段:192.168.0.0/16

    子网配置:
    可用分区:可用区1
    子网名称:保持默认
    子网网段:192.168.0.0/24
    高级配置:默认配置

  2. 单击“立即创建”。

  3. 单击“虚拟私有云”界面,进入自己创建的虚拟私有云界面。可查看到已创建好的虚拟私有云。

3. 创建弹性云服务器

  1. 登录华为云官方网站,访问弹性云服务器

  2. 单击“立即购买”,购买弹性云服务器,以下配置仅为样例。

    基础配置

    计费模式:按需计费
    区域:华北-北京四
    可用区:随机分配
    CPU架构:X86计算
    规格:为降低实验成本,可选择通用入门型的t6.small.1(若售馨也可选择更高规格)
    镜像:选择公共镜像的Ubuntu 16.04版本,去勾选主机安全基础版
    系统盘:保持默认

    网络配置

    网络:选择已创建的VPC和子网,自动分配IP地址
    安全组:保持默认
    带宽:为降低实验成本,可降低至1Mbit/s
    其余参数保持默认

    高级配置

    设置远程登录ECS用的密码,其余参数保持默认。

    确认配置后点击立即购买。

  3. 主机创建完成后,进行主机授信配置。登录弹性云服务器控制台,单击主机名,进入主机详情页面,选择“安全组”页签。

    单击“更改安全组规则”,然后做如下设置:
    SSH协议端口(22)口的入方向TCP协议默认开放,无需修改。
    将智慧路灯应用端口(8080)的入方向放开限制,用于后续访问智慧路灯应用。

    出方向默认不做限制,无需修改。

  4. 远程登录到ECS的linux系统内。

  5. 回车,首先输入账号“root”,然后输入购买时自定义的密码,登录root账号。

  6. 执行sudo ufw enable打开ufw服务。然后执行sudo ufw allow 22/tcp和sudo ufw allow 8080/tcp打开22和8080端口。

4. 部署智慧路灯应用

  1. 登录华为云官方网站,访问软件开发平台

  2. 单击“立即使用”进入软件开发平台控制台。

  3. 单击页面右上角的“新建项目”。

  4. 在“新建项目”窗口中,项目模板选择“Scrum”,填写项目名称(例如“QuickStart”),点击“确定”。

  5. 进入“代码 > 代码托管”页面,选择“按模版新建”。

  6. 搜索“IoT_Streetlight_Demo”,点击选中,然后点击“下一步”。

  7. 完成各项参数配置后,点击“确定”。

    请代码仓库名称:自定义,例如“IoT_StreetLight_Demo”
    选择.gitignore:Java
    其余参数:保持默认即可

  8. 选择“构建&发布 > 编译构建”,然后单击“新建任务”。

  9. 在“新建编译构建任务 > 基本信息”中,任务名称自定义,可以保持默认,单击“下一步”。

  10. 在“新建编译构建任务 > 选择源代码”中,配置各项参数,单击“下一步”。

    源码源:DevCloud
    源码仓库:选择之前创建的源码仓库
    分支:master

  11. 在“新建编译构建任务 > 选择构建模板”中,选择“Maven”,单击“确定”。

  12. 在“构建步骤 ”中,直接点击“新建并执行”。

  13. 等待工程完成构建,查看并记录jar包的名称(通常为“huawei-0.0.1-SNAPSHOT.jar”)。

  14. 在工具栏选择“部署”,单击“新建任务”。

  15. 在“新建部署任务 > 基本信息”中,配置任务名称,可保持默认,单击“下一步”。

  16. 在“新建部署任务 > 选择部署模板”中,选择“SpringBoot应用部署”,单击“确定”。

  17. 在“部署步骤 > 安装JDK服务”中,单击“主机组”右侧的“新建”。

  18. 在弹出的新窗口中,设置主机组基本信息,单击“保存”。

    主机组名称:自定义,如“iot”
    操作系统:选择“linux”

  19. 在新创建的主机组中,单击“添加主机”。

  20. 在“添加主机”窗口中,配置主机信息并勾选同意隐私政策说明,然后单击“添加”。

    主机名:自定义,可与创建弹性云服务器时设置的云服务器名称保持一致
    IP:填写为创建弹性云服务器后分配的弹性IP,可在弹性云服务器控制台查看
    授信方式:密码授信
    用户名:填写为“root”
    密码:填写为创建弹性云服务器时设置的登录密码
    其余参数保持默认

  21. 返回“部署步骤 > 安装JDK服务”页面,配置各项参数:

    步骤显示名称:保持默认值
    主机组:选择之前创建的主机组
    jdk版本:选择1.8.0版本。

  22. 在“部署步骤 > 停止SpringBoot服务” 中,去勾选“控制选项”中的“启用”。

  23. 在“部署步骤 > 选择部署来源”中,配置各项参数:

    步骤显示名称:保持默认值
    选择源类型:构建任务
    主机组:选择之前创建的主机组
    请选择构建任务:选择之前执行完成的构建任务
    构建序号:保持默认值
    下载到主机的部署目录:自定义,例如“/home”

  24. 在“部署步骤 > 启动SpringBoot服务”中,配置各项参数:

    步骤显示名称:保持默认值
    主机组:选择之前创建的主机组
    服务操作类型:保持默认值
    服务的绝对路径:填写为部署目录加构建包的名称,例如“/home/huawei-0.0.1-SNAPSHOT.jar”
    其余参数保持默认

  25. 在“部署步骤”中删除“URL健康测试”。

  26. 在“参数设置”中,勾选全部参数,点击“批量删除”,本实验中不使用这些参数。

  27. 点击保存并执行,等待部署成功。

5. 创建数据接入通道(可选)

若使用通过DIS转发设备数据的方案,需要进行以下操作。

  1. 登录华为云官方网站,访问数据接入服务

  2. 单击“立即购买”,购买接入通道,以下配置仅为样例。

    区域:保持默认。
    通道名称:自定义,可保持默认。
    通道类型:保持默认。
    分区数量:1。
    生命周期:1。
    源数据类型:JSON。
    自动扩缩容:保持默认。
    Schema开关:保持默认。
    高级配置:保持默认。

6. 导入产品模型

  1. 登录华为云官方网站,访问设备接入管理服务

  2. 开通服务后,进入控制台。

  3. 从左侧导航打开“产品”页面,单击页面右上角的“创建产品”。

  4. 创建智慧路灯产品。

    所属资源空间:保持默认。
    产品名称:自定义,如“StreetLight”。
    协议类型:选择MQTT。
    数据格式:选择JSON。
    厂商名称:自定义,如“Huawei_IoT”。
    选择模型:不勾选。
    所属行业:选择智慧城市
    设备类型:自定义,如“StreetLight”。

  5. 产品创建成功后,自动跳转至产品详情界面,单击“导入模型文件”。

  6. 上传产品模型(SmartStreetLight.zip)。

  7. 导入成功后,记录产品ID,后续智慧路灯应用需要填写该ID。

7. 创建数据转发规则(可选)

若使用通过DIS转发设备数据的方案,需要进行以下操作。

  1. 通过左侧导航进入“规则”页面,单击“云服务对接配置”,按照页面提示配置与华为云对接。

  2. 完成对接配置后,单击“创建规则”,选择“数据转发规则”,填写规则内容,填写完成后单击“立即创建”。

    规则名称:自定义,如“to_DIS”。
    数据类型/过滤产品:保持默认。
    转发至服务:数据接入服务
    区域:cn-north-4
    通道:选择已创建的通道名称。

8. 配置智慧路灯应用

  1. 打开浏览器,访问“http://{IP}:8080/index.html”,其中{IP}替换为部署了应用的弹性云服务器的弹性IP。

  2. 在弹出的“参数设置”窗口中设置各项参数。

    首先需要选择数据来源。不管选择哪种数据来源,后续的验证操作都相同,可随意选择。
    若选择“数据接入服务”,需要填写通道信息。

    访问密钥ID/秘密访问密钥:填写为华为云账号的访问密钥,点此查看获取方式
    通道名称:填写为创建数据接入通道时设置的通道名称。

    若选择“订阅推送”,需要填写订阅信息。

    本机IP:填写为该ECS的弹性IP。

    不管选择哪种数据来源,都需要填写API凭证和产品信息。

    APPID:填写为物联网平台资源空间 的APPID,可在设备接入管理服务控制台“资源空间”页面查看,存在多个资源空间时选择你创建产品并注册设备的那个资源空间。
    账号名/IAM用户名:填写为华为云账号的账号名和IAM用户名,可以在“我的凭证”页面查看。点此查看获取方式
    IAM用户密码:填写为华为云账号的登录密码。
    项目ID:填写为华为云账号在“华北-北京四”区域的项目ID,可以在“我的凭证”页面查看。
    产品ID:填写为物联网平台上创建的产品的产品ID。

    输入后确定,等待设置成功。

  3. 填写设备标识(可自定义填写一串字母和数字的字符串),单击“注册设备”。

    注册成功后记录返回的设备ID和密钥。

9. 结果验证

  1. 双击启动设备接入模拟器(HubSimulator.jar),切换到MQTT设备模拟器页签。

  2. 输入服务IP,设备ID,设备密钥,单击“建立连接”。

    服务IP:进入设备接入管理服务控制台查看,填写为MQTTS接入信息的域名。
    设备ID:配置智慧路灯应用中注册设备成功后返回的设备ID。
    设备密钥:配置智慧路灯应用中注册设备成功后返回的密钥。

    **注:**若无法建立连接,请在系统开始菜单输入“cmd”打开命令行,输入“ping 服务IP:服务端口”查看您的主机是否能和华为云物联网平台正常通信,若无法正常通信,请更换主机的网络环境。

  3. 建立连接成功后,右侧日志显示MQTT服务连接成功。

  4. “发送消息”的Topic修改为“$oc/devices/{device_id}/sys/properties/report”其中{device_id}需要替换成实际设备ID),在模拟器下方区域填写上报数据内容后单击“发送消息”。

    上报数据的样例如下:

     {"services": [{
     "service_id": "Sensor",   
     "properties": { 
     "luminance": "200", 
     "light\_state": "OFF"}}]}
    
  5. 发送消息成功后,右侧日志显示信息推送成功。

  6. 查看应用界面,应该显示“环境亮度”为200LUX,“灯状态”为关。

  7. 使用模拟器订阅Topic:“$oc/devices/{device_id}/sys/commands/#”(其中{device_id}需要替换成实际设备ID)。

  8. 修改“发送消息”的Topic为“$oc/devices/{device_id}/sys/commands/response/request_id=”(其中{device_id}需要替换成实际设备ID),内容填写如下数据,填写完成后不要发送消息。

     {"result_code": 0,
     "response_name": "COMMAND_RESPONSE",
     "paras": {"result": "success"}}
    
  9. “路灯控制”选择“终端联控模式”,开关选择“开”后点击“设置”。

  10. 查看模拟器日志区域,应该会收到开灯命令(payload的值经过base64加密,解密后即可得到命令内容)。

    **注:**应用设计为直到设备上报的灯光状态变化为止,每五秒下发一次命令,所以此时会收到多条开灯命令,以下相同场景不再赘述。

  11. 复制收到的命令的Topic中的request_id的值,粘贴到之前设置的“发送消息”的Topic的最后,然后单击“发送消息”。
    **注:**请在收到命令20秒内完成该步骤,否则命令会超时。

  12. “发送消息”的Topic修改为“$oc/devices/{device_id}/sys/properties/report”其中{device_id}需要替换成实际设备ID),上报如下数据。

    {"services": [{   
    "service_id": "Sensor",  
    "properties": { 
    "luminance": "210",  
    "light\_state": "ON" 
    }}]}
    
  13. 查看应用界面,应该显示“环境亮度”为210LUX,“灯状态”为开。

以下步骤为可选步骤,用于体验进阶操作

  1. 修改“发送消息”的Topic为“$oc/devices/{device_id}/sys/commands/response/request_id=”(其中{device_id}需要替换成实际设备ID),内容填写如下数据,填写完成后不要发送消息。

    {"result_code": 0,
    "response_name": "COMMAND_RESPONSE",
    "paras": {"result": "success"}}
    
  2. “路灯控制”选择“分段定时模式”,设置关灯时间段为当前时间到五分钟后。

  3. 查看模拟器日志区域,应该会收到一条关灯命令。

  4. 复制收到的命令的Topic中的request_id的值,粘贴到之前设置的“发送消息”的Topic的最后,然后单击“发送消息”。
    **注:**请在收到命令20秒内完成该步骤,否则命令会超时。

  5. “发送消息”的Topic修改为“$oc/devices/{device_id}/sys/properties/report”其中{device_id}需要替换成实际设备ID),上报一条light_state为OFF的数据。

    {"services": [{   
    "service_id": "Sensor",  
    "properties": {  
    "luminance": "90",  
    "light\_state": "OFF" 
    }}]}
    
  6. 修改“发送消息”的Topic为“$oc/devices/{device_id}/sys/commands/response/request_id=”(其中{device_id}需要替换成实际设备ID),内容填写如下数据,填写完成后不要发送消息。

    {"result_code": 0,
    "response_name": "COMMAND_RESPONSE",
    "paras": {"result": "success"}}
    
  7. “路灯控制”选择“自动调光模式”,设置阈值为100。

  8. 再查看模拟器日志区域,应该会收到一条开灯命令。

  9. 复制收到的命令的Topic中的request_id的值,粘贴到之前设置的“发送消息”的Topic的最后,然后单击“发送消息”。
    **注:**请在收到命令20秒内完成该步骤,否则命令会超时。

  10. “发送消息”的Topic修改为“$oc/devices/{device_id}/sys/properties/report”其中{device_id}需要替换成实际设备ID),上报如下数据。

    {"services": [{   
    "service_id": "Sensor",  
    "properties": { 
    "luminance": "150",   
    "light\_state": "ON"
    }}]}
    

10. 恭喜您

祝贺您,您已经完成了智慧路灯应用的开发,并学到了:

  • 理解物联网平台如何利用设备数据。

  • 掌握设备上报数据到物联网平台的原理和方法。

  • 如何开发应用控制物联网设备。

完成实验后请自行释放付费资源,避免持续扣费。

11. 参与互动赢好礼

欢迎体验华为云IoT CodeLabs,点击下方按钮可返回华为云IoT CodeLabs论坛帖参与活动,有机会赢取荣耀手环、移动电源等大奖哦! 闯关有礼