ปิดปั้มที่บ้านแบบ IoT Part 5: แจ้งเตือน และตั้งเวลา

จากตอนที่แล้วเราได้เซตให้ปิดปั้มเองเรียบร้อยแล้ว แต่ปัญหายังเหลืออยู่ว่าควรจะบอกด้วยว่าปิดปั้มแล้วเพื่อความชัวร์ (และใช้ debug เวลา VPN หลุดด้วย) และจะต้องต่อเวลาได้ในกรณีที่ซักผ้าอยู่ ในตอนสุดท้ายเราจะ ก็จะเพิ่มระบบ Notification เข้ามาครับ

โปรแกรม Home Assistant จะรองรับ Progressive Web App push ซึ่งสามารถ push ไปหา Chrome บน PC/Android ได้ และสำหรับ iOS จะต้องติดตั้งแอพ Home Assistant

สำหรับ PWA Push ทำดังนี้ครับ

  1. เข้าไปสมัคร Firebase Push Notification ที่ https://console.firebase.google.com
  2. เข้าไปที่หน้า project กดตรงประแจที่ Overview เลือก Cloud Messaging แล้วจด Server key กับ Sender ID ไว้

แล้วเพิ่ม config ว่า

ios:
notify:
  - platform: html5
    gcm_api_key: '...'
    gcm_sender_id: '...'

โดยระบุ gcm_api_key เป็น Server key ที่จดไว้ และ gcm_sender_id เป็น Sender ID ที่จดไว้

จากนั้นให้เอาอุปกรณ์เข้ามาที่หน้าเว็บของ Home assistant และ Add to home screen สำหรับ Android จากนั้นใน sidebar ให้เปิด Push Notification ซึ่งบน server จะเห็นมีไฟล์ html5_push_registrations.conf ปรากฏขึ้นมา ตรงนี้แนะนำให้ restart ทีนึง

สำหรับ iOS เมื่อเอาแอพเชื่อมต่อมาแล้วให้ restart Home Assistant ทีนึงก็ใช้ได้เลยครับ

จากนั้นเราจะเพิ่มกฎว่าถ้าไม่มีคนอยู่บ้านให้ push ทำได้ดังนี้ครับ

automation:
  - alias: Notify me when nobody's home
    trigger:
      platform: state
      entity_id: group.family
      from: home
      to: not_home
    action:
      - service: notify.html5_yui
        data:
          message: Nobody home!
      - service: notify.ios_my_love
        data:
          message: Nobody home!

โดยตรงชื่ออุปกรณ์ให้หาจากหน้า service ครับ (/dev-service)

ทดสอบแจ้งเตือนได้โดยกดที่ automation ที่เราสร้างมาใหม่แล้วกด Trigger ครับ จะได้แบบนี้

ตั้งเวลา

โจทย์ข้อสุดท้ายคือ สามารถตั้งเวลาปิดได้สำหรับเวลาซักผ้า ซึ่งเป็นปัญหาที่ผมนึกวิธีอยู่นานพอสมควร

วิธีที่ใช้คือ

  1. มี input slider component ตัวหนึ่งให้ลากตั้งเวลาได้
  2. ทุกๆ 1 นาที slider จะลดค่าลง 1
  3. เมื่อ slider เหลือ 0 นาที ให้ปิดปั้ม
  4. เมื่อ slider คือ -1 แสดงว่าไม่ใช้ เพื่อป้องกัน slider เหลือ 0 ค้าง หรือเมื่อต้องการยกเลิก timer
  5. ให้ trigger “Turn off pump when nobody’s home” ไม่ทำงานถ้า slider นี้ทำงานอยู่

config ก็ตามนี้ครับ

input_slider:
  pump_off_timer:
    name: Pump off timer (min)
    initial: -1
    min: -1
    max: 180
    step: 10
automation:
  - alias: Pump timer tick
    hide_entity: true
    trigger:
      platform: time
      seconds: 00
    condition:
      condition: and
      conditions:
        - condition: numeric_state
          entity_id: input_slider.pump_off_timer
          above: 0
    action:
      service: input_slider.select_value
      data_template:
        entity_id: input_slider.pump_off_timer
        value: '{{states("input_slider.pump_off_timer")|int - 1}}'
  - alias: Pump timer trigger
    hide_entity: true
    trigger:
      platform: numeric_state
      entity_id: input_slider.pump_off_timer
      above: 0
      below: 0
    condition:
      condition: and
      conditions:
        - condition: state
          entity_id: group.family
          state: not_home
    action:
      service: switch.turn_off
      data:
        entity_id: switch.pump

Trigger ชุดใหม่นี้จะไม่ขึ้นในเว็บครับ เนื่องจาก hide_entity: true แต่สามารถดูได้ในหน้า dev-state (ปุ่ม <> ใน sidebar ของ Home Assistant)

และให้แก้ trigger เดิมดังนี้

automation:
  - alias: Turn off pump when nobody's home
    initial_state: 'off'
    trigger:
      platform: state
      entity_id: group.family
      from: home
      to: not_home
    condition:
      condition: and
      conditions:
        - condition: numeric_state
          entity_id: input_slider.pump_off_timer
          below: -1
    action:
      service: switch.turn_off
      data:
        entity_id: switch.pump

โดยเพิ่ม condition เข้ามาว่า pump_off_timer จะต้องเป็น -1 จึงจะปิดปั้มให้อัตโนมัติ ถ้า timer ยังทำงานอยู่ก็จะไม่ปิด

ในหน้าเว็บจะปรากฏ slider ขึ้นมา ก็สามารถลากเอาได้เลยว่าจะปิดปั้มในกี่นาที

สรุป

ในบทความนี้เราก็ทำให้ปั้มในบ้านเรากลายเป็นอุปกรณ์ IoT สามารถเปิดปิดจากอินเทอร์เน็ตได้โดยคำนึงถึง security ด้วย และใช้ระบบอัตโนมัติทำให้เปิดปิดได้อัตโนมัติเพื่อประหยัดน้ำ โดยอุปกรณ์ทั้งหมดที่ใช้ต้นทุนก็ไม่ถึง 1 พันบาท (ไม่นับ server ซึ่งผมก็ใช้เปิดบล็อคที่ผู้อ่านกำลังเข้าอยู่แล้ว)

สำหรับใครที่จะลอง implement ตามก็แนะนำว่าสามารถข้ามพาร์ทที่ใช้ router ไปได้ครับ โดยใช้ Raspberry Pi ลง Home Assistant ไว้ในบ้านก็จะสามารถเซตตามได้เลยโดยไม่ต้องเซต VPN แต่ถ้าไม่มี IP จริงจะทำให้เข้าจากนอกบ้านได้ด้วยก็จะลำบากหน่อย

ก็ขอบคุณมากๆ ที่ติดตามกันมาถึงตอนสุดท้ายครับ Feedback ออกมาค่อนข้างดีมากๆ ถ้ามีคำแนะนำอะไรหรือสงสัยก็พูดคุยกันได้ในโพสต์ Facebook หรือใน Twitter ที่แชร์บล็อคนี้ครับ