ERobot-IoT (物联网初探)

@Evileyesaint  2021 - 04 - 12

这个废物很懒,什么都没开始写,请过段时间再来看看吧~ 21/4/25
这个废物很懒,写一点不写一点(p≧w≦q)
部分内容请稍后再来探索吧~


前言

谈起物联网技术,每个人都有每个人的见解,关于我的见解是,把没有实际联系的物体接入互联网,从而实现信息交换与传送,或是物物之间联系形成物物相息。物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络,是互联网发展到一定水平必然产物。物与物的连接,人与物的连接,使得物体的功能得以整合,从而实现智能化与自动化。采集数据进行计算,控制各种物品自动解决问题,解放大量劳动力。
好比,当我们把传统的开关电灯接入物联网,就无需再通过物理进行控制,通过手机或者感应器,可以自主实现智能的开关灯,或是通过实时环境而调节灯的亮度等等。
导论

这张图是大概十五年前电子行业对未来的畅想,图中很多东西在当时并没有实现,到今天已经是耳熟能详的技术。随着物联网的发展,我们身边的家居,以及各种能够联网的家电的出现,所以未来的世界是“Connected and smart Society”,互联的,聪明的社会,而它的背后的支撑就是不断发展的物联网技术。

本项目源于2021年10月,为宿舍写的自动化脚本,伴随需求的增加和设备的接入,到目前已经可以算得上一个小型的物联网项目了,本文通过一个以QQ机器人为核心,以宿舍为环境的物联网小项目,从解决方案,技术的实现到最终成果进行讲解,谈谈我的理解和方案。

这是整个项目的框架图:

框架图

用户通过QQ发送指令,控制中心负责处理并调用相应的设备,从而实现某功能或操作,随着更多的设备接入,功能日益增大,方便我们的生活。
从一个小小项目玩起来,不断的升级和接入新的设备,使其更智能化,更自动化,解放劳动力,从中不断学习经验和知识。


平台

控制中心的意义

虽说物联网可以使万物互联,如果只是单对单或者多对多的连接,这种没有中心化的连接方式并不能有效的对数据有效整理和统一,我们或许需要一个在这杂乱交织的数据流中,专门有个设备能够智能管理。控制中心应运而生,控制中心管控着各设备间的交互和数据传输,用户可以无需熟记各设备间的操作,可以快速上手,通过控制中心访问并使用该设备。控制中心的诞生极大方便了用户的日常使用。简明地说就是控制中心相当于你的秘书,你往往只需要对你的秘书提出需求,秘书便可高效地完成你的需求。
物联网框架图

平台的选择

首先,控制中心的存在,目的是高效和便携的代替我们对各设备的管理,所以控制中心的存在必须是简单和便捷的。
手机是当代人手上必不可少的工具,或许我们可以把核心架构在手机上。其实这种方案早已妇孺皆知,经常可以看到有人会把一大票功能写在一个App上,亦或是类似小米的小爱同学(音箱),Apple的HomePod等IoT设备,仅需一次配对与设置,就可以在下次开启之时快捷使用。
但是这个方案真的是高效的吗?如今的智能手机,我们通常只需实现一个服务功能,却无奈下载一个个功能分散而又单一App,手机在给人们提供便捷的同时,也有不能承受之“重”,伴随App的增加,无非会使手机更加冗余。
或许我们可以集成指令在手机系统的控制中心(状态栏)里,像拿起手机打开WIFI功能开关一样便捷。
状态栏
很无奈,目前无论是安卓还是苹果系统,并没有提供较大的权限允许对控制中心的按键进行自定义功能操作。
手机语音助手呢?我们还可以通过手机的语音助手来唤醒,比如给Sirl预设好固定操作脚本后,通过对话的形式实现想要的功能。但是在目前的语音识别水平,语音助手通常在大部分场景都是暴毙的,所以该方案目前来说还不太适合。

