สืบเนื่องจากปัญหาฝุ่น PM2.5 ในช่วงปลายปีและต้นปี ซึ่งผลกระทบต่อการใช้ชีวิตของหลายๆ คนพอสมควร โดยเฉพาะผู้ที่พักอาศัยในกทม. เข้าใจว่า เครื่องฟอกอากาศและหน้ากากกันฝุ่น(+โควิด) น่าจะเป็นปัจจัยที่ 6 ในการใช้ชีวิตกันมาพอสมควรแล้ว

วันนี้จะถือโอกาสนี้ แชร์ให้ทุกท่านเห็นว่า automation ใน home assistant จะช่วยให้ชีวิตเราดีขึ้นได้อย่างไร

จะดีกว่ามั้ย ถ้าเราได้รับการแจ้งเตือนถ้า AQI มันแย่มาก

เริ่มต้นด้วย Notification ก่อน โดยปกติผมจะใช้ shell_command ในการรัน curl command เพื่อส่ง Line notify

shell_command:
  notify_line_aqi: "curl -X POST -d message=\"Current Chinese AQI: {{ states.sensor.chinese_air_quality_index.state }}\" https://notify-api.line.me/api/notify -H 'Authorization: Bearer YOUR_LINE_NOTIFY_TOKEN' -H 'Content-Type: application/x-www-form-urlencoded' -H 'cache-control: no-cache' "

แต่ notification ข้างบนนั้น ไม่ได้รันได้ด้วยตัวเองนะครับ ต้อง integrate AirVisual ก่อน ไปทำตาม document ที่นี่ได้เลยครับ ถ้าทำสำเร็จ เข้าไปที่หน้า Developer Tools ก็จะเห็นตัวเลขของ Chinese Air Quality Index ตามตัวอย่างด้านล่างเลย

เสร็จแล้วก็ทำ automation ได้เลยครับ ซึ่งของผมใช้ logic ง่ายๆ ไม่ได้ซับซ้อนอะไร คือ ให้ดูค่า Chinese AQI ว่า สูงกว่า 50 เกิน 3 ชม. ติดต่อกันหรือไม่ ถ้าเกินก็ให้ส่ง line alert แจ้งเตือนทันที

อย่างน้อยๆ สมาชิกภายในบ้านก็จะได้รับทราบว่า สภาพอากาศมันดีหรือแย่ในแต่ละวัน (ถ้าไม่แย่ก็ไม่ส่ง alert ให้รำคาญ)

จะดีกว่าอีกมั้ย ถ้าเห็น graph ของ AQI แบบสวยๆ หน่อย

โดยปกติ Home Assistant จะเก็บข้อมูลพวกนี้ไว้อยู่แล้วในฐานข้อมูลของตัวเอง แต่ไม่มี  visualize ที่จะดึงมาแสดงผลให้สวยงามได้

ผมจึงอยากแนะนำให้ติดตั้ง InfluxDB กันไว้ก็ดี เพื่อเก็บข้อมูลที่เป็น Numeric data ทั้งหมดลงใน Time Serie Database ไว้ แล้วจากนั้นก็ใช้ Grafana ดึงมาแสดงผล

การติดตั้ง InfluxDB และ Grafana นั้น สามารถทำผ่าน Supervisor ได้เลย โดยเข้า search หาและแค่ click เพื่อติดตั้ง  อย่าลืมตั้ง "start on boot" ไว้ด้วย เผื่อเวลา reboot มันจะได้กลับมารันได้ตามปกติ

ส่วนการสร้าง graph ใน Grafana โดยดึงข้อมูลจาก InfluxDB นั้น ง่ายกว่าที่ผมเคยคิดไว้เยอะ ตอนแรกนึกว่า ต้องไปเขียน InfluxSQL (คล้ายๆ PromQL) แต่จริงๆ แล้วก็แค่จิ้มๆ เลือกเอาเลย ว่าจะดึงข้อมูลอะไรมาโชว์ ลองดูตัวอย่างจาก graph AQI ข้างล่างของผมก็ได้นะครับ

ถ้าท่านใด ที่ชินกับการใช้ Grafana หน่อย ก็ทำ alert ผ่าน Grafana ได้เลยนะครับ เพราะจะคล่องตัวกว่าทำผ่าน Home Assistant ซะอีก

Automation แบบไหนที่อยากได้

