การติดตั้ง Zigbee2MQTT สำหรับ Linux และใช้งานในเบื้องต้น#


Zigbee2MQTT#

ซอฟต์แวร์ประเภท Open Source ที่เป็นแพลตฟอร์มสำหรับการใช้งาน Smart Home มีอยู่หลายตัวเลือก เช่น Home Assistant, openHAB, Domoticz และ ioBroker เป็นต้น บทความนี้กล่าวถึง Zigbee2MQTT ซึ่งเป็นซอฟต์แวร์ที่สามารถนำมาใช้ในการพัฒนาแพลตฟอร์มสำหรับ Smart Home ได้เช่นกัน

Zigbee2MQTT ใช้ Nodejs (JavaScript Runtime Engine) ในการทำงาน มีความสามารถเชื่อมต่อกับอุปกรณ์ประเภท ZigBee Coordinator - USB Adapter / Dongle ผ่านทางพอร์ต USB-to-Serial ทำให้เครื่องคอมพิวเตอร์สามารถสื่อสารข้อมูลกับอุปกรณ์อื่นในเครือข่ายไร้สายด้วยโพรโทคอล IEEE 802.15.4 / ZigBee 3.0 และสามารถเชื่อมต่อกับ MQTT Broker ได้ด้วย หรือกล่าวได้ว่า Zigbee2MQTT ทำหน้าที่เป็นเกตเวย์ (Gateway) ที่เชื่อมต่อระหว่างเครือข่ายไร้สาย ZigBee กับ MQTT Broker

รูป: การใช้งานโพรโทคอล ZigBee สำหรับ Smart Home (Source: Connectivity Standards Alliance)

Zigbee2MQTT สามารถนำไปติดตั้งใช้งานได้กับคอมพิวเตอร์บอร์ดเดี่ยว (Single-Board Computer: SBC) เช่น บอร์ด Raspberry Pi ที่ทำงานด้วยระบบปฏิบัติการ Linux เช่น Raspberry Pi OS และ Ubuntu หรือจะทดลองใช้งานกับคอมพิวเตอร์ทั่วไปที่ใช้ Windows หรือ macOS ก็ได้เช่นกัน

ลองดูรายการอุปกรณ์ ZigBee End Devices ที่สามารถนำมาใช้ร่วมกับ Zigbee2MQTT ได้ ในปัจจุบันมีมากกว่า 2000 รายการ จากหลายผู้ผลิต เช่น โมดูลเซนเซอร์ประเภทต่าง ๆ สวิตซ์ไฟฟ้า หลอดไฟ LED ปลั้กไฟฟ้าที่ควบคุมการทำงานได้ เป็นต้น

 


ZigBee USB Adapters#

อุปกรณ์ ZigBee USB Adapters ที่ใช้งานได้กับ Zigbee2MQTT ส่วนใหญ่จะใช้ชิปของบริษัท Texas Instruments (TI) หรือชิปของบริษัท Silicon Labs ก็เป็นอีกตัวเลือกหนึ่ง เช่น

  • TI CC2530 และ CC2531 — ชิปรุ่นเก่า ทั้งสองรุ่นใช้ซีพียู 8 บิต (8051 Core) ทำงานอยู่ภายใน CC2531 มีความแตกต่างจาก CC2530 ตรงที่ความสามารถในการใช้งาน USB อย่างไรก็ตาม ก็ไม่แนะนำให้เลือกใช้ชิปทั้งสองสำหรับการใช้งานในอนาคต หรือใช้กับเครือข่าย ZigBee ที่มีขนาดใหญ่ (มีอุปกรณ์เชื่อมต่อจำนวนมาก)
  • TI CC2538 (Arm Cortex-M3), CC1352R (Arm Cortex-M4F) และ CC2652R / CC2652P (Arm Cortex-M4F) — ชิปรุ่นใหม่กว่า ใช้ซีพียู 32 บิต เหมาะสำหรับการใช้งานโพรโทคอล ZigBee 3.0 แต่มีราคาอุปกรณ์แพงกว่ารุ่นเก่า
  • Silicon Labs EFR32MG1x / MGM1x (Series 1) และ EFR32MG2x / MGM21x (Series 2) — ชิปทั้งสองรุ่นใช้ซีพียู 32 บิต ตระกูล ARM Cortex-M4F และ ARM Cortex-M33 ตามลำดับ

ตัวอย่างอุปกรณ์ ZigBee USB Adapters (ดูรายการอุปกรณ์: Zigbee2MQTT Supported Adapters) เช่น

  • Itead CC2531 USB Dongle
  • Itead / Sonoff Zigbee 3.0 USB Dongles ซึ่งมีสายอากาศภายนอก (External Antenna) และกล่องใส่ที่ทำมาจากอะลูมิเนียม (Metal Case)
    • "ZBDongle-P" (CC2652P) ใช้เฟิร์มแวร์ Z-Stack (ZNP) 3.x.0 Coordinator Firmware
    • "ZBDongle-E" (EFR32MG21) ใช้เฟิร์มแวร์ Silicon Labs EmberZNet Application Firmware / EmberZNet Serial Protocol (EZSP)
  • ZB-GW04 ZigBee 3.0 USB Dongle (EFR32MG21) v1.1 & v1.2 ทำงานได้เหมือน "ZBDongle-E" (EFR32MG21) แต่อาจไม่มีสายอากาศภายนอก และมีกล่องพลาสติก

 

