物联网平台——Pgroza(一)

/ 默认分类SpringBootjava / 没有评论 / 481浏览

Pgroza 简介

Pgroza 是参考groza制作的物联网平台,面向个人,开源。 此项目仅仅用于学习,不建议用在商业用途。 之所以会有这个想法,主要是因为之前从事过物联网行业,虽然是做上层业务的,但是还是对这个生态比较感兴趣,然后在网上找了不少的资料过后,终于还是决定自己搭建一个。经过调研后发现几个问题:1.凑齐一个生态成本比较高;2.基于现成的云平台进行开发过后,总是要受各种条件限制;3.依赖现有平台和框架,最后开发的基本上都是各种业务层的东西了,对生态链还是不够深入理解。

关于Pgroza的发展

其实我还没想好要怎么去研发Pgroza,现在的想法是现做一个面向单个家庭的。 所以应该是一个单机版的,为了以后拓展方便,开发时需要注意解耦的问题。 如果研发顺利,应该是可以做成分布式的;未来的人对数据隐私会比现在重视的很多,所以多家庭接入的问题暂时不会考虑了。最后就是如果要面向大众,最好是能一键化部署,就好像安装应用程序一样。

对Pgroza的初期功能分析

涉及对象

一般情况,物联网平台涉及对象不外乎两个:用户和设备

对于设备: 设备需要接入,接入时需要提供协议,现在的物联网平台一般都是规定一定的接入协议的,设备一般都是需要去遵从这些既定协议的。当然,如果设备商比较牛掰,物联网平台也可以增加协议去适配厂商的。设备按照协议接入平台后,在某些事件(常见的就是温度变化、湿度变化以及光变化等等)触发后,向平台上报数据,平台根据协议解析后,存储下来,展示的接口就可以查询数据用于展示了。高级的功能可以根据不同设备的事件产生联动效果(比如:检测到光变暗了,就开灯)。同种设备安装在不同的地方可能有不同的应用,所以每个设备需要有自己的信息,最好是在接入的时候就关联上。

对于用户:用户需要管理设备(如:设备接入平台,设备信息维护,联动问题以及设备状态管理等等),但是不是所有用户都需要去管理设备,大部分人都是使用设备的,经常去使用的应当是各个设备的联动。所以用户有两种提供设备的人,使用设备的人。提供设备的人一般不关心接入用户使用的系统,而是关心怎么把硬件接入系统。

简单功能分析

  1. 协议问题

设备和系统间通信提供socket协议以及蓝牙协议,具体的加密协议设备厂商自定义;在提供设备时,需要提供一份通信协议的sdk以便传输数据时加解密。

  1. 设备接入

使用socket接入的设备商需要给设备固定mac地址并标识出来,蓝牙方式接入的设备不做要求;接入时,socket设备提供接入接口以便平台扫描,蓝牙设备同样需要默认开启蓝牙

  1. 用户

用户不需要手动去接入设备,由平台自动扫描接入;但是用户需要给设备命名(修改设备信息时,mac地址不可修改)、根据设备商提供的说明上传sdk并为设备指定sdk。

  1. 平台

平台就比较复杂了,需要提供协议管理、设备管理以及用户管理。

需求

设备管理

设备接入

设备接入可以选择socket接入或者蓝牙接入,设备启动后由平台自行扫描,如果设备同时提供两种方式,则优先选择socket模式接入。接入时自动记录设备的相关信息到数据库,其中设备的mac地址字段需要建立索引,接入类型需要标注为socket/蓝牙,接入后,需要提示管理员立刻去更新设备信息以及指定协议管理中上传的通信的sdk。

设备online/offline

设备接入后,默认为上线状态,后续扫描设备时,如果发现设备未被扫描到,重试扫描后还未发现,将设备状态改为下线状态。对外提供此设备上下线消息

设备状态检测

检测设备的实时状态,可在设备信息中设置是否需要被扫描,设置后的设备才会被定时检测

协议管理

协议sdk上传指定厂商和版本号,自动保存一条协议记录。

用户管理

用户在设备接入后,会收到根据接入通知。用户收到接入通知后,需要去修改设备信息,为其指定厂商以及协议sdk等信息。

如果厂商还未添加,需要先添加厂商,然后上传协议sdk到指定厂商的指定设备下

事件联动

设备可提供的事件需要封装在协议sdk中,这些事件,分协议:如果是socket协议通信的设备,只接受ip和port;如果是蓝牙,只接受mac地址