如何设计一个物联网服务器平台 产品经理的思维逻辑

上篇文章中我制作了很多灯,使用的mqtt协议
为了控制这些灯
我搭建了一台最简单的服务器
让我的灯可以连接上它
可以订阅消息 从服务器获得控制命令
可以发布消息 向服务器回传灯光状态
为了区分每盏灯
我给每盏灯起了不一样的设备名
分配不一样的安全密码
但灯连接服务器不容易使用ssl证书
所以我不能让灯使用明文密码来连接服务器
而是用密码经过单向加密产生的一个字符串作为连接鉴权字符串token
某些情况下token会保证服务器安全
因为我们不需要在服务器以外的地方暴露密码

控制端我依然用手机app来开发
但为了更方便app的多端开发
我的app尽量单靠h5那种开发模式来实现
app控制端尽量避免使用mqtt协议
最简单的办法就是在服务器上写接口api
写一个命令接口
当app需要给灯发命令时候
就调用接口向服务器接口发命令
接口携带上要控制的设备编号或是设备名
接口还携带上控制鉴权口令和控制目的字符串,比如off是关on是开
但控制鉴权不好搞,我不能每盏灯都要去存一个控制鉴权口令码
那开发起来太不方便来
所以我干脆给某些设备归属于某个产品
这个产品产生一个产品密码
我用这个产品密码单向加密换算成一个字符串
这个字符串就用来控制所有属于这个产品的设备

我的灯越来越多
为了控制它们的时候我的大脑和我的服务器都保持清醒
我必须考虑一套简单明了的控制逻辑
我给服务器和灯之间设定了一些规则
比如每盏灯只能订阅通过自己设备id换算出来的一个特定的命令主题来获得自己的控制命令
每盏灯也只能通过向使用自己设备id换算出来的一个特定的命令反馈主题来发布命令执行结果来反馈自己的状态
那样服务器上的设备管理更规范了
一盏灯也不能向其他主题发布乱七八糟的信息扰乱其他设备了
现在我的服务器成了这样

服务器 控制端 天王盖地虎,我是001 连接正常 订阅 设备001的控制命令 宝塔镇河妖,打开001 打开 向设备001的控制器发布 我已打开 001已打开 bye! 宝塔镇河妖,关闭001 关闭 向设备001的控制器发布 我已关闭 001已关闭 bye! 服务器 控制端

这样我的服务器基本功能就有了
但我的灯以后会越生产越多
我不能为每盏灯来操作服务器的数据库
登记每盏灯的名称和密钥
所以服务器给控制端的api中
我又加入了设备的增删api
那样我可以直接在手机上给服务器新增设备
我把新增设备的设备名、设备id、设备密钥换算出来的token写到灯上的芯片中
每盏灯都可以被单独控制了

后来我的灯开始增加功能了
我的灯上面增加了温度传感器
我需要帮助灯的用户记录室内的温度变化
所以我又规定了
我的设备可以向通过自己设备id换算出来的一个特定的数据汇报主题发布数据
由于之前设计时候,控制端不是物联网的一部分
我只能把设备汇报的数据加上时间戳 记录在服务器中
为了访问这些数据
我又写了服务器的相应设备数据查询api
那样控制端可以查询指定设备在某段时间上传的数据了

服务器 控制端 天王盖地虎,我是001 连接正常 向 设备001的数据主题发布 现在温度32摄氏度 向 设备001的数据主题发布 现在温度31摄氏度 向 设备001的数据主题发布 现在温度30摄氏度 向 设备001的数据主题发布 现在温度30.5摄氏度 宝塔镇河妖,获得001上传的数据 001数据[8:11 32度, 8:12 31度, 8:13 30度, 8:14 30.5度] bye! 服务器 控制端

现在我的灯已经可以登得上台面了
但还有个问题没有解决
我们的客户说
小张,我家停电了
你们的灯能不能在来电后
自动恢复成我最后在服务器上发布的指令状态呢