รูป: อุปกรณ์ CC2531 USB Dongle

รูป: อุปกรณ์ Itead / Sonoff Zigbee 3.0 USB Dongle Plus (CC2652P) และสายอากาศภายนอก

รูป: ภายในอุปกรณ์ Itead / Sonoff Zigbee 3.0 USB Dongle-P (Source: Itead / Sonoff)

รูป: ภายในอุปกรณ์ Itead / Sonoff Zigbee 3.0 USB Dongle-E (Source: Itead / Sonoff)

ตาราง: เปรียบเทียบความแตกต่างของอุปกรณ์ ZBDongle-P และ ZBDongle-E

รูป: อุปกรณ์ ZB-GW04 v1.1 ZigBee USB Dongle (ไม่ใส่กล่องพลาสติก)

 

วิธีการติดตั้งหรืออัปเกรดเฟิร์มแวร์และอุปกรณ์ที่เกี่ยวข้องได้ ศึกษาได้จากบทความต่อไปนี้


การติดตั้ง Zigbee2MQTT สำหรับ Linux#

เนื่องจากการทำงานของ Zigbee2MQTT จำเป็นต้องใช้ NodeJS ดังนั้นให้ติดตั้ง NodeJS ในระบบให้พร้อมใช้งานก่อน และในบทความนี้ได้เลือกติดตั้ง NodeJS v14.x (อัปเดต: แนะนำให้ใช้ v18.x หรือสูงกว่า) โดยทำคำสั่งดังนี้

$ sudo apt install -y curl
$ curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt install -y nodejs

ทำคำสั่งตรวจสอบเวอร์ชันของคำสั่ง node (NodeJS)

$ node -v
v14.20.1

 

อัปเดต: ถ้าใช้เวอร์ชัน v18.x ให้ทำคำสั่ง

$ sudo apt install -y curl
$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
$ sudo apt install -y nodejs

$ node -v
v18.20.3

 

ขั้นตอนถัดไปคือ การดาวน์โหลดไฟล์ซอร์สโค้ดของ Zigbee2MQTT จาก Github (ทดลองใช้เวอร์ชัน v1.27.2) แล้วทำการติดตั้งโปรแกรมในระบบ โดยทำคำสั่งตามลำดับดังนี้

# Clone the Zigbee2MQTT repository.
$ git clone https://github.com/Koenkk/zigbee2mqtt.git

# Move the zigbee2mqtt directory to /opt
$ sudo mv zigbee2mqtt /opt

# Change the owner of the /opt/zigbee2mqtt directory.
$ sudo chown -R $USER:$USER /opt/zigbee2mqtt

# Change the current directory to '/opt/zigbee2mqtt'.
$ cd /opt/zigbee2mqtt

# Install package dependencies
$ npm ci

ก่อนเริ่มต้นการทำงานของโปรแกรม ZigBee2MQTT ให้สร้างและเปิดไฟล์ data/configuration.yaml ภายในไดเรกทอรี /opt/zigbee2mqtt โดยใช้คำสั่ง nano เพื่อตั้งค่าการใช้งานสำหรับ ZigBee2MQTT

$ nano data/configuration.yaml

เขียนข้อความต่อไปนี้ลงในไฟล์ดังกล่าว และบันทึกการแก้ไขลงไฟล์ (กดปุ่ม Ctrl+o แล้ว Enter) และจบการทำงานของ nano (กดปุ่ม Ctrl+x)

homeassistant: false
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  ## specify the IP address or hostname of your MQTT broker
  server: 'mqtt://localhost:1883'
  #user: xxxx
  #password: xxxx
serial:
  ## specify the serial COM port (e.g. /dev/ttyACM0, /dev/ttyUSB0)
  port: /dev/ttyUSB0
  ## specify the EmberZNet-based or Z-Stack-based adapter to be used
  #adapter: ezsp
  #adapter: ember
  adapter: zstack
advanced:
  ## specify the ZigBee channel number
  channel: 15
frontend:
  ## enable Web front-end for Zigbee2MQTT on port 8080
  port: 8080

จากตัวอย่างการตั้งค่าใช้งาน จะเห็นว่า ได้เลือกใช้ MQTT Broker แบบ localhost (127.0.0.1) หมายเลขพอร์ตเป็น 1883 (ไม่มีการเข้ารหัสข้อมูล ไม่ต้องระบุชื่อผู้ใช้และรหัสผ่านในการเชื่อมต่อกับโบรกเกอร์) ดังนั้นจะต้องมีการติดตั้งโบรกเกอร์ (เช่น เลือกใช้ Mosquitto) ไว้ในระบบแล้ว หรือจะลองเปลี่ยนไปใช้ Public MQTT Broker ก็ได้สำหรับการทดลองใช้งานในเบื้องต้น

