1. 程式人生 > >讓小米路由器變成一個聰明的WIFI(1):有人回家,它就發簡訊告訴你

讓小米路由器變成一個聰明的WIFI(1):有人回家,它就發簡訊告訴你

我想讓我的小米路由器變成一個聰明的WIFI,idea是這樣的:當老婆回到家,小米路由器就自動發一條簡訊告訴我。

折騰了幾天,搞定,分享一下:

我的路由器型號:小米路由器mini (129元在官網淘的)

步驟一:首先要開啟小米路由器SSH, 獲得root

      這個方面小米是開放的,操作方法網上有,不詳述了,見 點選開啟連結

步驟二:用SSH登入進去, 瞭解小米路由器是什麼樣

在你的電腦上輸入以下命令,登入小米路由器 (我的路由器IP是192.168.31.1)

ssh [email protected]
然後輸入步驟一獲得的root的密碼(如果密碼輸入正確後仍看到permission denied,別管它,按回車)進去後會看到

BusyBox v1.19.4 (2015-01-22 17:52:04 CST) built-in shell (ash)

Enter 'help' for a list of built-in commands.

 -----------------------------------------------------

Welcome to XiaoQiang!

 -----------------------------------------------------

[email protected]:~# 

用 df 檢視一下儲存情況

[email protected]:~# df

Filesystem           1K-blocks      Used Available Use% Mounted on

rootfs                   11008     11008         0 100% /

/dev/root                11008     11008         0 100% /

tmpfs                    62872      2580     60292   4% /tmp

tmpfs                      512         0       512   0% /dev

/dev/mtdblock7            1024       864       160  84% /data

/dev/mtdblock7            1024       864       160  84% /etc

tmpfs                    62872      2580     60292   4% /userdisk/sysapihttpd

/dev/root                 1024       864       160  84% /mnt

/dev/mtdblock7            1024       864       160  84% /mnt

/dev/sda1            976762580 297860468 678902112  30% /extdisks/sda1

小米路由器儲存的根目錄是隻讀的, 只有 /etc   /data  可寫,剩餘空間很小(上表顯示只有160K),只能寫小程式。 

如果要大空間,可以插個U盤或行動硬碟。像上表顯示的這個盤:  /dev/sda1,這是我的行動硬碟

放在 tmpfs 上的所有目錄(如: /tmp    /userdisk/sysapihttpd) 都是臨時儲存如果把檔案寫在上面,重啟後將全部丟失

檢視一下作業系統情況

[email protected]:~# cat /etc/*release

DISTRIB_ID="OpenWrt"

DISTRIB_RELEASE="Attitude Adjustment"

DISTRIB_REVISION="r40348"

DISTRIB_CODENAME="attitude_adjustment"

DISTRIB_TARGET="ramips/mt7620a"

DISTRIB_DESCRIPTION="OpenWrt Attitude Adjustment 12.09.1"

作業系統是OpenWrt 12.09.1,   晶片是mt7620a

OpenWrt是為小型裝置用的linux

建議你先到各個目錄看一下,熟悉熟悉

看一下有哪些命令、程式可以用

用 help 檢視一下內建命令

[email protected]:~# help

help將返回一個可用命令列表

檢視一下, 有哪些程式可用

[email protected]:~# echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin

常用程式大多數都在這幾個  bin 目錄中, 常用的linux程式大體上都有(如: grep awk wget find 等)

步驟三:寫一個Shell指令碼,檢測某個手機是否連線進了這個路由器

小米路由器有兩個WIFI SSID, 一個頻率是2.4G Hz的, 一個頻率是5G Hz的。

思路是這樣的:

1, MAC碼是識別手機的標誌

2, 手機連進某個WIFI SSID,則WIFI將知道手機的MAC碼

3, 檢查每個SSID當前的連線使用者, 看有沒有指定的MAC碼。如有,則用 wget 訪問一個外部網站URL, 觸發一個網頁

4, 這個網頁再去觸發簡訊通知。我的手機是189的,向我的189手機郵箱發一個郵件,利用189郵箱的簡訊通知功能,我的手機就會收到一條簡訊。

先用 ifconfig 看一下有幾個網絡卡

[email protected]:~# ifconfig

br-lan    Link encap:Ethernet  HWaddr 64:09:80:18:7B:C0  

          ...

eth0      Link encap:Ethernet  HWaddr 64:09:80:18:7B:C0  

          ...