ผมมี Mi Air Purifier 2S อยู่แล้ว 2 เครื่อง ซึ่งแรกๆ ก็ใช้วิธีเปิดปิดผ่าน Mi Home App เช่น ตั้งเวลาเอาบ้าง หรือเปิดปิด manual บ้าง

หลังใช้งานมาซักพัก ก็เริ่มรู้สึกได้ถึงความทื่อๆ ตรงๆ ของมัน บางครั้งที่เปิดโหมดหมุนเร็วๆ เพราะฝุ่นเยอะ พอฝุ่นน้อย มันก็ไม่ฉลาดพอที่จะลดความเร็วลงมา (ใน Mi Home มี automation นะครับ แต่ผมไม่เคยใช้เลย ไม่ถนัด)

สิ่งที่ผมต้องการให้เครื่องฟอกอากาศสองตัวนี้ทำงานได้คือ

  • ทำงานเปิดอัตโนมัต เมื่อ Chinese AQI >15 เป็นเวลาติดต่อกันมากกว่า 5 นาที (AQI วัดที่ในตัวเครื่องฟอกเลย แม้เครื่องจะปิดอยู่ มันก็จะยังวัดค่าฝุ่นอยู่ตลอดเวลา แต่ต้องเสียบปลั้กไฟไว้และต่อ WIFI ได้นะครับ) ทั้งนี้ จะเปิดทำงานในโหมด aggressive คือ หมุนพัดลมเร็วๆ เพื่อให้ลดปริมาณฝุ่น PM2.5 ให้ลงเร็วที่สุด
  • จากนั้น ถ้าปริมาณฝุ่นน้อยลง เช่น AQI ที่เครื่องวัดได้ <10 ติดกันซัก 5 นาที ก็ปรับพัดลมให้เบาเสียงลงหน่อย (silent mode)
  • ถ้าปริมาณฝุ่นน้อยกว่า 5 ซัก 5 นาที ก็ให้ปิดเครื่องไปเลย เพราะถ้าฝุ่นเยอะกว่า 15 เมื่อไหร่ มันก็จะเปิดเอง

ปัญหาของ automation ด้านบนมีนิดหน่อยคือ ถ้าเราไม่อยู่บ้าน มันก็เปิดๆ ปิดๆ ตลอดเวลาซิ

การแก้ปัญหานี้ ทำได้ไม่ยาก เราสามารถเพิ่ม binary sensor (มีแค่ค่า true กับ false) เข้ามา ตั้งชื่อว่า am_i_home

  • true หมายถึง เราอยู่บ้าน
  • false คือ ออกนอกบ้าน

การเปิดเครื่องฟอกอากาศทุกครั้ง ก็ให้เช็ค condition นี้ก่อนเสมอ ว่า am_i_home ต้องเป็น true (หรือ on ใน automation) เท่านั้น จึงจะเปิดเครื่อง

อีกปัญหาที่พบคือ บางทีห้องที่มีเครื่องฟอกตั้งอยู่นั้นกลางคืนไม่ได้ใช้งานเลย มันก็เปิดเปลืองไฟ เปลืองอายุการใช้งานใส้กรองเปล่าๆ กรณีนี้แก้ไขได้ง่ายๆ คือ ให้เช็ค am_i_home ควบคู่ไปกับตรวจสอบเวลาว่าเป็นช่วงเวลาที่เราต้องการให้เปิดเครื่องทำงานหรือไม่

เดี๋ยวไปดูรายละเอียดการ config กันเลย เริ่มตั้งแต่ binary sensor ว่าทำอย่างไร และจะมีของแถมเป็น zigbee press switch มา integrate เพิ่มความสะดวกในการใช้งานด้วย

Mi Air Purifier Integration

แนะนำให้ใช้ integration แบบนี้ตามลิงค์นี้นะครับ จะเสียเวลาลง python tool เพื่อดึง token นิดนึง ซึ่งจะทำให้เราสามารถเข้าถึง attribute ต่างๆ ของ Mi Air Purifier ได้

binary sensor configuration

input_boolean:
  home_toggle:
    name: Am I home?
    initial: on

binary_sensor:
  - platform: template
    sensors:
      am_i_home:
        friendly_name: Manual Home Binary Sensor
        value_template: "{{ states('input_boolean.home_toggle') }}"
        device_class: presence

