lesson 2: diego iot用户管理

在物联网平台中,非常重要的一个部分就是用户管理,最本质的问题是数据是谁的。一般情况下数据既不属于物联网平台,也不属于设备的制造商,而数据产生者才是数据的正真拥有者,这个拥有者可以是个人,比如现在比较流行健康手环,这个手环所产生的数据应该属于手环的使用者,而手环的生产者或者物联网平台,在未经购买者同意是无权查看和使用这些私人数据,否则就属于侵犯个人隐私;拥有者也可以是任何形式的组织,企业,公益组织等,这些组织使用第三方提供的设备所产生的数据,应该属于这些组织所有,而不是设备的制造者。所有在物联网的设计中必须充分考虑数据的安全性,基于此设计严格的用户权限管理体系。

  1. 用户管理的整体架构

从整个物联网平台层面来看,用户管理分为Iot平台的用户管理,和组织内部的用户管理

  • IOT平台用户管理,主要是负责整个平台运营层面的用户管理,而不涉及组织内部的用户管理,其是不可以查看组织内部数据的。
  • 组织内部的用户管理,主要针对组织内部的用户的用户管理,如哪些用户可以查看某个设备的状态数据,哪些用户进一步可以查看设备的运行数据,其用户权限管理的特征是,详细到对组织设备,设备产生的数据进行权限管理
  • 用户需要注册成为IOT平台用户,后可以创建组织

2. IOT 平台用户管理

对应IOT平台的用户,其主要是针对平台功能模块的权限管理,一个注册的组织,他具有的功能权限,而不具备组织的数据权限,一般有如下功能

  • 超级管理员,平台的管理员,其具有平台层面的全部权限
  • 组织管理,对组织的注册进行审核,监管
  • 服务管理,可以定义每个组织所能在平台所享有的服务权限
  • 交易管理,对于有偿服务,需向用户提供交易功能,这就会涉及到一系列有关交易过程的管理,比如订单管理,价格管理等

3. 组织用户管理

下图是组织层面的用户管理架构图

  • 管理员,平台用户创建组织后,即成为该组织的管理员,对组织内的用户管理,设备管理等具有全部的权限,可以管理用户组,和用户。
  • 权限的管理粒度一般为对象级,如一个设备,可以定义此设备的可视权限,设备的数据权限,定义的粒度越细则管理越精细。权限一般不能被修改,系统会根据设计,自动生产对象的相关权限。
  • 用户组可以说是一组权限和用户的对应集合。一个用户组拥有多个权限,同时也可拥有多个用户;管理员对用户组有增删改的权限;一般系统会创建一个管理员的用户组,在此组内的用户都具有管理员的权限
  • 用户即针对使用系统的单一个体用户,组织的管理员,可以创建用户,并将用户加入到某个用户组,以分配相应的用户权限。用户也可以接受组织的邀请,成为组织下的用户,一个用户可以属于多个组织。

4. 实现

这里只做主要部分的设计,具体的代码可以查看开源代码(目前还在开发中,代码有很多问题,故还为upload到GitHub,呆开发到一定程度即会开源)

4.1界面设计

  • 在用户管理菜单下,依次有User,User Group, Permission,Organization
  • 用户可以通过右上角的组织菜单,切换自己所属的不同组织,组织切换完成,相应的权限都基于组织进行切换

4.2. 数据结构

注:diego iot采用python开发,并使用到Django 的web架构,如下是数据结构的设计

class User_Ext(models.Model):
   user =models.ForeignKey(User)
   mobile_phone = models.CharField(max_length=30)
   qq = models.CharField(max_length=20)
   wechat = models.CharField(max_length=20)
class Organization(models.Model):
   name = models.CharField(max_length=40)
   description = models.CharField(max_length=50)
   address = models.CharField(max_length=50)
   city = models.CharField(max_length=60)
   state_province = models.CharField(max_length=30)
   country = models.CharField(max_length=50)
   logo=models.CharField(max_length=40,default="logo")

#the relation between user and organization
class User_Organization(models.Model):
   user=models.ForeignKey(User)
   organization=models.ForeignKey(Organization)
   role_in_organization=models.IntegerField()#0:owner,1:Admin,2:Viewer

