esp8266 扫描wifi_ESP8266的奇妙冒险 - 智能家居折腾记

ESP8266的奇妙冒险

搬了新家,终于有地方给我折腾智能家居叻。 在哼哧哼哧装上智能门锁(HomeKit),智能开关(TPLINK),智能插座(某不知名品牌)后,看着手上三个不同控制方式的智能家居配件,我不禁陷入沉思,你们这是给爷整三国演义呢?有没有办法一统天下呢...

HomeBridge

Google找到了HomeBridge,用来模拟Hub,让几乎任何设备可以接入Apple HomeKit生态。

基本原理大概是

iPhone -> HomeHub (HomePod/iPad/AppleTV都可以充当这个Hub的角色) -> HomeBridge(需要一个设备跑HomeBridge Server)-> 各种智能家居配件

HomeBridge靠各种开源HomeBridge插件来实现对智能家居配件的控制。

Note: 插件大概能分两种,一种是platform,针对平台,一种是accessory,基本就是单独支持各个单独配件。

部署HomeBridge

你需要一台设备来充当HomeBridge的Host,网上用树莓派的比较多,奈何我没买。另外一个好选择是旧安卓手机+LinuxDeploy。 LinuxDeploy基本原理就是靠chroot在安卓上实现一个类似docker的效果(当然原理不同于docker)。LinuxDeploy设置还算简单,建议参考官方文档。

HomeBridge的安装我这里就不复读了,因为官方文档写的还行 -> https://homebridge.io/

homebridge-tplink-smarthome

市场上很常见的TPLINK Kasa产品线,接入TPLINK的平台。这个HomeBridge插件的配置十分简单,因为这个插件属于Platform类型的,你甚至不需要什么配置,用TPLINK原装app配置好插座,就直接在Platforms 数组下面加入一个TplinkSmarthome 的Entry直接就能用了。原理应该是自动扫描局域网里有开特殊端口的设备(9999?)直接运行命令了(虽然听起来不太安全,但是胜在方便了)。

"platforms": [
        {
            "platform": "TplinkSmarthome",
            "name": "TplinkSmarthome"
        }
    ],

homebridge-tuya-web

涂鸦智能家居平台的插件,原理是模拟登陆你的账号,读取账号内所有智能家居设备添加到HomeKit。使用也很简单,在Config里输入你的账号密码就完事了。

{
            "platform": "TuyaWebPlatform",
            "name": "TuyaWebPlatform",
            "options":
                {
                    "username": "yjspn@gmail.com",
                    "password": "114514",
                    "countryCode": "1",
                    "platform": "tuya",
                    "pollingInterval": 20
                }
        }
Note :我一开始根本不知道我N年前上亚马逊捡便宜垃圾捡来的的神秘wifi插座到底是什么鬼平台的,只知道他用Smart Life这个App来配置。网上一查居然是涂鸦平台。所以所有使用Smart Life平台的都算是涂鸦的设备。
Note 2 : 涂鸦平台的iOS App有两个,一个叫Tuya Smart,一个叫Smart Life,两个App支持的智能家居配件都一样,但是数据不互通。另外千万记住一点,尽量不要使用第三方Oauth来创建账号,不然这个插件就无法用邮箱登陆(因为真实的登陆username并非你的邮箱)

用来配置的App不同,需要修改platform参数,tuya smart app对应tuya, smartlife 对应smart_life。

Tuya-convert && Tasmota

终于来到了重点。用了两天homebridge-tuya-web之后我发现这玩意实在是有点拉胯(带着整个HomeBridge一起全家齐齐整整Not responding),毕竟是多隔了一个平台,不像隔壁TPLINK的配件直接本地就能连接。那么有什么办法能绕过涂鸦的平台呢。

答案是天下苦tuya久矣,有壮士搞出了Tuya-convert,把tuya设备刷成第三方固件....因为大多数tuya平台的配件们都是基于ESP8266的,对于这个平台我们有更好的开源选择:Tasmota。当然ESP8266的第三方固件还有其他选择,Tasmota算是其中比较有名(有苦力维护)的。

Tuya-convert的基本原理是模拟tuya设备维护用的AP,在快速闪烁的配对模式中,tuya设备会默认连接到这个AP并且请求OTA升级,于是就会刷入我们指定的固件。

要使用tuya convert首先你需要能当AP用的无线网卡但是俺寻思是个网卡都行。

刷写过程也不复读了,官方指南写的很明白。

https://github.com/ct-Open-Source/tuya-convert

Tasmota 救砖