我给我的服务器上数据库中
记录设备的数据表又增加了两个字段
一个用来存储设备最后汇报的当前状态
另一个用来存储设备最后的目标状态
由于并不是所有客户都需要灯光能自动执行过时但未执行的指令
所以我又规定了两个新的mqtt主题
依然是设备根据自己的设备id换算出来的主题
一个主题给灯向服务器发布自己的当前状态
一个主题给灯订阅服务器最后给自己的目标状态
当客户需要灯光拥有自动同步服务器上记录的状态的能力时候
灯就使用这两种主题来和服务器通信
灯连接到服务器后
首先订阅服务器最后给自己的目标状态主题
然后向服务器发布自己当前的工作状态
服务器收到灯光状态汇报时
就分析灯当前的状态是不是和最后目标状态不一样
如果不一样,就给灯发布最后的目标状态

服务器 控制端 天王盖地虎,我是001 连接正常 订阅 设备001目标状态 主题 向 设备001的当前状态主题发布 灯关着 设备001目标状态 灯开着 我马上打开 宝塔镇河妖,设备001目标状态为灯关着 好的 bye! 设备001目标状态 灯关着 我马上关闭 服务器 控制端

我同时给服务器增加了修改指定设备目标状态的api
这样以来,无论何时我只需要修改服务器上指定设备的目标状态数据库内容
对应设备如果订阅了自己目标状态主题并在第一时间向服务器发布当前状态
那么灯就会在最快的时间将自己的工作状态同步为服务器上的内容
就像服务器的影子
我管这种操作机制下的设备叫影子设备
也可以叫镜像设备,物理灯镜像了服务器的数据

当然,精力充足的我
还可以给服务器加上更多的操作逻辑
比如建立账号机制,不同的设备可以属于不同的账号
或是不同的产品属于不同的账号
设备向服务器发布某种内容时候
可以让服务器向所属账号发短信
让服务器可以给控制端推送消息
反正涉及物联网的部分,上面设备和服务器的mqtt连接,控制端和服务器的RESTful接口调用
也基本够用了
建这样的服务器太麻烦?
其实我只是分析了中国移动oneNet物联网服务器mqtt部分的设计逻辑
过段时间我再写BAT家的物联网服务器
先这样吧

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 一个物联网平台赋能开发设计可以包括一些基础的软件和硬件资源,包括:一个可以控制物联网设备的软件平台一个可以收集物联网数据的传感器网络,一个可以支持物联网应用的云端系统,以及一个可以连接物联网设备的通信网络。 ### 回答2: 设计一个物联网平台要赋能开发,首先需要考虑以下几个方面。 首先,平台应提供完善的软硬件开发工具。硬件方面,平台应支持多种传感器和设备的接入,提供开发板、模块和驱动等辅助工具,以方便开发者对物联网设备进行编程和控制。软件方面,平台应提供易于使用的开发环境和工具链,包括编程语言、集成开发环境、调试工具等,以帮助开发者快速开发和部署物联网应用。 其次,平台应提供强大的数据管理和分析功能。物联网设备产生的海量数据需要被有效地管理和分析,以提供有用的信息和洞察力。平台可以提供数据存储和处理能力,支持数据的实时采集、存储和查询,同时提供数据分析和挖掘的功能,以帮助开发者从海量数据中获取有价值的信息。 再次,平台应提供智能化的规则和决策能力。物联网应用通常需要根据一定的规则和条件来进行自动化操作和决策。平台可以提供规则引擎和决策支持系统,以帮助开发者定义和管理规则,实现设备之间的交互和协调,提供智能化的服务和应用。 另外,平台应提供安全和隐私保护机制。物联网设备之间的通信和数据传输需要保证安全性和隐私性。平台应提供安全认证和加密等机制,确保设备和数据的安全,同时遵守相关的隐私保护法规,保护用户的个人隐私。 最后,平台应提供开放性和可扩展性。平台应支持开放的标准和协议,以便于与其他系统和设备进行集成。同时,平台应提供开放的接口和SDK,以便于开发者进行二次开发和定制化,满足不同应用场景的需求。 综上所述,设计一个物联网平台赋能开发,需要充分考虑开发工具、数据管理和分析、智能化规则和决策、安全保护以及开放可扩展性等方面的需求。这样的设计将提供强大的开发能力,帮助开发者快速构建和部署物联网应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值