#the iot permission object
class Permission_Ext(models.Model):
   name = models.CharField(max_length=40,default='new permission')
   for_object = models.IntegerField()#0:eqp
   object_id = models.IntegerField(default=1)
   organization=models.ForeignKey(Organization)
   description = models.CharField(max_length=50)
   permission_code = models.CharField(max_length=50,default='permission code')

#the iot group object
class Group_Ext(models.Model):
   name=models.CharField(max_length=40,default='new group')
   organization=models.ForeignKey(Organization)
   description = models.CharField(max_length=50)

#the relationship for permission_ext and group_ext
class Permission_Group_Ext(models.Model):
   permission_ext=models.ForeignKey(Permission_Ext)
   group_ext=models.ForeignKey(Group_Ext)

#the relationship for user and group_ext
class User_Group_Ext(models.Model):
   user=models.ForeignKey(User)
   group_ext=models.ForeignKey(Group_Ext)

 

 

lesson 1: diego iot的整体架构

现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT、XMPP、NB_IOT等,个人认为这些只是物联网中一部分,而涉及到物联网的设备如何管理,用户如何管理,数据包如何解析,大数据如何展示等也是物联网模块中非常重要的部分,所以作者就根据自身工作中总结出来的建构在云端的物联网平台基本架构分享给大家,并基于此架构如何一步一步来开发一套物联网平台。

物联网平台,应该是基于现在的互联网,通讯技术来建构,而不依赖与特定的硬件模块,用户可以基于自身的设备技术架构,简单轻松接入物联网。下图是物联网的核心架构:

1. 四大核心模块

在物联网中存在4大核心模块,那就是设备管理,用户管理,数据传输管理,数据管理,只有具备了这四大核心模块,才能认为是一个完整的物联网平台,而所有其他的功能模块都是基于此四大功能模块的延展。

1.1 设备管理

  • 设备类型管理:定义设备的类型,此功能一般由设备的制造商来定义,一种设备类型最重要的是关联到一套独有的数据解析方法,数据的存储方法,已经设备规格等数据,也只有设备的制造商才可以编辑有关设备类型的数据,而设备的使用者只能浏览设备类型的相关信息
  • 设备管理:设备管理定义设备相关信息,每个设备必须定义其设备类型,设备类型有使用者属性,设备在完成销售,并被使用者激活后设备就属于设备使用者了,这时候设备使用者对设备有完全的控制权,可以控制设备的哪些数据可以被制造商查看,可以被哪些用户查看等权限

1.2 用户管理

  • 组织管理:在物联网平台中一个很重要的观念就是组织,所有的设备,用户,数据都是基于组织的管理的,设备制造商是一个组织,设备的使用者是一个组织,家庭都可以是一个组织。
  • 用户管理:用户是基于一个组织下的人员构成,每个组织下面都有管理员角色,管理员可以为其服务的组织添加不通的用户,并分配每个用户不同的权限。一个用户也可以属于多个不同的组织,并且扮演不同的组织
  • 用户组:一组用户,也是基于组织的用户组管理,同一用户组的用户拥有相同的权限
  • 权限管理:同样是基于组织的权限管理,主要是针对对象级别的权限细分,如设备的浏览权限,可以控制每个用户是否看到这个设备;设备数据浏览权限定义是否可以查看设备的运行数据

1.3 数据传输管理

1.31 基本格式

数据传输管理,定义针对一类型设备的数据传输协议,基本格式是:

  • 每一个设备有厂商唯一的序列号,因为每个制造商有自己的编码格式,固此序列号没有固定格式。
  • 命令码,为此条数据的作用,比如是上传数据,或者服务器下发给设备的命令等,一般采用2位数字编码00~99
  • 数据,此部分是此条报文,所包含的数据部分,每个协议可以定义不同的解析方式,比如服务器在收到数据包后,会根据预先定义好的解析方式解析数据字段,并按照规则存储

1.32 数据解析定义

  • 每种设备类型可以定义多条命令,每个命令都有自己不同的解析方式,组织的管理员可以为自己的设备类型定义解析方式
  • 服务器接收到数据后,会自动根据预先定义的解析方式解析数据字段
  • 设备开发者要根据在IOT平台定义的数据格式,自行开发自己设备的解析代码
  • 数据字段都按照HEX方式收发

