极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12256|回复: 0

用DIY智能插排自动开关路由器电源

[复制链接]
发表于 2015-10-19 15:03:02 | 显示全部楼层 |阅读模式
本帖最后由 快乐起航2012 于 2015-10-19 18:22 编辑

用DIY智能插排自动开关路由器电源
        路由器一直通着电总感到不安全,不用时白白费着电,容易被人破解,还有说不清的辐射问题。手动去关闭电源又显得过于繁琐,用我们DIY的智能插排可以自动开关路由器的电源吗?下面尝试一下,将路由器插到智能插排上如下图所示:
        
        如何去控制呢?首先让ESP8266的wifi工作在softAP模式,手机进入softAP区域,自动建立连接,softAP上有客户连接意味着有上网要求,此时打开路由器电源,把softAP转换成STATION模式,手机失去和softAP连接后会自动和路由器连接,自动上网。
        ESP8266在STATION模式下同样连接上路由器,此时周期扫描是否有上网设备连接到路由器,如果所有的上网设备都断开和路由器的连接,此时就可以断开路由器的电源了,然后再转换回softAP模式等待下一次上网手机的进入,系统状态转换如下图所示:



        这样在不增加设备的情况下,利用手机识别上网需求,就可以自动开关路由器电源了,
看着路由器电源在不经意中为我们打开或关闭,是不是很爽啊!!!

        由于lua API的限制,只能建立TCP连接来判断设备是否在网,所以需要给需要上网的设备增加一个web server的服务或APP来等待连接测试。如果lua能增加一个检测API实现起来就更加简单方便了。

        整个系统代码如下,功能实现了但是结构和容错性还需要进一步调整。


[pre lang="lua" line="1"]--Created @ 2015/18/18 by taiditek
ap_power=0
ap_power1=0

gpio.write(1,gpio.HIGH)
gpio.write(2,gpio.HIGH)
gpio.write(5,gpio.HIGH)
tmr.delay(1000000)
gpio.write(1,gpio.LOW)
gpio.write(2,gpio.LOW)
gpio.write(5,gpio.LOW)

cnt=0
is_busy=0

function count_sta()
        is_busy=0
        --sk=net.createConnection(net.TCP, 0)
        --skn("receive", function(sck, c) print(c) end )
        print("start check ...")
        cnt=0
tmr.alarm(2,3000,1,function()  --10秒
        sk=net.createConnection(net.TCP, 0)
    skn("receive", function(sck, c) print(c) end )
        ip_adr="192.168.1." .. tostring(100+cnt)
        print("check..." , ip_adr)
        sk:connect(8080,ip_adr)
    skn("connection", function(sck,c)
                print("connection on!!")
                print(sck)
                print(c)
                sk:close()
                is_busy=1
    end)
        cnt=cnt+1
        if cnt>5 then
                --tmr.stop(2)
                print()
                if is_busy==0 then
                        print("Turn it off")
                        ap_power=0;
                        gpio.write(2,gpio.LOW)
                        tmr.stop(2)
                        check_ap()
                end
                is_busy=0
                cnt=0
        end
end)
end

function check_ap()
        print("Ready to start soft ap")
        local str=wifi.ap.getmac();
        local ssidTemp=string.format("%s%s%s",string.sub(str,10,11),string.sub(str,13,14),string.sub(str,16,17));
        wifi.setmode(wifi.SOFTAP)        
        local cfg={}
        cfg.ssid="ESP8266_"..ssidTemp;
        cfg.pwd="12345678"
        wifi.ap.config(cfg)
        cfg={}
        cfg.ip="192.168.2.1";
        cfg.netmask="255.255.255.0";
        cfg.gateway="192.168.2.1";
        wifi.ap.setip(cfg);
        tmr.alarm(1,10000,1,function()  --10秒
                print("test...")
                sta_list={}
                sta_list=wifi.ap.getclient()
                cnt=0
                for mac,ip in pairs(sta_list) do
                        print(mac,ip)
                        cnt=cnt+1
                end
                if cnt>0 then
                        print("turn it on")
                        ap_power=1
                        gpio.write(2,gpio.HIGH)
                        tmr.stop(1)
                        check_sta()
                end
        end)
end

function check_sta()
        print("Ready to start station")
        wifi.setmode(wifi.STATION)
        wifi.sta.config("xxxxxxxxxx","xxxxxxx")  --路由的名称和登陆密码
        tmr.delay(20000000)
        wifi.sta.connect()
        local cnt = 0
        tmr.alarm(0, 1000, 1, function()
                if (wifi.sta.getip() == nil) and (cnt < 500) then
                        print("Trying Connect to Router, Waiting...")
                else
                        print("Conected to Router\r\nMAC:"..wifi.sta.getmac().."\r\nIP:"..wifi.sta.getip())
                        tmr.stop(0);
                        count_sta()
                end
        end)

end

check_ap()
[/code]


        不要忘记了,运行一段时间后可以到乐联网看看路由器都是什么时候开什么时候关的,这些数据或许还有什么作用呢?比如宽带要不要改成包小时的账号啊... ...

DIY插排
http://www.geek-workshop.com/thread-24907-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 01:24 , Processed in 0.043266 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表