且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

IoT+Tablestore快速构建智能售货机应用

更新时间:2022-08-13 10:33:06

一、 背景介绍


        近年来,物联网(IoT)技术发生了巨大的变化。NB-IoT、LoRa等技术的产生解决了网络覆盖、设备功耗成本问题;尤其是最近5G技术的商用,意味着支持海量设备连接进行高质量数据通讯即将有坚实的基础设施支持。在过去的二十年,人的各种活动如社交、购物等产生了海量的数据。据分析,每个人身边至少有1000个左右的物体,如果将比人的数量多的多的各种物体、设备都接入网络,可以预见到,在不远的未来社会将会产生比现在多无数倍的各种数据,数据量将呈现爆炸式增长。那么问题来了,如何接入这些物体设备、如何将这些采集到的海量数据进行存储分析?

        以零售行业为例,基于IoT技术的自助饮料机、福袋机、口红机、自助彩票机、自助售药机等遍地开花,广泛分布在商场、工厂、学校、写字楼、火车站、机场等区域。据最新的调查数据,日本现有的售货机保有量约560万台,平均每25人就拥有一台,而目前中国平均每5000人才拥有一台售货机,可以预见,售货机在中国还有巨大的市场空间。实现一个售货机的应用至少需要考虑:
    1.售货机可以方便的接入网络,实现对设备自身的运行状态监控,出现故障、货物短缺情况能够及时发现,销售情况能够及时跟踪
     2.售货机将会上传各种传感器监控指标环境信息、货物信息等,需要存储这些海量信息并考虑扩展性,存储的数据能够方便的进行分析处理

        阿里云IoT套件提供了非常便捷的设备统一接入功能,无论您是传感器、穿戴设备、互联汽车还是大型工业设备,只需轻松几步即可完成接入,实现数据上传和指令下发。
        Tablestore是阿里云自研的分布式NoSQL产品,完全托管在云端,具有高吞吐、低延迟、可无限水平扩展的特性,同时提供各种在线、离线的查询分析功能,非常适合这种海量数据吞吐和分析查询的场景。Tablestore也能方便地实现和业界其它开源组件对接,尤其提供Tunnel通道功能,可以方便地进行数据拉取订阅、异构数据存储。
        阿里云IoT套件提供了数据订阅功能,可以轻松实现和Tablestore的无缝对接,将数据源源不断转发到Tablestore中,使得用户可以快速便捷提取自己的业务数据,搭建自己的数据中心,不用担心数据量日积月累带来的扩展问题。同时还能够轻松利用Tablestore提供的现各种分析查询功能,发掘出更多的价值,完全不用担心构建自己的物联网数据分析平台太过复杂。

        利用阿里云IoT套件+Tablestore可以用最简单的操作实现售货机管理监控、运营数据存储分析查询一条龙服务。

二、 售货机接入阿里云IoT平台

1. 创建产品

 
        一个设备(如售货机)要接入阿里云IoT平台,需要指定归属于哪个产品,所以需要先创建产品。
登陆阿里云官网控制台,找到物联网平台--设备管理--产品,创建产品:
IoT+Tablestore快速构建智能售货机应用

产品创建之后,每个产品都对应了唯一都ProductKey。

2. 创建物模型


        物模型是IoT中比较重要的概念,主要分属性、服务、事件,分别定义了设备的运行状态、设备能够提供的方法能力、设备运行时产生的事件(如果故障、过载等)。
为简单起见,为售货机定义的物模型精简为如下:
属性:
IoT+Tablestore快速构建智能售货机应用

服务:这里主要是售货机提供出货功能,对应着售货机的出货动作。
IoT+Tablestore快速构建智能售货机应用



事件:
这里定义了两个事件,包括故障上报、出货通知
IoT+Tablestore快速构建智能售货机应用

IoT+Tablestore快速构建智能售货机应用

3. 添加设备

需要将售货机接入到步骤1中创建的产品中。
点击设备--添加设备即可。
此步骤将会生成设备证书,主要用于云端对接入的设备做鉴权认证。

4. 建立设备和平台的连接

此部分将步骤3中创建的设备接入阿里云IoT平台中,需要使用阿里云IoT平台提供的SDK,在SDK中通过步骤3中产生的设备证书认证连接阿里云IoT平台,定义上传的数据。
详细的操作可以参考官网介绍:
https://help.aliyun.com/document_detail/73708.html?spm=a2c4g.11186623.6.555.67d93473QYaQMA
https://help.aliyun.com/document_detail/42648.html?spm=a2c3t.12772692.1350745.12.71136a539EnYup
给售货机定义设备状态包括日光灯开关、左室温度、右室温度、状态码(定义错误代码、缺货等状态)、地理坐标等等。
上行的售货机信息格式如下:  

{
    "id": "230788029",
    "method": "thing.event.property.post",
    "params": {
        "DeviceInfo": {
            "LightPowerSwitch": "on",
            "LeftTemperature": -2,
            "RightTemperature": 1,
            "StatusSettings": "Default",
            "StatusCode": 10,
            "Location": "30.2308282500,120.2274736900"
        },
        "version": "1.0"
    }
}

售货机回传的订单信息示例如下:

{
    "id": "230788029",
    "method": "thing.event.OrderInfo.post",
    "params": {
        "ChannelNo": "15",
        "Price": "3.5",
        "Quantity": "2",
        "Cost": "7.0",
        "OrderId": "u20190708143366123"
    },
    "time": 1564448722000,
    "version": "1.0"
}