1.33 数据的存储

  • 存储要支持分布式架构,可以为每个设备定义不同的存储位置,在diego iot中数据存储使用mysql数据库,实现不同的设备存储在不同的mysql数据库中
  • 每条数据定义生命周期,在生命结束后,系统将自动删除

1.4 数据管理

  • 权限管理,数据的权限在物联网平台中是至关重要,数据属于谁是一个非常重要的概念,只有设备的拥有者才能定义数据可以给谁看
  • 大数据,物联网数据本身就是海量的数据,我们可以借助一些开源的大数据平台来实现数据的可视化分析,只有经过分析的数据才是有价值的数据
  • 数据的导出,用户可以导出数据到本地做分析

2. 网络通讯

现在所有的云端的物联网平台和设备之间的通讯,本质上都是建构在TCP/IP协议之上的,只是对数据包的再封装而已,基于此我们可以是用wifi,4g来实现设备和云平台的通讯,不过设备与设备之间的通讯,可以有wifi,Bluetooth,zigbee等,下面介绍几种常用的通讯架构

2.1 基于移动3/4G通讯

此架构是最简单的架构,设备就如同我们的手机,基于移动通讯来上网,其主要需要考虑如下几点

  • 每个设备都需要一个SIM卡,可以到移动服务器商办理专门针对物联网的SIM卡
  • 数据流量问题,这种架构完全是走数据流量,如果有视频数据,将会产生比较大的流量费用,这都是要考虑的
  • 通讯质量问题,这完全依赖于移动服务商的网络覆盖状况,就如同我们手机一样,在有些环境下是没有信号的,也就没办法收发数据

2.2 基于wifi局域网

此中架构,适合于所有的物联网设备都是运行在一个局部环境中,设备通过wifi或者有线连接到路由器,而由路由器统一连接的物联网服务器,就如同我们家中装一个wifi路由器上网一样的架构,需要注意的事项:

  • 局域网内的智能设备,是没有公网独立的ip的,只有一个局域网内的ip,带来的问题就是,设备可以直接给物联网服务器发送数据包,而物联网服务器是不能直接给设备发送数据包,就因为设备没有公网独立ip
  • 功耗问题,对于使用wifi接入的设备,最好不是电池供电,因为wifi的功耗比较大
  • 干扰问题,如果在大型的厂房部署这种架构,一定要考虑,厂房内是否有强干扰源,如电磁干扰,可以考虑采用工业级的无线路由器,一般抗干扰能力比较强

2.3 基于蓝牙通讯

一般的基于蓝牙的物联网,会考虑通过蓝牙网关来部署。

蓝牙由于其点对点的通讯方式,所以要考虑如下问题:

  • 蓝牙网关的容量问题,也就是一个蓝牙网关能接入几个蓝牙设备,这取决于蓝牙网关中使用了多少个蓝牙设备
  • 蓝牙的配对问题,蓝牙设备直接的通讯都首先配对才能通讯,如果实现自动配对,如果不能自动配对,大规模部署,将是一个很麻烦的事情

还有一种场景是针对不需要一直在线的物联网设备,而只是在某种特殊需求的情况下,需要连上服务器,这中场景下,我们可以通过手机的蓝牙功能来让设备接入物联网

蓝牙手环是这种架构的一种典型应用模式

2.4 基于zigbee

ZigBee也是一种流行的组网模式,zigbee本身设计是针对传感器之间的联网,具有非常强的低功耗能力

zigbee接入网络也依赖于zigbee网关,网关本身也是一个zigbee设备,zigbee设备是自组网的,在使用过程中注意的问题有

  • 数据量的问题,设备能力和功耗本身是自相矛盾的,由于ZigBee是超低功耗方案,固在通信能力上也是打折扣的,很适合一些传感器数据的采集,如温度湿度,但如果对大数据量的视频类的就不适用了

这里主要介绍了,几种常用的物联网部署架构,至于物联网协议,这里就不多介绍,网上文章非常多

3. 智能设备

diego iot设计的初衷是让智能设备开发者摆脱对特殊模块的依赖,对于智能设备的开发,只要具备联网功能即可,没有特别多的要求。

Scroll to top