LoRaWAN智能厕所

本实践推荐使用阿里云物联网平台一站式完成应用开发,物联网平台可直接调用Link WAN网管服务。本文将使用物联网平台搭建一个基于LoRaWAN连接的智能厕所Demo。

背景信息

  • 应用概述

    为了增加厕所使用效率,减少被味道“熏陶”的等待时间,同时也为了增加厕所的清洁效率,可以做一个非侵入式的智能厕所改造方案。通过红外热释电检测每个坑位有没有人,在Web或App上实时显示,方便如厕人员查询,并且可以检测厕所的臭味,达到阈值时通知清洁工进行清扫。

  • 物料清单

    • 慧联无限G200 LoRaWAN网关

    • 慧联无限LoRa红外传感器

    • 一台能联网的电脑

步骤一:配置LoRaWAN网关-自建LoRaWAN网络

  1. 从阿里云IoT市场购买网关并自己组成网络。

    以下是本实践使用的网关:小网关G200小网关G200_1

  2. 插上网线与电源,登录物联网络管理平台控制台注册网关。

    1. 在左侧导航栏上,选择网络管理 > 网关管理

    2. 网关列表页签,单击添加网关

    3. 配置信息以激活网关。

      参数项

      参数

      说明

      基本信息

      名称

      填写添加的网关名称,支持中文、英文字母、数字和下划线,长度限制4~30个字符,一个中文算两个字符。

      PIN Code

      Pin Code为6位数字,通常会贴在网关标签上。

      通信模式

      通信模式分为全双工半双工两种,此处以选择半双工为例。

      GwEUI

      请在网关标签上查看该参数。

      频段

      支持以下三种频段的选择:

      • CN470 同频

      • CN470 异频

      • AS923 同频

      此处以选择CN470 异频为例。

      网关描述

      选填,可以填写所添加网关的备注信息。网关描述不超过100字符。

      位置信息

      所在区域

      请选择网关的所在区域。

      说明

      需手动选择网关位置,因G200不带GPS模块,需要手动填写,之后会显示在地图上。带GPS网关的,上报数据后会自动刷新位置。

      位置详情

      填写网关的具体的位置信息,您也可于右侧地图单击做定位。

    G200回传网默认是DHCP上网配置,如果您是固定IP或PPPoE,需依照实际环境调整,相关操作请参考G200网关手册。配置成功后,网关列表下将显示在线状态。

  3. 创建自己的网络凭证,然后把网络分配给自己账号使用。分配后通过入网凭证来取得网络使用权利。

    1. 在左侧导航栏上,选择网络管理 > 入网开通

    2. 入网开通页面,单击添加专用凭证

    3. 在下图中配置参数,配置完成后单击确认即可创建一个凭证。

      参数

      说明

      凭证名称

      填写添加的凭证的名称,支持中文、英文字母、数字和下划线,长度限制4~30个字符,一个中文算两个字符。

      频段

      支持以下三种频段的选择:

      • CN470 同频

      • CN470 异频

      • AS923 同频

      此处以选择CN470 异频为例。

      Class

      支持以下三种类的选择:

      • A

      • B

      • C

      此处以选择A为例,按需发送。

      RxDelay

      选择Class A可配置 RXDelay,用于配置上行后的接收窗口延迟时间,默认1s,可选范围在1~15s。

    4. 单击该凭证操作所在列的凭证授权,将添加好的凭证授权给自己,如下图所示。

      将凭证授权给自己
    授权成功之后,新凭证会在出现在凭证清单里,如果是别人将凭证授权给您,接受后也会在此清单显示。

步骤二:拆封LoRaWAN硬件

从网上购买来的认证过的LoRa传感器,拆出来的时候可以看到后面附了一个16位码的贴纸,这个是节点的DevEUI。同时还会有一个6位的PINCODE字段。

按照说明书,默认是5分钟模式,即收到一次警报之后,5分钟之内收到的警报不会再上传。这跟厕所的使用场景不一致,我们需要调成测试模式,即每次收到的警报都会上传。

操作方法:把背部的壳子掰开(不需要螺丝刀)后,把跳针的位置调整到ON,然后合上盖子,先不拔掉塑料片。

