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

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
云备份 Cloud Backup,100GB 3个月
简介: ### 一、 背景介绍         近年来,物联网(IoT)技术发生了巨大的变化。NB-IoT、LoRa等技术的产生解决了网络覆盖、设备功耗成本问题;尤其是最近5G技术的商用,意味着支持海量设备连接进行高质量数据通讯即将有坚实的基础设施支持。

一、 背景介绍


        近年来,物联网(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平台,需要指定归属于哪个产品,所以需要先创建产品。
登陆阿里云官网控制台,找到物联网平台--设备管理--产品,创建产品:
1

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

2. 创建物模型


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

服务:这里主要是售货机提供出货功能,对应着售货机的出货动作。
3



事件:
这里定义了两个事件,包括故障上报、出货通知
4

5

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编写参考如下:
6

抽取设备定时运行状态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个主键列,这里按照售货机设备信息实际情况,定义了两个主键列:
7





另外两张表定义如下:

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

3.启动规则引擎

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

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

通过步骤3的订阅操作,获取了3张Tablestore表:
1.seller_device_info中存放了售货机运行时的监控数据,表中的数据示例如下:
9



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


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

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

      Tablestore提供了多元索引的功能,对于此类元数据检索的的功能实现非常简单。
可以先在控制台上新建多元索引:
10

    多元索引新建之后,可以在控制台上进行数据查询:
11





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

五、 高级功能

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

六、 展望

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







相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
相关文章
|
3月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
106 1
|
4月前
|
存储 边缘计算 安全
边缘计算的概念和在IoT中的应用
随着物联网(IoT)设备数量的激增,传统的云计算模式面临着数据传输延迟和带宽压力等问题。边缘计算作为一种新的计算模式,通过将计算资源和服务部署到靠近数据源的位置,解决了这些问题。
91 2
|
2月前
|
物联网 Linux C#
一键掌控未来!用 Uno Platform 打造跨平台 IoT 应用,轻松连接你的智能设备,让生活更智能!
微软的开源跨平台框架 Uno Platform 支持使用 C# 和 XAML 一次性编写代码并部署至多个平台,如 Windows、macOS、Linux、WebAssembly 及 iOS/Android,这使其成为 IoT 设备开发的理想选择。本文通过创建控制网络 LED 灯的应用,详细介绍了 Uno Platform 的环境搭建及 MQTT 客户端配置过程,实现了 LED 状态订阅与控制指令发送功能。该案例展示了 Uno Platform 在 IoT 领域的潜力及其跨平台优势,未来可扩展至更多设备类型,构建智能家居系统。
281 58
|
16天前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
21 4
|
1月前
|
传感器 存储 架构师
构建基于 IoT 的废物管理系统:软件架构师指南
构建基于 IoT 的废物管理系统:软件架构师指南
71 9
|
16天前
|
SQL 监控 物联网
ClickHouse在物联网(IoT)中的应用:实时监控与分析
【10月更文挑战第27天】随着物联网(IoT)技术的快速发展,越来越多的设备被连接到互联网上,产生了海量的数据。这些数据不仅包含了设备的状态信息,还包括用户的使用习惯、环境参数等。如何高效地处理和分析这些数据,成为了一个重要的挑战。作为一位数据工程师,我在一个物联网项目中深入使用了ClickHouse,以下是我的经验和思考。
40 0
|
6月前
|
传感器 存储 机器学习/深度学习
物联网(IoT)简介:定义、技术与应用
【5月更文挑战第30天】物联网(IoT)是将物品通过嵌入式系统、传感器及通信技术连接至互联网,实现物物、物人交互和数据共享的技术。其关键包括传感器、通信、嵌入式系统、云计算和人工智能技术。物联网应用于智能家居、智慧城市、工业自动化、农业和健康医疗等领域,通过Arduino等平台可实现简单数据传输。随着技术发展,物联网将深远影响人们生活和工作方式。
500 3
|
1月前
|
物联网 Linux Android开发
一键掌控未来!用 Uno Platform 打造跨平台 IoT 应用,轻松连接你的智能设备,让生活更智能!
本文通过具体案例介绍了如何使用微软的开源框架 Uno Platform 实现与 IoT 设备的集成。Uno Platform 支持一次编写、多平台部署,适用于 Windows、macOS、Linux、WebAssembly 及 iOS/Android。本例创建了一个控制网络 LED 灯的应用,详细说明了环境搭建、MQTT 客户端配置、主题订阅及控制指令发送等步骤。该案例展示了 Uno Platform 在 IoT 领域的潜力及其跨平台优势,未来可扩展至更多设备类型,构建智能家居系统。
59 0
|
2月前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
【9月更文挑战第6天】随着物联网技术的发展,海量设备数据对实时存储和处理提出了更高要求。传统数据库在扩展性、性能及实时性方面面临挑战。阿里云推出的PolarDB具备高性能、高可靠及高扩展性特点,能有效应对这些挑战。它采用分布式存储架构,支持多副本写入优化、并行查询等技术,确保数据实时写入与查询;多副本存储架构和数据持久化存储机制保证了数据安全;支持动态调整数据库规模,适应设备和数据增长。通过API或SDK接入IoT设备,实现数据实时写入、分布式存储与高效查询,展现出在IoT数据存储领域的巨大潜力。
66 1
|
3月前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
随着物联网技术的发展,海量设备数据对数据库提出实时高效存储处理的新要求。PolarDB作为阿里云的高性能云数据库,展现了其在IoT数据存储领域的潜力。面对IoT数据的规模、实时性和多样性挑战,PolarDB凭借分布式架构,实现了高性能、高可靠性和高扩展性,支持动态扩展和冷热数据分层存储,满足IoT数据实时写入、查询及管理需求,展现出广阔的应用前景。
134 1