script ตรวจสอบและสั่ง Restart USB WiFi ของ Raspberry Pi อัตโนมัติ

ปัญหาของคนที่ใช้ USB WiFi กับ Raspberry ที่มักจะเจอกันก็คือ การ loss ของสัญญาณ WiFi ไม่ว่าจะเป็นการ disconnect โดยการถูกปิด router หรือสัญญาณหายก็ตามแต่ หลังจากนั้นแล้ว WiFi ของเราไม่ได้มีการ connect เข้าสู่ระบบโดยอัตโนมัติครับ วิธีการก็คือต้องมีการสั่ง restart ตัว Raspberry Pi ใหม่ แต่ก็ไม่สะดวกใช่ไหมครับ ถ้าหาก Raspberry Pi ตัวนั้นมันอยู่ห่างเราหลายร้อยกิโลเมตร วันนี้เรามี Solution ที่ผมได้ทดลองใช้ แล้วมัน work ดีจริงๆ มาแนะนำกันครับ พร้อมแล้ว ตามกันมาได้เลยครับ

rpiwifi-001

หลักการก็คือ

ตัวสคริปจะเป็น shell script นะครับ คือจะมีการ ping ไปที่ IP Address ของ rounter ภายในเครือข่าย เพื่อตรวจสอบดูว่ามีข้อความตอบกลับหรือไม่ ถ้ามีการตอบกลับก็แสดงว่า WiFi ยังทำงานอยู่ แต่ถ้าไม่มีการตอบกลับ ก็สั่ง restart WiFi เลยครับ ซึ่งระยะเวลาในการ ping เราจะใช้ crontab เป็นตัวช่วย ถ้าใครยังไม่รู้ว่า crontab คืออะไรและใช้งานอย่างไร ติดตามได้ที่บทความเรื่อง “การใช้ crontab ตั้งเวลาให้ script ใน Raspberry Pi ทำงานอัตโนมัติ” ได้เลยครับ

วิธีการสร้าง

เพื่อไม่ให้เป็นการเสียเวลา เรามาทดลองสร้างกันเลยครับ

ขั้นแรก ส้รางไฟล์ shell script ขึ้นมาก่อน โดยใช้คำสั่ง

nano testwifi.sh

หลังจากนั้นก็ก๊อบ สคริปข้างล่างนี้ใส่เข้าไปเลยครับ

#!/bin/bash

TESTIP=192.168.1.1

ping -c4 ${TESTIP} > /dev/null

if [ $? != 0 ]
then
    logger -t $0 "WiFi seems down, restarting"
    ifdown --force wlan0
    ifup wlan0
else
    logger -t $0 "WiFi seems up."
fi

ให้ตรวจสอบที่คำสั่ง TESTIP=192.168.1.1 นะครับ ให้เปลี่ยนได้ให้ตรงกับ IP Address ของ Rounter ของ Network ของแต่ละคนนะครับ เดี๋ยวจะงงว่าทำไมมันไม่ทำงาน 555+

ขั้นตอนต่อไป ให้ save ไฟล์ testwifi.sh ที่เราสร้างขึ้นครับ ออกมาที่หน้า command แล้วใช้คำสั่ง

chmod +x testwifi.sh

หลังจากนั้นเรียบร้อยครับ ตรวจสอบโดยใช้คำสั่ง ls ดูว่า script เราพร้อมรันไหม โดยดูที่สีครับ ถ้ากลายเป็นสีเขียวนั้นก้แสดงว่าพร้อมที่จะ execute ได้

rpiwifi-002

ขั้นตอนต่อมานะครับ เราก็เข้าไป set crontab เพื่อสั่งให้สคริปของเราทำงานตามเวลาทีเรากำหนดไว้ ในตัวอย่างผมจะสั่งให้มีการตรวจสอบ USB WiFi ทุกๆ 5 นาทีนะครับ เราก็เข้าไปเปิดไฟล์ crontab เพื่อตั้ง schedual โดยใช้คำสั่ง

sudo nano /etc/crontab

หลังจากนั้นให้เพิ่มคำสั่งนี้ไปที่บรรทัดสุดท้ายของไฟล์ crontab ครับ

*/5 * * * * root /home/pi/script/testwifi.sh

เสร็จแล้ว save file crontab แล้วสั่ง restart Raspberri สักหนึ่งรอบนะครับ หลังจากนั้น เราก็มาตรวจสอบว่า script ที่เราเขียนไว้ทำงานอัติโนมัตหรือเปล่าโดยการเข้าไปดูใน log message ครับ

ใช้คำสั่ง

tail -20 /var/log/messages

เสร็จแล้วสังเกตที log น่ะครับ ถ้าเห็นลักษณะแบบนี้แสดงว่า script ในการตรวจสอบ USB WiFi ของเราพร้อมทำงานแล้ว

rpiwifi-003

 

เรียบร้อยแล้วครับ คราวนี้ก็ไม่ต้องเป็นห่วงว่า raspberry Pi ของเราจะถูกตัดขาดระบบ network แล้วครับ เพราะมีการสั่งตรวจสอบ WiFi Connection อยู่ตลอดเวลา

แล้วพบกับบทความสนุกๆ ใหม่ตอนหน้าครับ สวัสดีครับ …

credit: http://root42.blogspot.com/2013/03/how-to-make-raspberry-pi-automatically.html

Leave a Comment