羽山家裡 3WA 主機用的是中華電信 ADSL 100M / 40M
最近幾個月,似乎常常會遇到數據機當機,當機後是網路完全中斷
電視 MOD 也無法看,嘗試用 192.168.1.1 連小烏龜會完全連不到
區域網路的功能也完全失效~
但數據機的燈還是一直閃不停,看起來好像都正常,很奇怪的狀況
除了手動按電源把小烏龜關掉再開啟,好像沒有更好的方法了
想請人來換小烏龜,但常常有這個念頭時,小烏龜又正常,總之斷線的不是很頻繁
短則一天發生二~三次,長則三、五天一次,有時好幾個禮拜都正常
如果平時在家裡還行,上班時斷線臨時需要查資料就很不方便
羽山的筆記都放在網站裡面
原本打算用Arduino ESP8266製作,但考量小板長時間連線
要加掛RJ45模組,或用wifi,但小板的wifi跟紀錄都要花更多時間驗證
未知的領域有點太寬,這次就試看看以前大學時另一組朋友玩的專題
Serial Port 來作一些微自動化控制吧!
所需要的材料:
1、勇氣
2、牆壁插座 1P 一組 ( 40$ )
3、插座配線盒 ( 20$ )
4、RS232 9PIN 母 焊接型 ( 10$ )
5、5V 繼電器,Arduino 練習用的即可 ( 25$ )
6、110V 插頭電線 ( 25$ )
7、豆腐頭變壓器 AC 110V -> DC 5V 1A ( 30$ )
8、USB 線 ( 15$ )
9、(選配) 主機板輸出 Serial (40$) 或 USB 轉 Serial 線 ( 90$ )
10、焊槍
11、單芯線、多芯線
12、3PIN 接頭
13、插 PIN 母 x 2
14、熱縮套管
15、(選配) RS232 公/母 延長線 1.8m ( 60$ )
16、麵包板
17、LED
18、電阻 330Ω 1/2w
19、三用電表
20、十字起子(小支、PH2)
21、插座用的單芯銅電線 2.0mm 一小段
有的主機板背後本身就有 Serial Port ,現在新的幾乎都沒有了
可以考慮直接買 USB to Serial 比較方便,Windows、Linux 都能直接使用
主機板後面的 Serial Port 常是公接頭,所以去電子街買了一個母接頭
Serial 的接腳排列如上圖的數字
這個電路主要會用到 Pin 4的 DTR 跟 Pin 5 的 GND
夾好
把線焊上
焊好了
插到麵包板上試看看
將 USB 線接上,拿線接出來量看看
程式未執行時, 1.8 mV
程式執行後可量到 5.06V
程式是把 DTR 設成 ON
使用python開發,各版本應該都 ok,我是使用 python 2.7 (Linux) python 39-32 (Windows)
需要先安裝 pyserial,然後在裝置管理員裡看看剛才插上的 UsbToSerial 的 Port 是多少
# pip install pyserial
import serial
#windows 裡直接寫 com7 即可 7 要看裝置管理員多少就寫多少
#linux 裡要寫 /dev/ttyUSB0 (插上線後可以輸入 dmesg 看看)
ser = serial.Serial("com7",9600,timeout=1)
ser.setDTR(True) #設定 DTR True
ser.close() # 養成習慣,執行前要先關,免得程式 crash...
ser.open()
time.sleep(5) # 不這麼作的話,程式一結束,DTR就自動 Low Voltage 了...
ser.close()
在windows試看看
插顆 LED 跟電阻 330Ω 試試
試看看,感覺滿順利的,接下來去買裝配的盒子
小烏龜用的是普通的插頭
配線盒
便宜就好
拿回家
拆開
一小段單芯銅電線、插頭線
用這個3pin 小接頭
剝線
插頭線插入,頭尾打個結電線比較不會跑
纏在單芯線上,單芯線要夾起來
補些錫
熱縮
接下來 RS232 母接頭要裝上
比對位置
量寬 10.26mm
量長邊高 18.70mm
短邊高 15.20mm
麥克筆畫線
美工刀用打火機加熱
切
能裝上了
剛才練習的線不夠長,加長
焊接
不知道 Serial 的電夠不夠推的動 Relay 呢...
試看看
將 VCC 跟 In 接在一塊,然後地線接 GND
嗯...
要固定母座了,再點二個小黑點
鑽頭
插上試試
鎖孔
鎖上銅柱
塞入繼電器
插上電源座
插
裝上
蓋上,實際測試發現電流真的不夠,USB 轉 Serial 後的電源推不動 Relay...
嘗試找了9支腳都沒有 5V 電,哭啊...
只好犧牲一個廉價豆腐頭...這種阿陸仔的豆腐頭插一般插座都會太鬆
拿來用在這個地方剛好
把 110V 跨接到豆腐頭,就有比較大的 5V 電壓電流給繼電器使用
變得有點擠了 XD
接續電器的地方要使用「常開」的腳位
因為 Serial DTR 平常都是低電位,在訊號沒有餵入時
都是常開的那腳可以正常導通
給訊號後,常開的就會斷開
總算塞進去,組裝完成
測試看看
拿了一個夜燈的燈座試看看,平常訊號未送時,就正常過電
當 Serial DTR 變 5V後,插座就斷電
作好的成品,左邊是可控插座,右邊是 UsbSerial
這個線還滿好用的~很適合練習
完成了^_^
程式碼:https://github.com/shadowjohn/USB_TO_SERIAL_RELAY
在3wa 的資料庫,加開一個 connection 的資料表,用來儲每分鐘的連線紀錄
id 流水號
datetime 時間
on_off 指的是能不能連的到 168.95.1.1, 1 連的到;0 連不到
is_call_stop_modem 是否有呼叫程式關小烏龜 null 或 1
delay_ms 當連線正常,紀錄一下回應的時間
notes 如果有呼叫程式關小烏龜,順便紀錄看看執行的過程有沒有錯誤
程式流程是每分鐘都會 ping 168.95.1.1 中華的 dns 一次
如果連續三次失敗,且最近10次沒有關機過小烏龜,就會關小烏龜
從上面可以看到小烏龜被關掉15秒再開機,要經過約2分鐘才能再度連線上網
主程式使用說明
最終的電路就這樣嘍~
看來是成功了,好期待小烏龜當機哦…哈哈哈哈
接著觀察了半個月左右,有抓到 2次 斷線
https://59.126.75.42/demo/php/connection/
寫了一個簡單的圖表來現在從開始到現在,每分鐘 Ping Hinet DNS
最近的三天顯示完整的資料,約 3 * 24 * 60 = 4320 筆
超過 3 天以上的資料,顯示所有斷線紀錄資料,並抽樣取 2000 筆來作圖表的顯示
這樣顯示的速度就相當快,資料量也不會太多
紅色的資料代表斷線,藍灰色的代表重啟小烏龜
為了讓資料一起呈現在圖表,所以斷線跟重啟小烏龜的點點,Y軸 預設約為 43.85
用來區分位置,所以「重啟小烏龜的點點」就是斷線資料 Y 軸 + 0.01 = 43.86
連續三分鐘都是紅色斷線,就會觸發讓 RELAY 斷電 15秒後再過電
於是等約2分鐘網路即能正常恢復連線
讚啦^_^~
2022-03-02 補充:
自從配置了斷線終結者後,從去年11月中跑到現在大概4個月
發生了 102 次斷線,其中還觸發了 9 次重開小烏龜
從圖表來看重開小烏龜後,都可以在2分鐘內馬上恢復網路連線,這真是太好了
久久沒看這個網頁,發現最近一次重開就在今天早上 :)
加了一個簡單的 filter,點了就可以知道什麼時間點系統有重開小烏龜
偶發性斷線的問題總算也是自動化根除^~^
2022-12-07 補充:
追蹤了一年,斷線時間 1217 分鐘
累計重開小烏龜次數:128 次
斷線後會自動恢復就是爽~~~