pppoe-wan Link encap:Point-to-Point Protocol  

          ...

wl0       Link encap:Ethernet  HWaddr 64:09:80:18:7B:C2  

          inet6 addr: fe80::6609:80ff:fe18:7bc2/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1003 errors:0 dropped:0 overruns:0 frame:0

          TX packets:602 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:176410 (172.2 KiB)  TX bytes:103339 (100.9 KiB)

          Interrupt:13 

wl1       Link encap:Ethernet  HWaddr 64:09:80:18:7B:C1  

          inet6 addr: fe80::6609:80ff:fe18:7bc1/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:4042 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2064 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:869980 (849.5 KiB)  TX bytes:832223 (812.7 KiB)

          Interrupt:4 

wl0, wl1 分別是兩張WIFI網絡卡,每個生成一個SSID

再用命令 iwinfo 檢視一下某個網絡卡下有多少個連線使用者、MAC碼分別是什麼

[email protected]:~# iwinfo wl1 assoclist

D0:33:AE:5F:63:AE  -50 dBm / -95 dBm (SNR 45)  0 ms ago

RX: 1.0 MBit/s                                     0 Pkts.

TX: 65.0 MBit/s                                    0 Pkts.

7C:E1:D3:EA:81:D5  -57 dBm / -95 dBm (SNR 38)  0 ms ago

RX: 130.0 MBit/s                                   0 Pkts.

TX: 130.0 MBit/s                                   0 Pkts.

每三行是一個連線使用者的資訊:   D0:33:AE:5F:63:AE  這個是MAC碼,-50 dBm 這個是它的訊號強度(根據這個值可以判定手機與路由器的距離及其變化)

開始編寫Shell指令碼,儲存到 /etc 目錄下,檔名為 smart_wifi

[email protected]:~# cd /etc
[email protected]:/etc # vi smart_wifi
指令碼內容如下:
#!/bin/sh
MAC="E0:19:1D:E4:22:25"
URL="http://192.168.31.131/miwifi/find.php?mac="

#check duration, in seconds
interval=2

#To avoid notify continously, last_time is the last time we find the MAC
last_time=$(date +%y%m%d%H%M%S)
let last_time=last_time-interval-interval

#Function: Find MAC address in associated users , query the url while matched. return 1 if found, return 0 if not found
find_mac() {
  #Use ifconfig to find interface which name starts with wl
  ifconfig | grep wl[0-9] | awk '{print $1}' | while read WLAN
  do
     #Use iwinfo to find MAC address of connected users
     iwinfo $WLAN assoclist | grep dBm | awk '{print $1}' | while read MAC1
     do
        #if MAC1 address is the target we want
        if [ $MAC1 = $MAC ]
        then       
          #Calculate time passed since last_time
          this_time=$(date +%y%m%d%H%M%S)
          let time_passed=this_time-last_time
          let interval_min=interval+1
          if [ $time_passed -gt $interval_min ]
          then 
              #construct the url , append the MAC address to the end
              QUREY_URL="${URL}${MAC}"
              #Use wget to query the url
              wget -q -O web_response $QUREY_URL
              echo "FIND $MAC"
              return 1
          fi
        fi
     done
  done
  return 0
}


#Main program: it's a dead loop,  exec find_mac() every n seconds(defined by interval)
while [ 1 -lt 2 ]
do
    if find_mac
    then
       #if found, update last_time
       last_time=$(date +%y%m%d%H%M%S)
    fi
    sleep $interval 
done

MAC是要找的MAC地址(即老婆大人的手機MAC碼)

URL是外部網站URL,  訪問時會把實際MAC作為一個引數送給網站。

指令碼中URL為LAN的,實際使用時設在公網上即可

指令碼註釋用了英文

程式採用了輪詢制,每隔一段時間找一次。

主程式是一個死迴圈,每隔 interval 秒執行一次 find_mac 函式,

interval值定義了每隔多少秒找一次

find_mac() 函式是查詢MAC碼的函式。如果當前WIFI使用者中找到MAC碼,  則訪問URL(該URL將發出簡訊),返回值1. 如找不到,返回0  

如果一個手機持續連線WIFI,則每次查詢時均可找到它,如果不斷髮簡訊是很煩人的,所以程式中採用了一個變數last_time記錄上一次找到MAC碼的時間,如果是連續找到,則不會觸發網頁。