ในส่วนที่มีชื่อว่า mqtt: มีการกำหนดชื่อหัวข้อเริ่มต้น หรือเป็น base_topic ให้เป็น zigbee2mqtt สำหรับการรับส่งข้อความต่าง ๆ ระหว่าง Zigbee2MQTT กับ MQTT Broker

permit_join: true หมายถึง อนุญาตให้อุปกรณ์อื่นสามารถเชื่อมต่อเข้ากับระบบเครือข่าย ZigBee ที่จัดการโดยอุปกรณ์ USB Dongle ที่ทำหน้าที่เป็น ZigBee Coordinator

ในส่วนที่มีชื่อว่า serial: มีการระบุหมายเลขพอร์ตอนุกรมซึ่งจะต้องตรงกับอุปกรณ์ USB Dongle ที่เสียบใช้งานอยู่ โดยทั่วไปจะเป็น /dev/ttyACM0 หรือ /dev/ttyUSB0

ในส่วนที่มีชื่อว่า advanced: มีการกำหนดหมายเลขช่องสัญญาณ channel: เป็น 15 โดยทั่วไปแล้ว ZigBee ที่ใช้ความถี่ในย่าน 2.4GHz จะมีช่วงความถี่ให้เลือกใช้ได้ โดยระบุเป็นหมายเลข 11 - 25 แต่แนะนำให้เลือกหมายเลข 15, 20 หรือ 25 เพื่อช่วยลดปัญหาการรบกวนกันของสัญญาณ WiFi

ในส่วนที่มีชื่อว่า frontend: true มีการเปิดใช้งาน Web Frontend สำหรับ Zigbee2MQTT ให้ทำงานแบบ localhost หมายเลขพอร์ต 8080 เป็นต้น

 

ทำคำสั่งเพื่อเพิ่มชื่อผู้ใช้เข้ากลุ่ม dialout ซึ่งจะทำให้ได้สิทธิ์ในการเข้าถึงอุปกรณ์ที่เป็นพอร์ตอนุกรม

# Add the current user to the 'dialout' group
$ sudo usermod -a -G dialout $USER

ลองทำคำสั่งต่อไปนี้ เพื่อให้ ZigBee2MQTT เริ่มต้นทำงาน

# Start ZigBee2MQTT 
$ npm start

รูป: อุปกรณ์ Sonoff USB Dongle Dongle-P และ Xiaomi MiJia ZigBee Sensor Device (WSDCGQ01LM)

รูป: ข้อความเอาต์พุตเมื่อโปรแกรม Zigbee2MQTT เริ่มทำงาน

ถ้าลองนำอุปกรณ์ เช่น Xiaomi MiJia Temperature & Humidity Sensor (WSDCGQ01LM) มาลองเชื่อมต่อเข้ากับ ZigBee Network โดยกดปุ่มที่ด้านข้างอุปกรณ์ค้างไว้ประมาณ 5 วินาที จะเห็นแสงสีน้ำเงิน กระพริบหลายครั้ง ซึ่งแสดงสถานะการเชื่อมต่อและเข้าร่วมกับเครือข่าย (ZigBee Network Joining)

รูป: ข้อความเอาต์พุตที่แสดงให้เห็นว่า มีอุปกรณ์ ZigBee Device เชื่อมต่อเข้ากับระบบ

รูป: ข้อความเอาต์พุตที่แสดงให้เห็นว่า มีอุปกรณ์ ZigBee Device เชื่อมต่อเข้ากับระบบ

รูป: ตัวอย่างข้อความเอาต์พุตที่แสดงข้อความแบบ JSON ที่ได้รับอุปกรณ์ Xiaomi MiJia Device (WSDCGQ01LM) ซึ่งมีข้อมูลตัวเลขเกี่ยวกับอุณหภูมิ ความชื้นสัมพันธ์ แรงดันของแบตเตอรี่ (หน่วยเป็นโวลต์) และระดับพลังงานของแบตเตอรี่ (หน่วยเป็นเปอร์เซ็นต์) เป็นต้น

รูป: หน้าเว็บของ Zigbee2MQTT Front-end แสดงรายการอุปกรณ์เซนเซอร์ที่เชื่อมต่อกับเครือข่าย ZigBee

รูป: หน้าเว็บของ Zigbee2MQTT Web Front-end แสดงข้อมูลล่าสุดที่ได้รับจากอุปกรณ์เซนเซอร์

 

เอกสารออนไลน์สำหรับการติดตั้งใช้งาน Zigbee2MQTT:


กล่าวสรุป#

บทความนี้นำเสนอการติดตั้งและใช้งาน Zigbee2MQTT ในเบื้องต้นสำหรับผู้ที่ใช้งานระบบปฏิบัติการ Linux ซึ่งอาจจะลองใช้งานในรูปแบบของ Ubuntu Desktop หรือ Ubuntu Virtual Machine หรือ บอร์ด Raspberry Pi ก็ได้

 


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2022-09-24 | Last Updated: 2024-06-21