720 智能硬件与 LeanCloud 云端的默契协作

Stella981
• 阅读 419

【 玩转 LeanCloud 】开发者经验分享:

作者:谢子超

720技术负责人,从业十余年,一直负责软件开发工作。

我们的产品是与监控和改善室内空气质量相关的智能硬件,我们使用 LeanCloud 平台已经有 2 年多了,借此机会与其他从事智能硬件生产及应用解决方案的团队分享下我们的经验。

我们的主要硬件产品分为两部分:环境监测设备(环境宝)和环境治理设备( 720 全智能净化器系列)。环境监测设备的主要功能是通过 7x24 小时不间断地监测 8 项室内环境数据指标(包括 PM2.5 、PM10 、甲醛、TVOC 化学污染物、温度、湿度、噪声、等效二氧化碳),然后将采集到的数据通过 Wi-Fi 上传至云端,通过云端计算并下发决策指令,同时用户也可以随时通过手机了解家中的空气质量;环境治理设备净化器通过 Wi-Fi 联网后,与环境宝实现智能联动。净化器从云端接受控制指令来完成风量调节和功能开关等操作。两个设备组合使用即可实现自动化的空气质量控制。

节约创业成本

技术选型方面,因为是创业公司,所以我们早期对成本方面非常敏感。考虑到自行搭建建服务端要付出的成本和工作量(从服务器租赁、到工程师团队组建,到日常运维),我们更倾向把资源放在产品功能研发和逻辑实现上,而不必为这些离最终用户价值比较远的方面花太多时间和精力,所以我们决定找一些比较专业的后端云服务来满足我们对基础设施架构的需求。

当初了解过 Parse,但是由于国内网络状况对国外产品并不友好,所以没敢去尝试;后来遇到了 LeanCloud ,它是在国内,而且据我们了解它也是这行里做得最早的一家,于是就在一个产品上试用,整个过程进行得非常顺利,包括后续的使用感觉也很好,所以到现在基本上所有产品的服务端都在 LeanCloud 上了。

云引擎实现设备总控

技术实现方面,因为智能硬件很多时候是需要长连接的,我们使用的是 MQTT 协议,而 LeanCloud 对于这类协议没有特殊支持,所以我们使用一台自有服务器作为 MQTT 的服务端,再配合上 LeanCloud 的云引擎,最终也能较好地满足我们的需求。

数据检测设备需要定时采集数据并上报。在开发过程中我们的 Wi-Fi 芯片对 MQTT 的支持有一些问题,所以我们将 LeanCloud 云引擎作为 WebServer 并编写了自定义的 API,让数据检测设备通过 HTTP 请求调用这些 API 来完成数据上报。

智能控制设备通过长连接访问到 MQTT 服务器来实时地接收控制指令,调整自己的运行状态,此时云引擎就充当起了一个总控台的角色,它会对收集上来的数据进行一下判断,然后向 MQTT 服务器发送控制指令,达到控制设备的目的。顺便要提一下,云引擎使用起来还是挺方便的。我们不仅能够直观地从控制台看到各类资源的运转状况,还能通过命令行工具快速地部署和回滚代码,对于常见的服务端操作这些都是非常好的补充。

云缓存为存储和查询提速

在数据保存和查询上,我们使用了 LeanCloud 的云缓存。因为很多用户都会有按照时间范围(比如今天)来查询空气质量的习惯,所以如果在保存数据时设置好合适的 key 结构,我们就可以很方便地获取到需要的数据,而且还有非常棒的读写效率。

商用版体验更棒

技术方面,LeanCloud 的功能和 API 设计都做得比较好,而且它不会像其他公司那样,为了扩大市场宣传而催生出很多新的但又不稳定不好用的功能。服务稳定性方面,特别是在商用版推出之后,商用版有了专属的后端资源,跟免费版的共享资源隔离开来,我们觉得服务稳定性就更有保障了,当然除此之外,商用版在其他方面也比开发版有更多的优势可以利用。

LeanCloud 技术支持也非常专业。因为他们会让开发 SDK 的一线工程师来直接回答我们用户的提问,所以这样更容易定位问题,给用户更准确的解答,这样用户用起来也更加放心吧。只不过 LeanCloud 市场宣传可能做得比较保守,也许是公司风格太「技术化」了一点。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Gson之实例五
前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对json有特殊的格式规定.比如下面的json串解析:{"tableName":"students","tableData":{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":"曹贵生"
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这