วิธีใช้งาน Broadlink RM + SmartIR ใน Home Assistant เพื่อควบคุมเครื่องปรับอากาศ
Tags: hassio, homeassistant, broadlink, smartir
Published: 2021-06-18 22:31:47

ต้องยอมรับเลยว่าถ้าจะใช้งาน SmartIR ใน Home Assistant ก่อนหน้านี้ถือว่ามืดมนเลยก็ว่าได้ มักจะไปต่อกันไม่ถูก เพราะคนทำ SmartIR ก็ไม่ได้มี Document หรือ Tutorial ให้อ่านอย่างละเอียดว่าต้องตั้งค่าทำอะไรบ้างตั้งแต่ต้นจนจบ ซึ่งใน Github ก็บอกไว้แค่คร่าวๆมากและดูงงๆ กว่าจะใช้งานได้จริงๆก็เสียเวลาหาวิธีอยู่นาน หาใน Community บ้าง ใน YouTube บ้าง ลองงมลองเล่นเองและถามเพื่อนๆที่เคยเซ็ตไว้ได้ ก็เลยอยากเอามาเขียนสรุปไว้เผื่อจะเป็นประโยชน์กับใครที่ต้องการใช้งาน SmartIR ใน Home Assistant ครับ

โดยปกติแล้วถ้าหากเราใช้งาน Broadlink RM ใน Home Assistant สามารถทำได้โดยการ Learn IR codes เป็นการเรียนรู้คำสั่งจากรีโมทของเครื่องใช้ไฟฟ้าต่างๆ มาเก็บไว้ใน Home Assistant และสามารถเลือกคำสั่ง IR codes ที่ได้จากการ Learn มาสั่งงานเครื่องใช้ไฟฟ้าได้เลยตรงๆ ดูเหมือนจะง่ายใช่ไหมครับ แต่ในความเป็นจริงถ้าหากเป็นรีโมทของเครื่องปรับอากาศ(ต่อไปนี้ขอเรียกสั้นๆว่า แอร์) จะมีคำสั่งบรรจุอยู่ในนั้นเยอะมากๆ 
ซึ่งหลักการทำงานของรีโมทแอร์ส่วนใหญ่จะมีการมัดรวมการตั้งค่าต่างๆหลายๆค่าไว้ในคำสั่งเดียว เช่น สั่งให้แอร์ ยี่ห้อ Daikin รุ่น FTE09NV25 มีอุณหภูมิที่ 25 องศา C กับความแรงลมที่ level 5 และ swing mode เปิดอยู่ในโหมด cool หรือ dry หรือบางรุ่นบางยี่ห้อในต่างประเทศอาจจะมีโหมด heat ด้วย สามารถทำหน้าที่เป็น heater ปรับให้อุณภูมิในห้องร้อนขึ้นได้เมื่อเจออากาศหนาวๆ 

ใน 1 คำสั่งจะมัดรวมการตั้งค่าทุกอย่างไว้ใน IR codes เก็บข้อมูลไว้ใน Home Assistant ลักษณะแบบนี้ (ถ้าใครเป็น Dev จะเข้าใจว่ารูปแบบนี้คือ base64)

```
JgBMAadEDjgOFQ0VDRYNOQ0VDRYNFQ0WDTkNFQ05DTkNFg04DjgOOA44DjgOFQ0VDTkNFg0VDRYNFQ0WDRUNOQ05DTkNOQ05DRUOOA44DhUNFQ0WDRUNFg0VDRYNFQ0WDRUNFg0VDTkNOQ05DTkNFQ4VDRUOFQ0AA8WnRQ05DRUNFg0VDTkNFg0VDRYNFQ05DRUOOA44DhUNOQ05DTkNOQ05DRUNFg05DRUNFg0VDRYNFQ0VDhUNFQ4VDRUOOA44DhUNFQ05DRYNOQ05DTgOFQ0WDRUNOQ05DRUOFQ05DRUOFQ0VDjgNFg0VDRYNFQ0WDRUNFg0VDRYNFQ0WDRUNFg0VDRYNFQ0WDRUNFg0VDTkNOQ05DTkNFQ4VDRUNOQ44DTkNFg0VDRYNFQ0WDRUNFg0VDTkNFQ4VDRUOFQ0VDhUNOQ0VDTkNFg05DRUNAA0FAAAAAAAAAAAAAAAA
```

