By Arnon Puitrakul - 26 กรกฎาคม 2024
ก่อนหน้านี้เราใช้ Sonoff Zigbee Hub รุ่นแรกที่ Flash Tasmota เข้าไปแล้วมีปัญหาอุปกรณ์หลุดเรื่อย ๆ รวมไปถึงอาการที่อยู่ดี ๆ ZHA มัน Restart ตัวเองเฉยแบบ งง ๆ จนทำให้เราตัดสินใจว่าจะเปลี่ยนเป็น Zigbee Dongle ต่อเข้ากับ Synology NAS วันนี้เราจะมาเล่าวิธีการว่า เราทำยังไงถึงจะสามารถเชื่อมต่อ Dongle เข้ากับ Home Assistant ได้กัน
คำเตือน : Tutorial นี้มีการใช้งาน Shell ของเครื่อง ดังนั้น ผู้ที่จะทำควรมีความรู้พื้นฐานเกี่ยวกับ Linux Command Line ด้วย
สำหรับ Dongle ที่เราใช้จะเป็น Zigbee Dongle ของ Sonoff โดย ถ้าเราไปหาซื้อดูมันจะมี 2 Model ด้วยกันคือ ZBDongle-E และ ZBDongle-P เท่าที่เราลองอ่านใน Forum ต่างประเทศมาพบว่า ตัวรุ่นที่ลงท้ายด้วย P มันชอบมีปัญหาการเชื่อมต่อ เราเลยซื้อตัวที่เป็น ZBDongle-E มาแทน ตรงนี้เราไม่ชัวร์ ถ้ามีใครใช้ตัวที่ลงท้ายด้วย P แล้วเป็นยังไงรบกวนทักหน่อย อยากรู้เหมือนกัน เพราะเท่าที่เรารู้คือ ตัว E และ P มันต่างกันที่ Zigbee Module ข้างในมันเป็นคนละรุ่นกัน
และเพื่อการติดตั้งที่ยืดหยุ่นมากขึ้น เราซื้อสาย Extension Cable มาด้วย มันเป็นสาย USB ตัวเมีย ไปตัวผู้ เพื่อให้เราสามารถเสียบตัว Dongle ออกห่างจากตัวเครื่อง เพื่อตั้งในตำแหน่งที่เราต้องการได้ เพราะเรากังวลว่า ถ้ามันอยู่ใกล้ ๆ เครื่องที่เป็นโลหะ อาจจะทำให้การรับสัญญาณทำได้แย่ลง รอบนี้อะไรลดความเสี่ยงได้ ลดให้หมด เอาชัวร์เรื่องสัญญาณไปเลย แต่ถ้าใครไม่อยากใช้ก็ได้นะ เราว่าไม่น่ามีปัญหาอะไร
การติดตั้งจริง ๆ ง่ายมาก เพียงแค่เราเสียบมันเข้ากับ Port ด้านหลังของ Synology NAS ของเรา อาจจะถามว่า แล้วมันเสียบ Port ด้านหน้าได้มั้ย จริง ๆ มันก็ได้แหละ เราลองใช้งานไป ไม่พบปัญหาอะไร แต่เราไม่แนะนำเพราะมันจะทำให้ตัวเครื่องดูไม่สวย ไม่เรียบร้อยเท่าไหร่ เป็นไปได้เสียบด้านหลังดีกว่า
> lsusb
เพื่อความมั่นใจว่า อุปกรณ์ถูกเชื่อมต่อกับ Synology NAS ของเราแล้วจริง ๆ ให้เรา SSH เข้าไปในเครื่องของเรา และรันคำสั่งด้านบน เป็นคำสั่งสำหรับให้เครื่องมัน List ออกมาว่า ณ ตอนนี้มีอุปกรณ์ USB ใดเชื่อมต่อกับเครื่องอยู่บ้าง ซึ่งมันควรจะต้องมีตัวที่เขียนว่า Zigbee Dongle Hub อยู่
หากเราลองเสียบแล้วไม่พบอุปกรณ์ขึ้นอยู่ แนะนำให้เช็คการเชื่อมต่อของ Dongle ว่ามันเสียบแน่นหรือไม่ หรือถ้าใช้ใช้ Extension Cable อยู่ อาจจะลองเอาออกแล้วเสียบตรงเข้าเครื่องดู หรือถ้าไม่รอดอีกก็.... รู้เรื่องละ
> ls /dev
บน Linux ทุกอย่างสามารถอ้างถึงได้ด้วย Folder บางอย่าง อุปกรณ์ที่เชื่อมต่อก็เช่นเดียวกัน โดยมันจะอยู่ใน /dev เพื่อให้มั่นใจว่าอุปกรณ์ของเราเชื่อมต่อเข้าใช้งานได้จริง ๆ มันควรจะต้องมีชื่อเช่น ttyUSB0 อะไรเทือก ๆ นั้น แต่ถ้าเราลองดูดี ๆ เราจะไม่เจอมันเลย นั่นเป็นเพราะ DSM7 ไม่มี Driver สำหรับ USB พวกนี้ ทำให้เราจำเป็นที่จะต้องทำการติดตั้ง USB Driver ซะก่อน
โดยให้เราเข้าไปดู สถาปัตยกรรมของ Synology NAS ที่เราใช้งานอยู่ว่าเป็นรุ่นไหน ให้เราดูที่ช่องที่เขียนว่า Package Arch เช่นของรุ่นเรา DS1621+ จะเป็น V1000 จำอันนี้ไว้ก่อนนะ
sudo su
modprobe usbserial
modprobe ftdi_sio
modprobe cdc-acm
cd /lib/modules/
sudo wget https://github.com/robertklep/dsm7-usb-serial-drivers/raw/main/modules/v1000/dsm-7.2/ch341.ko
sudo insmod /lib/modules/ch341.ko
sudo wget https://github.com/robertklep/dsm7-usb-serial-drivers/raw/main/modules/v1000/dsm-7.2/cp210x.ko
sudo insmod /lib/modules/cp210x.ko
sudo wget https://github.com/robertklep/dsm7-usb-serial-drivers/raw/main/modules/v1000/dsm-7.2/pl2303.ko
sudo insmod /lib/modules/pl2303.ko
sudo wget https://github.com/robertklep/dsm7-usb-serial-drivers/raw/main/modules/v1000/dsm-7.2/ti_usb_3410_5052.ko
sudo insmod /lib/modules/ti_usb_3410_5052.ko
# Configure an autoload script
cd /usr/local/etc/rc.d/
sudo wget https://github.com/robertklep/dsm7-usb-serial-drivers/raw/main/usb-serial-drivers.sh
sudo chmod +x usb-serial-drivers.sh
# Make sure your devices are recongnized
sudo /usr/local/etc/rc.d/usb-serial-drivers.sh sta
จากนั้นให้เรารันคำสั่งทีละตัว หรือจะเขียนเป็น Bash File แล้วรันเลยก็ได้ แต่ให้เราเปลี่ยนตรง wget แต่ละตัวให้ Address มันตรงกับสถาปัตยกรรมของเราด้วยนะ เช่นของเราใช้ DS1621+ มันก็จะเป็น v1000 ก็เปลี่ยนไปเป็นตัวที่เราใช้นะ
ls /dev | grep "ttyUSB"
หลังจากนั้น ให้เราลองรันคำสั่งด้านบนนี้อีกครั้ง รอบนี้ เราจะเห็น Folder ttyUSB ตามด้วยตัวเลขสักอย่างขึ้นมา เช่น ttyUSB0 แปลว่า เราพร้อมแล้วที่จะนำเข้าไปใช้งานกับ Home Assistant
ในการนำ Dongle เข้าไปใช้งานใน Home Assistant หากเป็น Docker Container ที่รันอยู่บน Container Service บน DSM เบื้องต้นมันจะยังไม่สามารถมองเห็น Dongle ที่เชื่อมต่ออยู่ได้ เราจำเป็นต้องเข้าไปเปิด การตั้งค่าที่ชื่อว่า Capabilities ให้เราเลือกเป็น Execute container using high privilege เพื่อให้ Container สามารถเข้าถึง System ได้ โดยเราต้องการให้มันสามารถมองเห็น Dongle ที่เราเสียบเข้าไป
หรืออีกวิธีคือ เราอาจจะต้อง Mount Volume เข้าไปแทน แต่อันนี้เราไม่แน่ใจว่า ปลายทางเราจะต้อง Mount ไปที่ไหนเหมือนกัน จากนั้นใน Home Assistant เราสามารถเปิด ZHA Integration ได้ตรง ๆ โดยมันจะขึ้นมาเลยว่า เจออุปกรณ์อยู่ เราก็เพิ่มไปตามนั้นได้เลย
หลังจากการใช้งานมาเกือบ ๆ เดือนแล้วเราพบว่า การเชื่อมค่อนข้างเสถียรกว่าการใช้ Zigbee Hub ที่ Flash Tasmota เข้าไปมาก ๆ อุปกรณ์ทุกตัวไม่เคยหลุดเลย นอกจากแบตหมดซะก่อน โดยเฉพาะกับประตู หน้าต่างที่ปิดเปิดบ่อย ๆ พึ่งรู้ว่า Zigbee Network ที่เสถียรมันดีขนาดนี้ ก่อนหน้านี้ตัดใจไปนานแล้วนะว่า ไม่อยากใช้ Zigbee แล้ว ว่าจะกลับไปใช้ WiFi เหมือนเดิม ยอมเปลี่ยนถ่านบ่อยหน่อยซะละ เราคิดว่า ถ้าใครติดปัญหาความเสถียร การเชื่อมต่อที่ติด ๆ หลุด ๆ เราว่าลองใช้ Dongle น่าจะพอช่วยได้อยู่นะ
Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...
อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...
นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...
จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...