最近的工作快忙完了,又可以回来和大家交流了。今天的话题对很多喜欢智能家居或者在家里搞一搞家居系统的人来说可能会有点启发,但要注意的是,对于普通用户来说或许是一个挑战。
先说下背景:
现在很多人在家里有各种各样的智能系统。这些系统,例如米家、苹果HomeKit、华为HiLink等,通常都有各自封闭的生态环境。虽然我们可以依靠像Home Assistant(HA)或者HomeBridge(HB)这样的“桥梁”来实现不同设备之间的互通,但这些解决方案并非万能。在很多细微的调节和控制过程中,我们仍然会感受到不同生态系统之间的巨大隔阂。
智能家居的魅力在于其个性化和自动化的可能性。然而,当我们试图将多个品牌和系统整合到一个统一的平台时,常常会遇到各种障碍。这些障碍可能是协议的不兼容、功能的限制,或者是设备之间无法顺畅通信。
但更重要的是——由于各个厂商自己的各种“策略”,实质上在智能家居系统中我们很难找到一个统一的可以随意访问的数据存储空间。这时候想真正的搞一个“大一统”的系统就难上加难了。
说下iN自己的做法——在家里部署一套Redis!
选这种东西其实没什么心理建设的过程,唯一的原因就是在很多工作和项目中Redis使用得太多,几乎想也不想的就直接拿来在家里部署上了。
首先,Redis是什么?Redis(Remote Dictionary Server,读作“Re-di-s”)是一个开源的内存数据结构存储系统。这玩意主要是在大型的商业系统中担任缓存用途的,通常大型的网站或者应用每秒钟要承担数以万计的数据库查询、读写操作。对于任何数据库服务器来说这么大的操作量都是灾难性的。于是聪明的架构师们就在应用和数据库之间设置了一个基于内存的缓存。
在读取数据信息之前先到缓存中看一看有没有相应的结果数据,如果有,就直接调用缓存数据,如果没有则再去数据库中查询。
Redis就是这种缓存的一个具体实现产品,相应的的同类产品还有诸如:Memcached、Ehcache等等一系列的产品或者变体。
如果想用,基本上用哪个都一差不多。
iN自己的做法就相当简单粗暴了,将数据读进来,仍在Redis中,需要这类数据的应用再去Redis中查找相应的数据就好了。
举个例子:
这是iN自己家里系统看板的网络流量监控:
屏幕就在写字台边上,每天24小时开着,这样一眼看过去就可以迅速的了解家里的网络使用情况,这就省去了出现问题的时候再去路由器的控制界面上找问题的过程。基本上所有的信息或状况也就一目了然了。
怎么实现的?
实际上所用的ROS路由器是带有编程接口的,我们可以通过一行代码:rosClient(cmd='/interface/monitor-traffic', interface = rosInterfacesList, once=b" "),就可以得到路由器上所有的端口的运行情况。
然后将数据略微的做一下整理,就可以用r.set('LocalRouterInterfaceRate', network_json)将数据存储到Redis中。
这也是为什么iN一直和大家说Router OS的路由器好用的原因之一,我们完全可以通过程序来控制和读取路由器的所有行为。
对于Redis内的数据呈现,实际上就是一个大家常用的JSON字符串了:
再将Redis中的数据抽取到前端的页面,也就呈现出更加直观的数据展示效果:
从视觉上也更加容易让人理解。
为什么不直接让前端的程序来读取数据呢?其实,每一次读取ROS数据都是有时间成本和计算成本的,虽然一条语句的处理只需要几十毫秒就可以完成,但要知道——“数据产生了复用才是价值”,这个架构也就满足了一笔数据可以被多个应用和客户端共同使用的目的。
所以,如果爱折腾,还是建议在家里部署一个Redis的。
最后简单的说下Redis的安装和设置方法:
如果你有一台跑linux的系统例如ubuntu,那么只需要 sudo apt install redis-server 这么一条语句就可以在Linux上安装部署一套Redis系统。
当Redis安装完毕之后,Redis就已经运行在你的系统中了。
对于家庭使用,其实我们还需要稍微的修改一下redis的配置信息。原因是Redis本身默认被配置为仅仅允许本机访问。但对于家庭分布式系统来说,我们经常会有从各种不同的设备访问Redis的需求。因此需要将Redis的远程访问打开。
使用命令:sudo nano /etc/redis/redis.conf
把这台安装了Redis的服务器的IP地址设置一下绑定。Redis 就可以在网络上为其他系统进行服务了。
设置完毕后,命令行测试一下:
加上 -h redis 服务器的IP地址,在redis界面中输入 ping (乒)你会立刻从Redis中收到返回信息 PONG(乓),这样就证明你的Redis可以良好的工作了。