成功之后会有一个Tasmota-XXX 的AP出现,随便用点什么连上去会跳到设置界面让你连接到Wifi。在我走这一步的时候,不知道是出了什么神秘错误,保存重启之后我的智能插头直接砖了,路由器里也找不到对应设备。有可能是我密码错误之类的问题,但是事已至此,就得想想怎么救砖了。

Tasmota硬重置:

https://tasmota.github.io/docs/Device-Recovery/

  1. 长按40秒电源键。在我的情况下这个无效。
  2. Fast Power Cycle Device Recovery:断电30秒,快速开关电源6次,第七次的时候停住。

重置完成之后我们又找回了Tasmota-XXX这个AP。 设置连接信息重启后,应该能够在局域网里找到这个设备了。

快速扫一扫80端口基本就能找到了: nmap -n -Pn 192.168.50.1/24 -oG - -p80|grep 'open'

Tasmota设置

因为ESP8266有16PIN的GPIO,能玩出很多花样。不同的硬件mapping不同。因为Tasmota是一个通用固件,所以需要一些设置才能正常使用。不同设备需要不同的Template,这个也可以自己制作,但是比较幸运的是我的设备能在 Templates 里面找到:

https://github.com/arendst/Tasmota/blob/development/TEMPLATES.md

或者 https://templates.blakadder.com/ 都可以找到相关的配置文件。

找到对应的配置文件之后,打开Tasmota WebUI,Configuration -> Configure Other -> Template里面填入Template Json。选中Activate,自动重启后就可以激活对应设备的完整功能了。

Tasmota & HomeBridge Integrtaion

费了半天周折,不就是为了HomeBridge么,所以Tasmota和HomeBridge的整合应该很容易的吧?....并没有,你想多了。

Tasmota支持很多协议,最通用的应该就是MQTT,另外还有一个好使的是Web协议。

Web协议

在应用完Template之后,我们就应该能靠Tasmota的WebUI完成大多数操作了,f12一下就发现他的操作还蛮简单的(废话一个开关能复杂到哪里去...) 这里利用一个现成的插件https://github.com/Supereg/homebridge-http-switch 来简单的整合一下就能利用Tasmota的Web协议了。

{
          "accessory": "HTTP-SWITCH",
          "name": "master-bedroom-plug",

          "switchType": "stateful",

          "onUrl": "http://192.168.50.98/?m=1&o=1",
          "offUrl": "http://192.168.50.98/?m=1&o=1",

          "statusUrl": "http://192.168.50.98/?m=1",
          "statusPattern" : "ON",
          "debug" : true
        },

当然这个方法的问题也很大,因为如果配件换了个IP就得重新配置,目前暂时还没有自动扫描Tasmota设备的HomeBridge的插件。而且Tasmota官方的Web协议相关信息也不多。以后我可能会做一个HomeBridge的自动扫描的Platform插件来方便这一过程。

MQTT

Tasmota官方是推荐使用MQTT协议的。注意一点,MQTT需要一个Broker。这个就把他host在HomeBridge同一个地方就好了。

设置完mosquito服务器之后,需要在Tasmota的WebUI里也设置一下相关的连接信息。

官方教程: https://tasmota.github.io/docs/MQTT/

都测试完成之后应该要能在Log里看见类似的信息

00:00:05 HTP: Web server active on master-bedroom-plug-3879 with IP address 192.168.50.98
01:35:22 MQT: Attempting connection...
01:35:27 MQT: Connect failed to 192.168.50.218:1883, rc -2. Retry in 10 sec
01:35:38 MQT: Attempting connection...
01:35:38 MQT: Connected
01:35:38 MQT: tele/master-bedroom-plug/LWT = Online (retained)
01:35:38 MQT: cmnd/master-bedroom-plug/POWER = 
01:35:38 MQT: tele/master-bedroom-plug/INFO1 = {"Module":"HS108A","Version":"8.4.0(tasmota)","FallbackTopic":"cmnd/DVES_414F27_fb/","GroupTopic":"cmnd/tasmotas/"}

可以用mqtt-cli (安装方式: https://hivemq.github.io/mqtt-cli/docs/installation/packages.html) 来测试一下连通性。

mqtt pub --topic stat/master-bedroom-plug/POWER -m ON -h 192.168.50.218 -p 1883 -V 3

附上我的配置。

{
            "accessory": "mqttthing",
            "type": "switch",
            "name": "master-bedroom-plug",
            "topics":
            {
                "getOn": "stat/master-bedroom-plug/POWER",
                "setOn": "cmnd/master-bedroom-plug/POWER"
            },
            "integerValue": "false",
            "onValue": "ON",
            "offValue": "OFF"
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值