หลังจากตอนที่แล้ว เราได้ Home Assistant ขึ้นมาแล้ว ในตอนนี้เราจะมาต่อมันเข้ากับ water leak sensor เพื่อให้มันแจ้งเตือนเราเวลามีน้ำรั่ว โดยแจ้งเตือนผ่าน Slack และโทรเข้ามือถือผ่าน Twilio
จากที่ผมอ่านๆมา อุปกรณ์ Home Automation มี protocol ที่นิยมและเหมาะกับ Home Automation อยู่ 2 อย่างคือ Zigbee และ Z-Wave หลักๆน่าจะเป็นเพราะมันใช้พลังงานน้อยมาก sensor ตัวนึงมีใช้งานได้นานเป็นปีๆแบตถึงจะหมด มันจึงเหมาะกับ Home Automation มาก ถ้าเราใช้อุปกรณ์พวกที่ต่อ wifi ส่วนใหญ่มันจะต้องต่อปลั๊กไฟเพราะมันจะกินไฟมากกว่าพวก Zigbee หรือ Z-Wave และบางที่บริเวณที่ติดอุปกรณ์อาจจะไม่มีปลั๊กไฟ ทำให้เราอาจจะต้องลำบากเดินสายไฟหรือใช้ถ่านแต่ก็ต้องเปลี่ยนถ่านเรื่อยๆ
แต่ในไทย Home Automation ยังไม่ค่อยนิยมกันเท่าไหร่ พวกอุปกรณ์ต่างๆจึงมีให้เลือกไม่มาก ส่วนใหญ่ถ้าถูกๆก็จะเป็นของจีน ซึ่งใช้ Zigbee กันเกือบหมด ตัวผมเองก็ยังไม่เคยซื้ออุปกรณ์ที่ใช้ Z-Wave เลย ในไทยที่เคยเห็นก็มีแต่ Zigbee เกือบหมด เช่น Aqara sensor, IKEA TRÅDFRI, Philips
Zigbee เลยเป็นทางเลือกที่ดีสำหรับคนไทยในขณะนี้ และในตอนนี้จะพูดถึง sensor ของ Aqara เป็นหลัก ซึ่งมันใช้ Zigbee ยี่ห้ออื่นที่ใช้ Zigbee ก็จะคล้ายๆกัน ไว้ผมจะเล่าในตอนต่อๆไป
- สิ่งที่ใช้
- ConBee II & deCONZ (~1700 บาท) + USB extension cable
- Aqara Water Leak Sensor (~400 บาท)
- แจ้งเตือนผ่าน Slack
- โทรเตือนด้วย Twilio
สิ่งที่ใช้
- ConBee II
- Aqara Water Leak Sensor
- Slack account สำหรับส่ง message เพื่อแจ้งเตือน
- Twilio account สำหรับการโทรแจ้งเตือน
ConBee II & deCONZ
ก่อนที่เราจะใช้ Zigbee sensor พวกนี้ได้ เราต้องมีตัวรับสัญญาณZigbeeก่อน Hubของแต่ละยี่ห้อก็เป็นตัวรับสัญญาณแบบนึง แต่ในโปรเจคนี้เราจะเอามันมาต่อเข้ากับ Home Assistant เราเลยต้องซื้อตัวรับสัญญาณแบบอื่นแทน ตัวเลือกก็มีให้เลือกไม่มากเหมือนเดิม ที่เคยเจอคนแนะนำมี ConBee II, CC2531 (zigbee2mqtt) ผมเลือกเป็น ConBee II สั่งมาจาก Amazon 1250 บาท บวกค่าส่ง, ภาษีไปอีกประมาณ 500 บาท
มันก็จะเป็นแค่ usb เล็กๆแบบในรูป และสามารถต่อกับอุปกรณ์ต่างๆที่ใช้ Zigbee ได้ ไม่ว่าจะยี่ห้ออะไร อันนี้ก็เป็นข้อดีอีกอย่างหนึ่ง เพราะถ้าเราจะใช้ sensor ของทั้ง Aqara และ IKEA เราก็ไม่จำเป็นต้องซื้อ Hub แยก หรือใช้แอพแยกของแต่ละยี่ห้อ เราเอามันมารวมกันอยู่ใน Home Assistant ได้เลย
พอเราได้ ConBee II มาแล้ว ก็เอามาต่อกับคอม จะเป็นคอมเครื่องเดียวกับ Home Assistant ก็ได้ แต่การต่อควรใช้สาย USB extension เพื่อป้องกันสัญญาณรบกวนจากคอม ซึ่งเว็บ ConBee ก็แนะนำเรื่องนี้ไว้ด้วย
พอต่อ ConBee ได้แล้ว การที่จะให้ Home Assistant คุยกับอุปกรณ์ที่ต่อกับ ConBee II ได้ จะต้องมี deCONZ เราจะรันมันด้วย docker-compose เหมือนเดิม เพิ่มไปใน docker-compose.yml
เดิมเลยก็ได้
version: '3'
services:
deconz:
image: marthoc/deconz:amd64-2.05.79
restart: unless-stopped
volumes:
- ./deconz:/root/.local/share/dresden-elektronik/deCONZ
devices:
- /dev/ttyACM0
ports:
- 8124:8124
- 8125:8125
environment:
- DECONZ_WEB_PORT=8124
- DECONZ_WS_PORT=8125
- DEBUG_INFO=1
- DEBUG_APS=0
- DEBUG_ZCL=0
- DEBUG_ZDP=0
- DEBUG_OTAU=0
ตรง devices
อาจจะต้องเปลี่ยนนะครับ ตามที่เราต่อ ConBee II
หลังจากมันขึ้นมาแล้ว ให้เปิด browser ไปที่ http://localhost:8124/
จะมีหน้าให้ตั้ง password
แล้วก็จะมีหน้าให้หาหลอดไฟ ให้กด Proceed without lights
ไปก่อน
ทีนี่ถ้าเรากลับไปที่ Home Assistant กดไปที่ Configuration
-> Integrations
จะเจอว่ามันหา deCONZ เจอแล้ว
หลังจากนี้ทุกอย่างที่เราเพิ่มเข้าไปใน deCONZ จะมาโผล่ใน Home Assistant เอง
Aqara Water Leak Sensor
Sensor แรกที่จะเอามาต่อเข้า Home Assistant คือ sensor จับว่ามีน้ำนองอยู่หรือไม่ การจะต่อ sensor เข้า Home Assistant เราจะต่อผ่าน deCONZ ให้ deCONZ เป็นตัวกลางระหว่าง Home Assistant และ sensor
วิธีต่อ sensor เข้ากับ deCONZ คือไปที่ deCONZ -> เลือก Sensors จากเมนูด้านซ้าย
กด Add new sensor
-> เลือก Other
แล้วกดค้างที่ water sensor ประมาณ 5 วินาทีเพื่อ reset มัน deCONZ จะได้หาเจอ
หลังจากไฟสีฟ้ากะพริบที่ตัว sensor deCONZ ก็จะหาเจอ ถ้าไม่เจอลองเอา sensor ไปใกล้ๆตัว ConBee แล้วกดใหม่นะครับ
พอหาเจอแล้วมันจะขึ้นแถบสีเขียวแบบในรูป
ถ้ากลับไปดูที่ Home Assistant -> Developer Tools
-> STATES
ก็จะเห็นว่ามี sensor นี้เพิ่มขึ้นมา
ต่อไปก็จะเพิ่ม Sensor นี้เข้าไปใน UI โดยการแก้ไฟล์ ui-lovelace.yaml
title: Home
views:
- title: Bedroom
cards:
- type: entities
title: AC
entities:
- switch.bedroom_ac
- type: glance
title: Sensors
entities:
- binary_sensor.kitchen_water
หลัง restart home assistant ก็จะได้แบบนี้
ถ้าลองเอา sensor ไปวางไว้ตรงที่มีน้ำในหน้าเว็บก็จะขึ้นว่า Wet
แจ้งเตือนผ่าน Slack
หลังจากที่ Home Assistant อ่านค่าจาก sensor ได้ แต่แค่อ่านค่ามันดูไม่มีประโยชน์เท่าไหร่ เราต้องทำให้มันส่ง message แจ้งเตือนมา จะได้รู้เวลามีน้ำรั่ว แล้วเราไม่อยู่บ้าน
ในโปรเจคนี้ผมจะให้มันส่งผ่าน Slack นะครับ เพราะใช้ Slack กับอย่างอื่นอยู่แล้ว แต่จริงๆ Home Assistant support อย่างอื่นอีกเยอะ เช่น Discord, Telegram, Pushbullet ลองดูได้ที่นี่ครับ
ขั้นแรกเราต้องสร้าง Slack app ก่อน แล้วเอา token มาใส่ Home Assistant เพื่อให้มันส่ง message ได้ วิธีสร้างตามนี้เลย
https://www.home-assistant.io/integrations/slack/
หลังจากได้ token มา ก็ให้เอามาใส่ใน configuration.yaml
ของ Home Assistant แบบนี้
notify:
- name: slack
platform: slack
api_key: xoxb-xxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
default_channel: '#home'
default_channel
จะเปลี่ยนเป็นอะไรก็ได้
แล้วก็เพิ่มส่วน automation ให้มันส่ง message เวลา sensor เจอน้ำติดต่อกัน 10 วิ
automation:
- alias: kitchen water leak
trigger:
platform: state
entity_id: binary_sensor.kitchen_water
to: 'on'
for:
seconds: 10
action:
- service: notify.slack
data_template:
message: Water detected in kitchen!
เสร็จแล้วก็ restart Home Assistant แล้วลองเอา sensor ไปวางไว้ที่เปียก
สักพักจะมี message เด้งมาบน slack
โทรเตือนด้วย Twilio
ถึงมันจะเตือนผ่าน slack มาแล้ว แต่บางทีเราก็ไม่ได้หยิบมือถือมาดู notification ตลอด หรือบางที่อาจจะไม่มีเน็ต ทำให้เราอาจจะพลาดที่มันเตือนได้ และน้ำรั่วมันเป็นเรื่องใหญ่ ถ้าเรารู้ช้าไปนิดก็อาจจะทำให้น้ำท่วมบ้าน แต่เราสามารถใช้ twilio เพื่อให้ Home Assistant โทรหามือถือเราและเตือนมาเป็นเสียงได้
ขั้นแรกให้สมัคร Twilio จะใช้เป็น trial account ก็ได้ แต่ตอนมันโทรมา มันจะบอกว่าใช้ trial อยู่ จะน่ารำคาญหน่อยๆ แต่นานๆทีก็ไม่เป็นไร และต้องยืนยันเบอร์มือถือเราด้วย
เสร็จแล้วก็ต้องไปตั้งให้ Twilio มันโทรหาเบอร์เราได้ ไปที่ Programmable Voice
Calls -> Geo Permissions แล้วติ๊กที่ Thailand กด Save
แล้วเพิ่ม twilio
เข้าไปใน config ของ Home Assistant เปิดไฟล์ configuration.yaml
twilio:
account_sid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
auth_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Account SID
กับ AUTH TOKEN
เอามาจาก Twilio โดยกดไปที่ Dashboard ด้านซ้าย
แล้วก็เพิ่ม twilio_call
เข้าไปใน notify
ที่เดียวกับ slack ที่ทำไว้ด้านบน
notify:
- name: slack
platform: slack
api_key: xoxb-xxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
default_channel: '#home'
- name: call
platform: twilio_call
from_number: +66xxxxxxxxx
แล้วก็เพิ่ม action เข้าไป ให้มัน notify ทั้ง slack และโทรผ่าน twilio
automation:
- alias: kitchen water leak
trigger:
platform: state
entity_id: binary_sensor.kitchen_water
to: 'on'
for:
seconds: 10
action:
- service: notify.slack
data_template:
message: &water_leak_message Water detected in kitchen!
- service: notify.call
data_template:
message: *water_leak_message
target: &phone_number +66xxxxxxxxx
หลังจากแก้หมดแล้วก็ restart Home Assistant แล้วลองเอา sensor ไปวางไว้ตรงที่มีน้ำดู ประมาณ 10 วิ จะมีทั้ง message slack และ twilio โทรมา
ไฟล์ต่างๆที่ใช้ดูได้ที่นี่นะครับ https://github.com/atthavit/myblog/tree/master/home-automation-2-zigbee
Discussion (0)