本文以一个停车场智能化改造为例,描述如何使用数据开发实现业务场景。

背景信息

停车场智能化改造最关注的三个问题是停车位使用状态、停车场剩余可用车位情况以及当日停车场收入计算。

假设停车场使用地磁感应器来采集停车位状态信息,那么可以通过物联网平台创建模拟地磁感应器产品,并定义好产品功能,结合物联网数据分析服务中的数据开发功能,可以对停车场现状、排队数据、和收入进行分析计算。

下文将详细描述使用数据开发模块实现停车场智能化地操作。

操作步骤

  1. 以阿里云账号登录物联网控制台
  2. 参考创建产品,创建地磁感应器产品。

    其中,部分参数必须按如下说明设置。
    参数 描述
    所属分类 选择智能城市 > 公共服务 > 地磁检测器
    节点类型 选择设备
  3. 参考单个添加物模型,在产品详情页,为刚创建的地磁感应器产品添加物模型。
    • 添加事件类型属性

      其中,取值范围中的0代表车位空闲,1表示车位使用中。

    • 添加感应器编码属性

    埋藏在停车位下的地磁感应器,在汽车停入和驶离时会发送停车位事件(ParkingEventType)和当前地磁感应器的编码(CarportCode),这样地磁感应器的状态就可以反映车位的状态。

  4. 参考单个创建设备,为地磁感应器产品添加设备。

  5. 参考设备分组,创建一个设备分组,并将上一步创建的地磁感应器设备添加到该分组中。

  6. 参考开发任务,创建一个文件夹,并在该文件夹下创建3个数据开发任务。

    分别在3个数据开发任务中,输入如下SQL语句,校验语法并保存执行。

    • 查询车位使用状态SQL如下。
      -- 查询停车场使用状态
      SELECT m.display_name as carportName,
          if(s.ParkingEventType= 0, '空闲', '使用中') as useStatus
        FROM ${snapshot.your_productkey} s -- 关联设备快照数据表,它保存了地磁感应器属性的最新数据
        JOIN ${system.device_group_relation} g on g.iot_id= s.`$iot_id` -- 关联平台系统表,设备分组表
        JOIN carport_mgr.carport_space m ON m.carport_code= s.CarportCode -- 关联业务表,车位可读名
       WHERE g.group_id in('your_device_group_id') -- your_device_group_id为该停车场设备分组id
      其中:
      • ${snapshot.your_productkey}替换为地磁感应器设备(sensor_1)的设备快照数据表名。
      • your_device_group_id替换为已创建的设备分组(test_device_group)ID。
    • 查询停车场使率SQL如下。
      -- 查询停车场使用率
      CREATE VIEW stat_used_carport as
      SELECT COUNT(*) as used_count
        FROM ${snapshot.your_productkey} r JOIN ${system.device_group_relation} gr ON
      gr.iot_id= r.`$iot_id`
       WHERE gr.group_id in('your_device_group_id')
        AND r.ParkingEventType is not null
        AND r.CarportCode is not null
        AND r.ParkingEventType = 1; -- 使用中
      CREATE VIEW stat_total_carport as
      SELECT COUNT(*) as total_count
        FROM ${snapshot.your_productkey} r JOIN ${system.device_group_relation} gr ON
      gr.iot_id= r.`$iot_id`
       WHERE gr.group_id in('your_device_group_id')
        AND r.ParkingEventType is not null
        AND r.CarportCode is not null;
      SELECT if(b.total_count=0, 0, (a.used_count / b.total_count)) as usage_ratio
        FROM stat_used_carport a, stat_total_carport b;
      其中:
      • ${snapshot.your_productkey}替换为地磁感应器设备(sensor_1)的设备快照数据表名。
      • your_device_group_id替换为已创建的设备分组(test_device_group)ID。
    • 查询停车场收入SQL如下。
      -- 查询停车场收费
      create view no_used_carport as
      SELECT t.CarportCode as carportCode,
             t.`$event_time` as eventTime,
             t.ParkingEventType as eventType,
             t.`$iot_id`
        FROM ${pk.your_productkey} t -- 设备数据表(历史数据)
       WHERE t.CarportCode is not null
         and t.ParkingEventType is not null
         and t.ParkingEventType = 0 -- 空闲
      group by t.`$event_time`,
               eventType,
               carportCode,
               t.`$iot_id`
      order by t.`$event_time` desc;
      
      create view used_carport as
      SELECT t.CarportCode as carportCode,
             t.`$event_time` as eventTime,
             t.ParkingEventType as eventType,
             t.`$iot_id`
        FROM ${pk.your_productkey} t -- 设备数据表(历史数据)
       WHERE t.CarportCode is not null
         and t.ParkingEventType is not null
         and t.ParkingEventType = 1 -- 使用中
      group by t.`$event_time`,
               eventType,
               arportCode,
               t.`$iot_id`
      order by t.`$event_time` desc;
      
      create view used_time as
      SELECT no_used_carport.eventTime - used_carport.eventTime as duration
        FROM no_used_carport INNER JOIN used_carport
        on no_used_carport.carportCode = used_carport.carportCode
       WHERE no_used_carport.eventType = used_carport.eventType - 1;
      create view total_used_time as
       SELECT (sum (if(used_time.duration< 3*1000/60/60, 0, used_time.duration)) /1000/60/60)
       as duration_hour FROM used_time;
      
      -- 停车费用计算
      SELECT if(duration_hour= 0, 0, duration_hour*5) as fee FROM total_used_time;

      其中, 将${pk.your_productkey}替换为地磁感应器设备(sensor_1)的设备数据表名。

  7. (可选)在真实的地磁感应器上做开发前,您可以通过物联网平台的在线调试功能,模拟出设备信息,可以让硬件开发与应用开发独立进行。
    参考虚拟设备调试,选择地磁感应器产品和设备,设置相应的ParkingEventType和CarportCode属性值,单击推送,可以模拟地磁感应器的信号。