步骤三:在物联网平台上配置LoRa节点

  1. 登录物联网平台控制台

  2. 在左侧导航栏上选择设备管理产品,单击创建产品

  3. 填写产品信息,然后单击保存

    参数

    说明

    产品名称

    测试设备(可自定义)。

    所属品类

    选择自定义品类

    节点类型

    选择直连设备

    连网方式

    选择LoRaWAN

    入网凭证

    从清单里选择,或单击添加专用凭证

    说明

    请确认已经在Link WAN取得入网凭证。

    数据格式

    透传/自定义。

    产品描述

    非必填,用于描述产品的相关信息。

    如首次使用Link WAN需授权数据权限,请单击同意授权

  4. 创建完毕后,单击管理设备前往管理。

    管理设备
  5. 单击添加设备,即可完成LoRa设备接入。

  6. 输入16位DevEUI作为DeviceName(需小写)。

步骤四:查看上下行数据及数据日志

  1. 回到物联网络管理平台控制台,可以查看LoRaWAN链路层数据通信上下行。

    1. 在左侧导航栏上选择节点管理 > 节点分组

      说明

      此节点已授权给物联网平台接入使用,这里只提供查看功能。

    2. 单击该节点对应操作栏下的查看,选择上行数据页签,查看上行数据。

      查看上行数据

  2. 拔掉LoRa传感器上的塑料片,让传感器上电。

  3. 查看物联网平台上收到的上行日志。

    物联网平台控制台左侧导航栏上选择监控运维日志服务,在上行消息分析页签查看日志。

    此时设备也收到了数据日志,即表示所有通讯链路都打通,下图为原始的上行日志。

    原始上行日志

步骤五:解析设备上传的信息

从传感器的说明文件可以得知,传感器上报的是二进制数据。我们如何把二进制数据转化为可以理解的属性名称呢?具体请看下文的操作步骤。

下图是厂家提供的传感器的二进制配置文件。