每当我们拿起手机打开屏幕,大概率并不是接打电话,而是停留于各类聊天App上与其沟通。当前,手机亮屏时间大部分由聊天通讯类应用程序所占据,或许我们可以把控制中心部署在于聊天软件之上。其实,早在几年前就出现各式各类的聊天机器人,这次我们将控制中心部署在于一个QQ机器人上,使用nonebot2cqhttp来快速部署一台运行的QQ机器。我们只需简单地打开QQ,发送想要的功能指令,就可轻轻松松的完成对设备的操作。

QQ机器人框架上手和原理

我们采用Nonebot2机器人框架配合cqhttp通讯作为方案,在nonebot2引导安装上的方法,仅需几分钟,我们就可以完成部署一台机器人。
通过收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。我们仅需简单的配置,通过编写专门的插件就可以实现设备的连接功能,使用QQ进行控制各设备。
helloword
而其运行原理则是,cqhttp通过模拟一个QQ在线状态的程序,进行实际的消息、通知、请求的接收和发送,切实来说cqhttp就是个无头QQ客户端。当收到信息时候,封装并通过http或者websocket进行与Nonebot2通讯,Nonebot2根据调用对应的插件对其进行回应操作,并返回处理结果给cqhttp作处理,匹配响应对象,将信息再传回去,通过腾讯的服务器走回到我们的手机QQ客户端。
单纯的运行Nonebot2并不会获得什么效果,毕竟Nonebot2只负责处理事件,并没有接收和发送消息的能力,必须配合cqhttp或其他QQ无头客户端插件,这样才能组合成一套QQ 机器人框架。通过部署在服务器上,就可以实现全天24小时在线
运行原理
编写插件,就可以实现想要的功能。关于安装,原理和插件编写等,Nonebot2官方文档已经写得很明确了,这里就不在阐述了,请自行查阅文档。


连接

热水模块

热水系统功能是最初始的功能,也是使用频率最高的功能。起因,由于我校宿舍开热水需要进入微信小程序,而且步骤繁琐,并且日常抽风暴毙。偶然间发现其实是通过简单的带上cookie和参数的http访问就可以实现开启热水操作。早期通过编写简单的Python脚本,通过简单cmd打开就可以免去繁琐的操作直接开热水,随着需求的增加,对效率的要求越来越高,后面就部署在了qq机器人上,通过聊天的方式直接开启热水,于是就有了这个项目。

编写插件

根据Nonebot2编写插件文档教程,通过移植之前写的快捷开启Python脚本,再增加余额,日期和温度显示等功能,高度封装变成类导入插件里。
热水插件1

热水核心类(class Core())涉及隐私,这里就不方便展示了,其实通过简单的http模拟访问即可。
首先我们先实例化热水类,并注册事件响应器
这里注册多个可以应付不同场景,使其更智能化
在接收到特定的指令后开始进行事件处理,运行robot209.p()这个方法返回提示结果字符串,再通过调用异步接口的发送消息给当前交互用户的.finish方法,并且直接结束当前事件处理。
这样简单的编写就可以实现开启热水的操作功能。

热水插件2

更智能化

“这样还是得打开手机开启热水,有没有更方便的?”,当然有啦,正所谓懒惰推动了科技的发展。通过增加定时功能,并且判断温度和日期等条件,可以智能的,自动化的开启热水,同时还可以配合以图片显示的方式,使其UI更好看,毕竟单纯的文字并不能给人的视觉带来更多的冲击感。
热水插件3
通过爬取天气网站获得当地当前温度信息,判断温度日期后可以智能的选择性开启,当条件都不满足的时候还可以通过手动方式开启。

热水插件4

引入定时任务框架APScheduler插件,设置好相应的定时器,在规定时间即可挂起响应并自动注册事情响应器,再配合使用CQ码方式发送消息出去。

CQ码是一种支持特殊信息的发送码,艾特、表情、图片等都可以通过CQ码的api实现

当然还可以引入PIL库,将枯燥无味的文字变成生动形象的图片.实现起来其实还是很简单的,可以自行去了解下PIL和CQ码的使用方法。

热水插件2

热水插件2

还有更多有趣的方案等待你的发现~

灯控模块

