หลังจากตอนที่แล้วเราติดตั้งโปรแกรม Home Assistant และ Mosquitto MQTT Server และสามารถปิดปั้มผ่านเว็บได้แล้ว ในตอนนี้เราจะทำให้มันเป็นอัตโนมัติด้วยครับ
เริ่มแรกที่เราจะต้อง detect ก่อนว่ามีคนอยู่บ้านหรือเปล่า ซึ่งจากที่ทดลองมาหลายวิธีแล้วพบว่า component Ping ง่ายๆ นี่แหละเวิร์คที่สุด ซึ่งการทำงานก็แค่จะ ping IP ที่กำหนดไว้เรื่อยๆ ถ้าเจอก็คืออยู่บ้าน ถ้าไม่เจอติดกันประมาณ 5 นาทีก็คือไม่อยู่
device_tracker:
- platform: ping
hosts:
yui: 192.168.2.12
dadiphone: 192.168.2.21
momsamsung: 192.168.2.23
ตรงนี้อุปกรณ์ทั้งหมดจะถูก fix IP ไว้ใน DHCP Server ของ Mikrotik ครับ ทำให้ไม่ต้องกังวลว่า IP จะเปลี่ยนไปเอง และบน server ผมนั้นจะได้ route เข้ามาหาอุปกรณ์ในบ้านผ่าน BGP อยู่แล้วทำให้ ping IP ภายในบ้านผ่าน VPN ได้เลย (ทั้งหมดนี้ทำไว้ใน ตอนที่ 1)
ถัดมาก็คือ group ทุกคนเข้าด้วยกันเพื่อให้จัดการได้ง่ายขึ้น
group:
family:
name: Family members
view: no
entities:
- device_tracker.yui
- device_tracker.dadiphone
- device_tracker.momsamsung
พอ restart ใน interface ก็จะเริ่มขึ้นอุปกรณ์มาแล้วครับ
ตรงนี้สามารถตกแต่งได้ที่ไฟล์ known_devices.yaml โดยระบุ name และ gravatar (อีเมลที่สมัคร Gravatar) เพื่อให้สวยงามได้ (ไฟล์นี้จะ generate มาเอง ถ้าไม่มีอุปกรณ์เราหรือไม่มีไฟล์ต้อง restart หลังเซต device tracker ครับ) และสำหรับ iPhone ให้ระบุ consider_home: 1800
ในไฟล์นั้นด้วย เพราะ iPhone จะชอบตัด WiFi เองเรื่อยๆ
yui:
hide_if_away: false
name: Win's Phone
gravatar: manatsawin@gmail.com
track: true
dadiphone:
name: Dad's iPhone
hide_if_away: false
track: true
consider_home: 1800 # ถ้าไม่อยู่บ้าน 30 นาทีถึงจะตัด
พอ Detect ได้หมดแล้วก็ได้เวลาเขียน Automation ให้กับ Home Assistant ครับ ดังนี้
automation:
- alias: Turn off pump when nobody's home
initial_state: 'off'
trigger:
platform: state
entity_id: group.family
from: home
to: not_home
action:
service: switch.turn_off
data:
entity_id: switch.pump
- alias: Turn on pump when people are home
trigger:
platform: state
entity_id: group.family
from: not_home
to: home
action:
service: switch.turn_on
data:
entity_id: switch.pump
ตรงนี้จะมี trigger 2 ตัวคือ
- เมื่อ group.family เปลี่ยนสถานะจาก home -> not_home แล้วให้ turn off switch.pump ซึ่งตรงนี้ initial state คือ Off แปลว่าไม่ใช้งาน ถ้าจะใช้ต้องไปเปิดในเว็บก่อน
- เมื่อ group.family เปลี่ยนสถานะจาก not_home -> home แล้วให้ turn on switch.pump
โดย group นี้ถ้ามีคนอยู่บ้านแม้แต่คนเดียว สถานะจะเป็น home ครับ อันนี้คือพฤติกรรมของ Home Assistant เลย ไม่ต้องเซตอะไร
พอใช้ได้แล้วในเว็บจะปรากฏ automation menu ครับ
ตรงนี้สามารถทดสอบได้โดยคลิกที่ชื่อแล้วกดปุ่ม Trigger โปรแกรมจะทำงาน action ที่เซตไว้โดยไม่สนใจเงื่อนไข trigger ที่ตั้งไว้
สำหรับตอนหน้าจะเป็นตอนสุดท้ายแล้วครับ ซึ่งจะพูดถึง Automation ในระดับที่ยากขึ้นก็คือการทำ Push notification และการทำ Timer