不多解釋了,自己看吧

為了讓smart_wifi能執行,不要忘記賦予它執行的許可權,命令如下:

[email protected]:/etc # chmod +x smart_wifi

步驟四:寫一個網頁(URL), 用於接收併發送簡訊 (我用的是PHP)

<?php

if (isset($_GET['mac'])) {
	mail("[email protected]","Warning: Your wife is home.", "You know what to do");
	echo "ok";
} else 
	echo "error";

?>

發簡訊的實現:我的手機是189的,程式中向我的189手機郵箱發了一個郵件,利用189郵箱的簡訊通知功能,我的手機就會收到一條簡訊, 內容如下:

Warning: Your wife is home.



步驟五: 執行Shell指令碼,看看實際效果

再回到 小米路由器 SSH中, 執行以下命令

[email protected]:~# /etc/smart_wifi &
命令中最後這個 "&" 符是讓它在後臺執行

要停止指令碼執行,可以用 ps | grep smart_wifi 命令檢視程序,再用 kill 命令幹掉它

執行效果:  OK了,老婆一出現,連線上WIFI, 則我的手機將收到一條簡訊

有點聰明WIFI的感覺了!

最後小結:

1, 實際上,很多路由器都是OpenWrt的,這個指令碼同時可以在上面執行,不限於小米路由器。

2, 只要有想像力,這個指令碼乾點別的什麼也是可以的,比如:你一進門,燈就自動開了。你一靠近電視機,電視機就亮了。

3, 上述示例中,如果重啟路由器,指令碼並不會自動啟動。實際運用中,應該再寫一個服務,開機自啟動 (這個的做法俺賣個關子,不說了。。。)

參考:

相關推薦

小米路由器變成一個聰明WIFI(1)有人回家簡訊告訴

我想讓我的小米路由器變成一個聰明的WIFI,idea是這樣的:當老婆回到家,小米路由器就自動發一條簡訊告訴我。 折騰了幾天,搞定,分享一下: 我的路由器型號:小米路由器mini (129元在官網淘的) 步驟一:首先要開啟小米路由器SSH, 獲得root       這

小米路由器刷Xiaomi Mi WiFi Mini openwrt

Current Stable Release - OpenWrt 18.06.1,released on August, 18th 2018.       there is also PandoraBox firmware for

每天一個liunx命令(1) echo命令

echo命令用於在終端顯示字串或變數 格式為:echo 【字串|變數】 1). 將 echo 命令的字串輸出到終端:     [[email protected] ~]# echo helloworld     h

一個遞迴函式DigitSum(n)輸入一個非負整數返回組成的數字之和 例如呼叫DigitSum(1729)則應該返回1+7+2+9的和是19

#include <stdio.h> #define _CRT_SECURE_NO_WARNINGS 1 int DigitSum(int i) { int sum = 0; int j = 0; if (i != 0) { j = i % 10; i = i /

小米手機承諾如賺到了太多錢會將部分利潤歸還給客戶

生態系統 生活方式 分享圖片 記錄 提升 智能家居 質量 設計 消費 中國智能手機制造商小米今年發布了一個公開上市計劃,並做出了一個獨特的承諾:如果它賺到了太多錢,它就會將大部分利潤歸還給客戶。 該公司表示,它將永遠將智能手機,智能家居設備和其他硬件的稅後凈利潤率

如何用戶主動分享小程序極限工坊來告訴

滿足感 ffffff 獲取 col color 測試 images 便宜 吸引 在不觸碰底線的情況下,如何讓小程序具備傳播和人感染性? 小程序上線至今,已經有了很多推廣方式,只要願意花錢花心思,推廣根本不是難事。 小程序寄生於微信生態,研究微信生態下的傳播規律成為重中之重。

【按鍵】[獨立按鍵] - 1 單擊雙擊三擊以及N擊

此按鍵程式的實現的功能是單個獨立按鍵的[單擊],[長按],[雙擊],[三擊]以及[多擊]。本文分為三個部分, 第一個部分是說[單擊],[長按]的程式; 第二部分是講[雙擊]; 第三部分是講[三擊],[N擊]; 一、 [單擊]、[長按]程式 1. 簡單介紹

一個尖括號能幹什麼一個笑臉開始(為了支援互動,它又增添了JavaScript。HTML頁面也越來越臃腫。於是CSS便誕生了。API和核心程式碼的出現使HTML能夠訪問更復雜的軟體功能--支援更高階的互動和雲服務整合。這就是今天的HTML5)