传感器二进制配置信息
  1. 定义物模型。

    对于该型号的传感器,020100中的第一个BYTE02表示协议,01对红外传感器表示有人,00表示传感器状态正常。我们首先需要在产品里定义室内人体探测开关传感器属性两个功能,用于记录这两个属性。

    1. 物联网平台控制台左侧导航栏上选择设备管理产品,单击产品对应的查看,进入产品详情页。

    2. 选择功能定义页签,单击编辑草稿 > 添加自定义功能

    3. 添加自定义功能弹框中,功能类型选择属性,添加以下两个属性。

      • 添加传感器属性传感器属性

      • 添加室内人体探测开关室内人体探测开关

      属性添加完成后,如下图所示。

      两个属性参数配置
      说明

      读写类型都选择读写

  2. 使用产品定义里的数据解析,把二进制数据自动转化为ALink-JSON格式,以应对定义物模型中的两个属性。

    说明
    • 数据解析需要产品为开发中状态。如果已经发布请单击右上角撤回发布

    • 数据转化规则,详情请参见:数据解析,这里只提供最后的代码。

    1. 产品详情页,单击数据解析页签。

      数据解析页签
    2. 编辑脚本下方,输入如下的解析脚本,然后单击页面下方的保存

      var COMMAND_REPORT = 02;
      var COMMAND_SET = 01;
      var ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'; //标准ALink JSON格式topic, 设备上传属性数据到云端
      var ALINK_PROP_SET_METHOD = 'thing.service.property.set';
      function rawDataToProtocol(bytes) {
          var uint8Array = new Uint8Array(bytes.length);
          for (var i = 0; i < bytes.length; i++) {
              uint8Array[i] = bytes[i] & 0xff;
          }
          var dataView = new DataView(uint8Array.buffer, 0);
          var jsonMap = new Object();
          var fHead = uint8Array[0]; // 第0个BYTE为上报协议
          if (fHead == COMMAND_REPORT) {
              jsonMap['method'] = ALINK_PROP_REPORT_METHOD; //ALink JSON格式 - 属性上报topic
              jsonMap['version'] = '1.0'; //ALink JSON格式 - 协议版本号固定字段
              jsonMap['id'] = '' + 12345; //ALink JSON格式 - 标示该次请求id值
              var params = {};
              params['IndoorHumanDetectionSwitch'] = uint8Array[1]; //第1个BYTE为传感器读数判断有没有人
              params['SensorProperty'] = uint8Array[2]; //第2个BYTE为传感器本身的状态,对应产品属性中 prop_float
              jsonMap['params'] = params; //ALink JSON格式 - params标准字段
          }
          return jsonMap;
    3. 输入原始数据020100进行调试,可以看到右边解析成功,然后单击页面下方的执行即可让脚本生效。

      脚本生效
      在日志里可以看到二进制的020100已经转为{"SensorProperty":0,"IndoorHumanDetectionSwitch":1},表示已完成设备接入。日志服务_二进制转化成功

步骤六:在IoT Studio上配置智能厕所看板

IoT Studio(是阿里云针对物联网场景提供的生产力工具,可覆盖各个物联网行业核心应用场景,解决物联网开发领域开发链路长、技术栈复杂、协同成本高、方案移植困难的问题。

  1. 登录物联网应用开发控制台

  2. 在IoT Studio上新建一个项目,以项目维度管理LoRaWAN智能厕所应用。

  3. 创建项目之后可以看到右边栏多了一项SmartToilet,单击查看进入项目详情。然后在项目概览页单击右上角导入产品,把刚才创建的产品导入到项目内。

  4. 在左侧栏上选择推荐Web可视化开发,单击新建应用进入Web可视化开发工作台,然后选择空白模板进行新建。

  5. 进入编辑中,可以改变背景色,添加标题文字等。对最重要的厕所占位状态,通过“有人”、“没人”的指示灯来表示,因此把指示灯组件放入画布中,并配置数据源。

  6. 配置数据源时,请选择产品、关联的设备以及关联的布尔型属性。单击验证数据格式获得通过,之后单击确定完成配置。配置之后可以通过上传图片等修改指示灯开关状态的样式。

  7. 单击预览,完成整个Web应用的链路调试。

  8. 假设有7个坑位,只需要重复上述步骤即可(可以使用Excel批量添加设备)。另外GUI配置的部分与之前的版本操作一致,在此不再赘述。最终效果如下图所示。

(可选)在IoT Studio上配置智能厕所状态推送与转储

服务开发(原服务编排)可以通过可视化拖拽的方式快速完成所需业务逻辑的设计,例如,设备联动、可视化搭建数据联动、云服务连接、API 生成、数据处理与转储、生成App的后端服务。在本文中,我们要使用服务开发完成智能厕所坑位状态的推送,以及把厕所使用状况转储到表格存储Table Store上。

  1. 在IoT Studio上新建一个服务。

    从项目概览页选择推荐服务开发,单击新建服务即可进入服务开发工作台的新建页面,选择空白模板进行新建。

  2. 把厕所的占用时间推送到钉钉机器人上。

    首先配置一个设备触发节点作为输入,选择之前创建好的产品,设备选择选择所有设备,以监听所有设备上报的信息。上报类型选择属性上报,最后配置一个钉钉机器人节点作为消息推送节点。

  3. 在要推送的钉钉群内添加机器人,获得webhook,如下图所示。

  4. 配置webhook以后可以配置推送的信息。钉钉机器人节点目前支持多种消息推送类型,并且支持动态调用设备数据。

    框内配置项如下:

    {
      "msgtype": "text", 
      "text": {
        "content":"在{{query.props.IndoorHumanDetectionSwitch.time}}时候有{{query.props.IndoorHumanDetectionSwitch.value}}人进坑!"
     }, 
      "at": {
          "isAtAll": true
      }
    }
                            
  5. 配置完成之后,单击部署对服务进行部署。然后单击启动让服务生效。

    如果设备已经上线,则可以直接看到机器人的消息推送,实现厕所使用状态的实时推送了,如下图所示。
  6. 如果需要把厕所的使用状况使用TableStore,云数据库MySQL等云产品存储起来,可以使用存储节点。

    最终结果如图: