DEV Community

loading...
Cover image for Home Automation - 2 - Zigbee & Aqara Water Leak Sensors

Home Automation - 2 - Zigbee & Aqara Water Leak Sensors

atthavit profile image Atthavit Wannasakwong ・3 min read

หลังจากตอนที่แล้ว เราได้ 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
  • 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 บาท

Alt Text
มันก็จะเป็นแค่ usb เล็กๆแบบในรูป และสามารถต่อกับอุปกรณ์ต่างๆที่ใช้ Zigbee ได้ ไม่ว่าจะยี่ห้ออะไร อันนี้ก็เป็นข้อดีอีกอย่างหนึ่ง เพราะถ้าเราจะใช้ sensor ของทั้ง Aqara และ IKEA เราก็ไม่จำเป็นต้องซื้อ Hub แยก หรือใช้แอพแยกของแต่ละยี่ห้อ เราเอามันมารวมกันอยู่ใน Home Assistant ได้เลย

พอเราได้ ConBee II มาแล้ว ก็เอามาต่อกับคอม จะเป็นคอมเครื่องเดียวกับ Home Assistant ก็ได้ แต่การต่อควรใช้สาย USB extension เพื่อป้องกันสัญญาณรบกวนจากคอม ซึ่งเว็บ ConBee ก็แนะนำเรื่องนี้ไว้ด้วย
Alt Text

พอต่อ 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
Alt Text

แล้วก็จะมีหน้าให้หาหลอดไฟ ให้กด Proceed without lights ไปก่อน
Alt Text

ทีนี่ถ้าเรากลับไปที่ Home Assistant กดไปที่ Configuration -> Integrations จะเจอว่ามันหา deCONZ เจอแล้ว
Alt Text

หลังจากนี้ทุกอย่างที่เราเพิ่มเข้าไปใน deCONZ จะมาโผล่ใน Home Assistant เอง

Aqara Water Leak Sensor

Sensor แรกที่จะเอามาต่อเข้า Home Assistant คือ sensor จับว่ามีน้ำนองอยู่หรือไม่ การจะต่อ sensor เข้า Home Assistant เราจะต่อผ่าน deCONZ ให้ deCONZ เป็นตัวกลางระหว่าง Home Assistant และ sensor

วิธีต่อ sensor เข้ากับ deCONZ คือไปที่ deCONZ -> เลือก Sensors จากเมนูด้านซ้าย
Alt Text

กด Add new sensor -> เลือก Other
Alt Text

แล้วกดค้างที่ water sensor ประมาณ 5 วินาทีเพื่อ reset มัน deCONZ จะได้หาเจอ
Alt Text

หลังจากไฟสีฟ้ากะพริบที่ตัว sensor deCONZ ก็จะหาเจอ ถ้าไม่เจอลองเอา sensor ไปใกล้ๆตัว ConBee แล้วกดใหม่นะครับ
Alt Text
พอหาเจอแล้วมันจะขึ้นแถบสีเขียวแบบในรูป

ถ้ากลับไปดูที่ 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 ก็จะได้แบบนี้
Alt Text

ถ้าลองเอา sensor ไปวางไว้ตรงที่มีน้ำในหน้าเว็บก็จะขึ้นว่า Wet
Alt Text

แจ้งเตือนผ่าน 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
Alt Text

โทรเตือนด้วย Twilio

ถึงมันจะเตือนผ่าน slack มาแล้ว แต่บางทีเราก็ไม่ได้หยิบมือถือมาดู notification ตลอด หรือบางที่อาจจะไม่มีเน็ต ทำให้เราอาจจะพลาดที่มันเตือนได้ และน้ำรั่วมันเป็นเรื่องใหญ่ ถ้าเรารู้ช้าไปนิดก็อาจจะทำให้น้ำท่วมบ้าน แต่เราสามารถใช้ twilio เพื่อให้ Home Assistant โทรหามือถือเราและเตือนมาเป็นเสียงได้

ขั้นแรกให้สมัคร Twilio จะใช้เป็น trial account ก็ได้ แต่ตอนมันโทรมา มันจะบอกว่าใช้ trial อยู่ จะน่ารำคาญหน่อยๆ แต่นานๆทีก็ไม่เป็นไร และต้องยืนยันเบอร์มือถือเราด้วย

เสร็จแล้วก็ต้องไปตั้งให้ Twilio มันโทรหาเบอร์เราได้ ไปที่ Programmable Voice
Alt Text

Calls -> Geo Permissions แล้วติ๊กที่ Thailand กด Save
Alt Text

แล้วเพิ่ม twilio เข้าไปใน config ของ Home Assistant เปิดไฟล์ configuration.yaml

twilio:
  account_sid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  auth_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Account SID กับ AUTH TOKEN เอามาจาก Twilio โดยกดไปที่ Dashboard ด้านซ้าย
Alt Text

แล้วก็เพิ่ม 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 โทรมา

Alt Text

ไฟล์ต่างๆที่ใช้ดูได้ที่นี่นะครับ https://github.com/atthavit/myblog/tree/master/home-automation-2-zigbee

Discussion (0)

Forem Open with the Forem app