ถ้าหากเราตั้งอุณหภูมิแตกต่างกันไปตั้งแต่ 19-30 องศา C หรือ ความแรงลม ตั้งแต่ระดับ 1 - 5 หรือตั้งเป็น auto เท่านี้ลองคิดรวมๆกันจะต้องเก็บคำสั่งไว้เป็นร้อยๆคำสั่ง 

แต่ถ้าหากเราต้องการสั่งงานให้ปรับแค่อุณหภูมิแอร์มาที่ 25 เท่านั้นปกติแล้วไม่สามารถทำได้ ต้องมาเลือกคำสั่งว่า 25 องศา C ที่ความแรงลมเท่าไร ในโหมดไหน cool หรือ dry ใช้ swing mode ด้วยไหม แบบนี้ดูจะใช้งานยากไปหน่อย
 
SmartIR ก็เป็นอีกหนึ่งตัวช่วยที่จะมาช่วยจัดการคำสั่งรีโมทแอร์ให้ใช้งานได้ง่ายขึ้น สามารถปรับอุณหภูมิหรือปรับแรงลมแยกกันได้สะดวก (เบื้องหลังก็คือจะไปหยิบคำสั่งที่เราเก็บไว้เป็นร้อยๆคำสั่งมาสั่งงานให้เรานั่นแหละครับ)
และนอกจากนั้น Home Assistant จะมองเครื่องปรับอากาศเครื่องที่เราเก็บคำสั่งไว้ เห็นเป็น entity หนึ่ง ไม่ได้มองเป็นคำสั่งร้อยๆชุดแบบเดิม

วิธีการเพิ่ม Broadlink RM ใน HA และการ Learn Command
---
1.เพิ่ม Broadlink RM เข้ามาใน integrations ก่อน (รองรับ RM3,RM4 ทั้ง mini และไม่ mini)
2.มาที่ Developer Tools > Service เพื่อ Learn Command 
3.เลือก Service เป็น Remote: Learn Command

![Screen Shot 2564-06-19 at 00.54.53](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlmh09ir7w6u4jj3m7z0.png)

ใส่ attribute ดังนี้
```yaml
service: remote.learn_command
data:
  device: air_conditioner
  command: cool_1_19
target:
  entity_id: remote.rm3_mini_remote
```
|Data attribute|Description|
|:-----|:-----|
|service|remote.learn_command|
|device|ใส่ชื่ออุปกรณ์หรือเครื่องใช้ไฟฟ้าที่จะรับคำสั่งเข้ามา|
|command|ใส่ชื่อคำสั่ง ตัวอย่างเช่น ปรับแอร์มาที่ 19 องศา ความแรงลมคือ 1 ตั้งชื่อเป็น cool_1_19 (จะตั้งชื่อยังไงก็ได้ขอให้ตัวเองเข้าใจ) |
|entity_id|ใส่ entity id ของ Boardlink|

4.คลิกปุ่ม CALL SERVICE จะมี Notification แจ้งเตือนใน Home Assistant และที่ Boardlink RM จะมีไฟ LED ติดอยู่  
![Screen Shot 2564-06-19 at 03.54.32](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukuj7w2qxmhbriq1kxnv.png)

![RM3 Mini LED On](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sb3rnf4m56ugvyu2so4q.jpg)

5.เอารีโมทชี้มาที่ Boardlink RM และกดปุ่มที่ต้องการ เมื่อ Learn สำเร็จแล้ว Notification จะหายไป และไฟ LED ที่ Broadlink RM ก็จะดับเช่นกัน
![RM3 Mini LED Off](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1nwnqqmlageyre4owb28.jpg)
6.ทำขั้นตอนที่ 3-5 รับคำสั่งรีโมททุกคำสั่งให้ครบหรือจนกว่าจะพอใจ
 