实现对灯的控制其实简单,如果灯光本支持IoT的话,直接接入即可。但是在宿舍这种场景,都是不支持IoT设备接入的,那么我们只能手动改装啦。
方案一:可以通过逻辑继电器模块,外接一个esp8266实现WIFI的控制开关灯,但是很遗憾,我们没有权限对学校宿舍内部电路进行修改。
方案二:通过使用舵机esp8266,对开关进行实际的操作。其实这个方法很笨,但是也是在宿舍这种环境最好的解,我们上网搜索下,其实可以发现很多开发者使用该方案。

灯控系统

宿舍灯

由于esp8266可以接入宿舍的WIFI,走的是内网通道,即使渗透映射到公网连接到控制中心后,但也得考虑到宿舍断网后,控制中心连接不上情况,所以还增加了个网页控制功能,只需宿舍内设备连接好WIFI后,通过内网访问就可以实现开关灯操作。
esp8266是Arduino的范畴,我们可以通过使用Arduino开发软件编写代码,并把写到的网页嵌套进去,这里我就不描述过程了,推荐观看这个视频学习相关知识。

灯控系统2

这里我们使用了http协议,所以控制中心也仅需通过模拟http访问即可,类似热水系统一样。为什么要用到http协议?走线不行吗?物联网的存在就是简单快捷控制设备,我们遵循着能远程,就不要手动,能无线,就不要走线原则。

门禁模块

早在早期,我们就已经把宿舍的门禁卡UID复制到手机,每次回宿舍用手机开启即可。可以点击这里看往期PM532复制门禁卡教程
此次主要增加了脸部识别和远程开启。脸部识别方案是使用树莓派配合摄像头,开门使用舵机进行物理开启。树莓派运行功率是其他MUC的几倍,并不是很推荐,而且极其浪费运行能力资源,其实很推荐使用其它开发板,例如STM32,Arduino,树莓派pico等系列微型开发板。只是我目前身边只有树莓派,没有其他开发板。
树莓派运算能力高,我们还可以通过cv2训练脸部模型,亦或是使用成熟的脸部api提供商的方案,再配合电路与控制中心相连即可实现脸部识别功能。

门禁模块

热水智能模块

得益于esp8266好用的无线功能,我们可以外接红外模块,画板焊接成板子后,贴在空调附近,再配合控制中心的远程控制操作,就可以实现开关空调,设置温度,定时开启等一大票功能。
深夜温度过低容易感冒?我们还可以爬取实时的当地温度,通过配合一套智能温度算法,这样每到深夜,空调就会智能地调节温度和风速,妈妈再也不用担心我着凉啦~

机电云抢答模块

机电云抢答脚本是之前写的一个课堂问题抢答脚本,点击这里回到往期文章了解一下
之前的抢答脚本需要通过ssh连接服务器,再创建一个screen来存放运行脚本,效率极其慢,还需要繁琐的操作来启动,当然还可以通过手机端的QPython来启动,但是受限于手机当前网络状态,实时性不是很好,但比正常抢答办法还要迅速靠谱。
接入Nonebot2控制中心后,我们将之前的抢答脚本高度封装,简单对接好API后,使用“消息交互式 python 解释器”插件亦或是创建一个docker的Python环境,当发生API调起时,启动脚本和一系列操作。从而实现在QQ高效率地使用抢答脚本。

其他功能模块

其他功能例如课程表查询,课程提醒,备忘录笔记,随机小游戏等,其实都是通过简单编写Nonebot2的插件即可,只要熟练使用CQ码和Python语言,可以做出很多有趣和实用的功能。

突破

机器只认得编写好的脚本,开放话题的智能聊天仍然是我们无法自己完成的事情,用户只能通过特定插件所支持的句式来使用相应的功能,当用户试图使用我们暂时没有开发的功能时,我们的机器人显得似乎有些无能为力,那么,在未来会接入智能的语音助手,让机器人更能懂你,流畅的识别自然语言并精准完成任务。

图灵机器人收费后,暂时还找不到合适的机器人API。 (当然,已经开始计划自己训练模型啦)

总结

项目源码

还在整理中,请以后再来探索吧>w<

经验总结

还在整理中,请以后再来探索吧>w<


添加新评论