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 ในการจัดการหนังสือที่เรามีกัน...
หากเราเรียนลงลึกไปในภาษาใหม่ ๆ อย่าง Python และ Java โดยเฉพาะในเรื่องของการจัดการ Memory ว่าเขาใช้ Garbage Collection นะ ว่าแต่มันทำงานยังไง วันนี้เราจะมาเล่าให้อ่านกันว่า จริง ๆ แล้วมันทำงานอย่างไร และมันมีเคสใดที่อาจจะหลุดจนเราต้องเข้ามาจัดการเองบ้าง...
ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...
เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...