Config ด้านบน เพิ่ม binary_sensor ที่ชื่อ "am_i_home" โดย sensor ตัวนี้ จะผูกติดค่าไว้กับ input_boolean ชื่อ "home_toggle" (แต่เวลาแสดงผลบน Lovelace จะเป็น "Am I home?"

input_boolean ก็ตรงๆ ตามชื่อ คือเป็น UI ที่ให้เรา toggle ค่าว่า true หรือ false แค่ config แล้ว restart HA ก็จะได้ UI ง่ายๆ ให้เราควบคุม binary_sensor "am_i_home" ได้ง่ายๆ

ลองตรวจสอบการทำงานของ input_boolean และ binary sensor ใน Developer Tools ก่อนก็ได้ว่า ทำงานสอดคล้องกันตามที่เราต้องการหรือไม่

Air Purifier Automation ขา Trigger การทำงาน

ตัวอย่างด้านบน เป็นแบบที่ดู am_i_home และค่า AQI เป็นหลัก ไม่ได้เอาเวลามาเป็น condition ใดๆ

สิ่งที่ควรทราบคือ

  • การ set speed ให้ Mi Purifier 2S ทำงานโหมด aggressive คือ speed: Favorite
  • ถ้าต้องการให้เงียบก็สั่ง speed: silent ตรงๆ

Automation ขาหยุดทำงานเมื่อ AQI < 5

Automation ขาลดเสียงให้เงียบ ถ้าฝุ่น <=15


หลังจากที่ Test configuration + restart automation แล้ว ก็ลองสังเกตุการทำงานของ Air Purifier ดูได้ว่า ตรงกับความต้องการของเราหรือไม่ สามารถเงื่อนไขเวลาหรือค่า AQI ได้ตามที่ต้องการได้เลย

แต่ก็ยังมีอีกอย่างที่รบกวนความสะดวกเรานิดหน่อยคือ มันต้องเสียเวลามานั่ง turn on/off "Am I Home" input boolean ทุกครั้งที่เราออกจากบ้านหรือกลับเข้าบ้าน ดังนั้นเพื่อคง concept ความขี้เกียจ ผมก็จะใช้ตัวช่วยมาอีกตัวคือ Aqara Wireless Switch

การทำงานของมันคือ มันเป็นแค่ปุ่มกด มี action ให้เราเล่นได้ 5 ตัวคือ

  • single คือการกดปุ่มธรรมดา สั้นๆ 1 ครั้ง
  • double คือการปุ่มสั้นๆ แล้วปล่อย แล้วกดอีกครั้ง คล้ายๆ กับการ double click ปุ่ม mouse
  • hold ก็ตรงๆ คือ กดแช่ไว้ยาวๆ
  • release หลังจาก hold ไว้ พอปล่อยก็จะกลายเป็น release
  • shake คือการเขย่า (มันมี gyro ในตัว)

ตัวที่ผมใช้งานนั้น เป็น Zigbee version ท่านใดที่จะใช้แบบนี้ต้องมี Zigbee gateway ก่อนนะครับ หรือใช้ Zigbee2MQTT USB Dongle แบบที่ผมใช้งานเลยก็ได้เช่นกัน

Automation สำหรับ Home Mode

Automation สำหรับ Away mode

ง่ายๆ คือ ถ้ากด single press ก็จะเป็น home mode

ถ้ากด double click คือ away mode

หลังจากนี้ เราก็สามารถไปตั้ง automation ต่อได้โดยดูจากค่า binary_sensor.am_i_home ว่า ถ้าเป็นเปลี่ยนจาก off --> on (home mode) เราจะให้ทำอะไร เช่น เปิดไฟ, disarm security sensor

หรือถ้าเปลี่ยนจาก on --> off (away mode) จะให้ทำอะไร ตัวอย่างเช่น

  • ปิด air purifier ทั้งหมด
  • ตรวจสอบ status ไฟ แล้วส่ง Line alert แจ้ง เผื่อว่าจะลืมปิดไฟบางจุด
  • integrate google home (nest mini) ส่งเสียงเพื่อแจ้งคนอื่นในบ้าน

จบแล้วครับ สำหรับบล็อกนี้ อาจจะยาวไปนิดนึง แต่เชื่อว่าน่าจะมีประโยชน์สำหรับบางท่านที่เริ่มต้นศึกษา automation ใน home assistant บ้างพอสมควร

ขอบคุณที่อ่านมาจนถึง ณ จุดนี้ครับ

Buy me a coffee