7.ใช้ Visual Studio Code เปิดเข้ามายังโฟลเดอร์ /config/.storage/
(File > Open Folder)
จะมีไฟล์ที่ชื่อว่า broadlink_remote_xxxxx_codes ขึ้นมา ข้างในจะบรรจุคำสั่งที่เราเคยได้ Learn ไว้ มาถึงขั้นตอนนี้พักหายใจกันก่อน
![Screen Shot 2564-06-19 at 01.04.58](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m5jqdlkr84kjuw1c62bv.png)
 




ติดตั้งและใช้งาน SmartIR
---

1. ติดตั้ง HACS ดูวิธีติดตั้งได้ใน Link นี้
https://hacs.xyz/docs/installation/installation/
2. ติดตั้ง SmartIR ใน HACS ด้วยการเพิ่ม custom repository
https://github.com/smartHomeHub/SmartIR
3. หลังจากที่ติดตั้ง SmartIR แล้วให้เข้ามาดูรายชื่อเครื่องปรับอากาศว่ามีรุ่นที่ใช้งานอยู่ใน List นี้หรือไม่
https://github.com/smartHomeHub/SmartIR/blob/master/docs/CLIMATE.md

4.1 ถ้ามี ให้โหลดไฟล json จาก Github มาใช้ได้เลย ตามรุ่นเครื่องปรับอากาศที่เรามี มาใส่ไว้ในโฟลเดอร์ /config/custom_components/smartir/codes/climate

![Screen Shot 2564-06-19 at 02.10.10](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yckbbt5sg8w928x2my1g.png)
 
4.2 ถ้าไม่มีรุ่นแอร์ใน list ให้สร้างไฟล์ขึ้นมาใหม่ เช่น xxxx.json ไว้ในโฟลเดอร์ตามข้อ 4.1 โดยหาไฟล์ .json สักไฟล์จาก [link](https://github.com/smartHomeHub/SmartIR/blob/master/docs/CLIMATE.md) ในข้อ 3 มาเป็นต้นแบบ
อยากให้ลองศึกษารูปแบบของค่าต่างๆในไฟล์ดูนะครับ(ไม่ขออธิบายตรงนี้ละกันครับน่าจะยาว) แล้วแทนที่ IR codes ที่เราได้ Learn ไว้แล้ว (จากไฟล์ broadlink_remote_xxxxx_codes)
หมายเหตุ: การตั้งชื่อไฟล์ xxxx.json จะใช้เป็น code ตัวเลข 4 ตัว (และจะต้องไม่ซ้ำกับที่มีอยู่แล้ว ถ้าหากเราจะ contribute เพิ่มคำสั่งแอร์ของเราไว้ใน Github ด้วย) 


5.เพิ่ม smartir: และ climate: ในไฟล์ configuration.yaml

```yaml
smartir:

climate:
  - platform: smartir
    name: Daikin AC
    unique_id: daikin_ac
    device_code: 1111
    controller_data: remote.rm3_mini_remote
    temperature_sensor: sensor.0x00124b00226b2946_temperature
    humidity_sensor: sensor.0x00124b00226b2946_humidity
```
|Data attribute|Description|
|:-----|:-----|
|name|ให้ตั้งชื่อแอร์|
|unique_id|unique_id อันนี้จะเป็น entity ของแอร์ |
|device_code|ใส่ code ตามชื่อไฟล์ในข้อ 4|
|controller_data|ใส่ entity id ของ Boardlink|
|temperature_sensor|(ถ้ามี) sensor อุณหภูมิก็ใส่ entity id ของ sensor ด้วย|
|humidity_sensor|(ถ้ามี) sensor ความชื้นก็ใส่ entity id ของ sensor ด้วย|

6.สุดท้ายลองสร้าง Lovelace ในแบบ Thermostat Card ใส่ entity ของแอร์ที่เคยตั้งค่า unique_id ไว้ในข้อ 5 จะได้เป็น climate.daikin_ac
ลองสั่งคำสั่งแอร์เปลี่ยนอุณหภูมิปรับแรงลม ถ้าแอร์มีการตอบสนองถือว่าสำเร็จแล้วครับ
![Screen Shot 2564-06-19 at 05.23.11](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ybv0wcu8p8rq0hhp08fw.png)