一個尖括號 < 一個尖括號能幹什麼 < ? 你可以編出一頂帽子 <(:-p 或一張笑臉 :-> 再或者更直接一些   20世紀90年代初,html作為一種簡單標記語言面世,用於在網際網路上顯示超文字。經過發展,html逐漸包含圖片和佈局設計功能。為了支援互動,

您如何設定一個在買家下訂單後的”第60秒“簡訊通知賣家發貨您需要考慮的是 像淘寶一樣的大併發量的訂單。

問題描述:讓您做一個電商平臺,您如何設定一個在買家下訂單後的”第60秒“發簡訊通知賣家發貨,您需要考慮的是 像淘寶一樣的大併發量的訂單。   1、具有排序功能的佇列 2、Redis+定時器   思路 1   原理:第一種思路是延遲佇列實現的原

並行作業1MPI安裝及示例程式執行

執行MPI程式 系統採用vm下ubuntu16.04 一、MPI系統安裝 1.1 安裝環境 (1)作業系統:Ubuntu 16.04.4 (64位)。 (2)g++ 版本:gcc version 5.4.0 1.2 安裝包下載地址及安裝包 (1)下載地址:http

一個好的管理者場上暴君場下朋友;工作魔鬼生活好人

不要放縱紀律,不要對制度寬容,這是對員工的不負責;要幫助員工成長,提升收入,獲得更體面的生活,這是對員工最大的負責。胡林翼曾送給晚年的曾國藩一副壽聯:“以雷霆手段,顯菩薩心腸”。曾國藩閱後百感交集、熱淚盈眶。 管理者應該是什麼樣子的?   1、你是個好人,但不是個好的管理

(79)【按鍵】[獨立按鍵] - 1 單擊雙擊三擊以及N擊

此按鍵程式的實現的功能是單個獨立按鍵的[單擊],[長按],[雙擊],[三擊]以及[多擊]。本文分為三個部分, 第一個部分是說[單擊],[長按]的程式; 第二部分是講[雙擊]; 第三部分是講[三擊],[N擊]; 一、 [單擊]、[長按]程式 1. 簡單介紹本按鍵程式的單擊和長按 首先說一下單擊,

問題 5位運動員參加了10米臺跳水比賽有人他們預測比賽結果 A選手說B第二我第三; B選手說我第二E第四; C選手說我第一D第二; D選手說C最後我第三;

5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果   A選手說:B第二,我第三;   B選手說:我第二,E第四;   C選手說:我第一,D第二;   D選手說:C最後,我第三;   E選手說:我第四,A第一;   比賽結束後,每位

俞敏洪:三件人幸福的事情有人有事做有所期待——經典的人生需要效仿

1 這個世界上最正確的是跟自己比,想一想今天是不是比昨天進步了一點,想一想明年是不是比今年更加好一點。想一想,10年以後的你是不是比今年的你要更加出色; 2 一個人只要心中懷有詩意,就已經達到了詩的境界;而一個人生活的最高境界,就是詩意的生活。詩意的生活是一種感覺,是一種把現實生活中瑣碎的情感昇華為美好情感

Qt問題1編譯出錯退出程式碼2

       初次使用Qt,建立了簡單的工程,編譯之後出現錯誤如下: Cannot find file: C:\Users\102\Desktop\codes\learnQt\QStackedWidg

等了 1 個多月自己動手了

Photo @https://danielbachhuber.com/ 文 | 白科 有人問:開源是為了什麼? 這裡有一些

關於破解廣州天翼校園 + 小米路由器實現自動上網 突破wifi限制

關於破解廣州天翼校園 + 路由器刷韌體 實現自動上網 突破wifi限制 有位大神告訴我發現了github上有人破解了廣州天翼校園加密。具體倉庫請點選連結EsDialerGD 程式碼實現了認證和keep請求。 接下來我會介紹如何通過以上程式碼完成小米路由器3g

小米路由器3G如何解決USB3.0 5G WiFi速度慢的問題

經常玩電腦,希望家裡有個輕 nas,小米路由器是一個不錯的選擇,tbw買了一個小米路由器3G看重的是快速的速度(usb3.0 5G Wifi),及小米的可拓展性,使用usb3.0的usb介面,且使用