三、 订阅售货机IoT数据到Tablestore

设备上传的数据不进行存储分析是没有意义的,阿里云IoT套件提供了丰富的转储接口。
目前数据流转主要方式可以分两类:
1)使用规则引擎:直接将数据过滤转换到其它存储中
2)使用HTTP/2客户端:直接获取设备数据,缺点主要是缺少过滤能力,且只支持Java/.NET
推荐使用方法1),直接通过规则引擎将消息转储到Tablestore中。
选择规则引擎--创建规则:
选择Json数据格式即可,以转储设备状态信息DeviceInfo为例:

1.编写SQL

SQL的语法可以查看参考文档
SQL编写参考如下:
IoT+Tablestore快速构建智能售货机应用

抽取设备定时运行状态SQL如下:

SELECT items.DeviceInfo.value.LightPowerSwitch as light, items.DeviceInfo.value.LeftTemperature as left_temperature, items.DeviceInfo.value.RightTemperature as right_temperature
FROM "/sys/a17KzTXnZmI/+/thing/event/property/post"

使用引擎规则,除了可以定时上报设备运行状态外,也可以抽取部分上传信息,作为售货机本身元数据转储,便于后续的筛选查询:

SELECT items.DeviceInfo.value.StatusCode as statusCode,items.DeviceInfo.value.Location as location 
FROM "/sys/a17KzTXnZmI/+/thing/event/property/post"

另外,每次售货机完成出货后,上报出货通知都会回传出货的订单信息,可以用来实现商家的账务管理统计:

SELECT value.ChannelNo as ChannelNo,value.Price as Price,value.Quantity as Quantity,value.Cost as Cost,time as gmtCreate 
FROM "/sys/a17KzTXnZmI/+/thing/event/OrderInfo/post"

2.指定数据目的地到Tablestore

如下图所示,选择的地域应该和物联网平台上的地域保持一致。
Tablestore实例需要预先申请好, 如果没有创建,可以点击“创建实例”完成Tablestore实例的创建;
数据表指的是Tablestore中经过规则引擎处理后的数据存放的位置,也需要点击“创建数据表”在阿里云表格存储控制台上完成创建。
需要说明的是,规则引擎定义了经过处理的IoT设备数据传输到Tablestore的数据格式,但是并没有指定Tablestore表中主键的定义,所以需要另外单独指定。Tablestore默认最多可以指定4个主键列,这里按照售货机设备信息实际情况,定义了两个主键列:
IoT+Tablestore快速构建智能售货机应用





另外两张表定义如下:

表名 PK0 PK1 表介绍
seller_device_status device_name 存放售货机位置状态信息的表,实现元数据检索
seller_order device_name gmt_create 存放售货机出货回传信息的表,实现商家的对账、统计分析等

3.启动规则引擎

经过步骤1、2之后规则引擎已经创建成功,可以启动运行。
观察Tablestore官网控制台上的表数据监控,可以看到售货机上传的数据已经开始同步到Tablestore中了:
IoT+Tablestore快速构建智能售货机应用

四、 使用Tablestore轻松实现自助分析查询

通过步骤3的订阅操作,获取了3张Tablestore表:
1.seller_device_info中存放了售货机运行时的监控数据,表中的数据示例如下:
IoT+Tablestore快速构建智能售货机应用



可以基于这些时序数据构建运行监控系统,Tablestore对应时序数据的处理有非常易用的数据模型
Tablestore Timestream,特别适用于监控、轨迹溯源等场景。


    2.seller_device_status中存放了售货机的告警信息,包括运行故障、缺货信息, 商家可以根据查询这张表,安排人员进行补货、设备维修,查询动作可以直接在控制台上完成:

1. 查询缺货、故障售货机
2. 任意组合条件查询
3. 查询特定地点附近的售货机
4. 其它

      Tablestore提供了多元索引的功能,对于此类元数据检索的的功能实现非常简单。
可以先在控制台上新建多元索引:
IoT+Tablestore快速构建智能售货机应用

    多元索引新建之后,可以在控制台上进行数据查询:
IoT+Tablestore快速构建智能售货机应用





3.seller_order表
售货机的交易订单信息也存在Tablestore中,商家可以根据seller_order这张表,进行每日的交易盘点。
除了多元索引,Tablestore也提供了二级索引的查询功能,在数据分析场景比如实现大批量的范围查询过滤,二级索引也可以很好的满足需求。
如果您有打造自己的订单管理系统的需求,可以参考基于Tablestore的经典实现:

五、 高级功能

Tablestore控制台提供了基础的查询分析功能,同时提供了也通道服务功能,可以方便地实现实时计算、数据订阅、异构数据存储等功能。 如果您需要更高级功能的需求,或者集成到自己的应用中,可以参考Tablestore提供的SDK做一些定制化的开发,也可以参考Tablestore丰富的经典案例实现自己的应用开发,详情请参考:

六、 展望

使用阿里云IoT套件+Tablestore,可以快速地构建起您的IoT应用。IoT套件+Tablestore的架构,适用于售货机、穿戴设备、商品溯源、轨迹追踪等各种常见的物联网应用场景,IoT灵活便捷的接入方式,Tablestore支撑千万TPS、PB级别的扩展能力和丰富的查询分析功能,可以方便地满足您的设备接入、管理、监控、数据存储和分析、扩展等需求。
欢迎加入我们的钉钉讨论群。群号 : 11789671。
IoT+Tablestore快速构建智能售货机应用