DEV Community

loading...

Home Automation - 1 - ควบคุมแอร์,ทีวีผ่านเว็บ

atthavit profile image Atthavit Wannasakwong Updated on ・2 min read

ตอนนี้เป็นตอนแรกของซีรี่ส์ home automation นะครับ ผมจะเล่าเรื่องเกี่ยวกับ home automation ที่ผมใช้อยู่

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

เงื่อนไขที่สำคัญของโปรเจคนี้คือ ทำให้เราสามารถควบคุมอุปกรณ์หรืออะไรต่างๆได้โดยที่ไม่ต้องมี internet ขอแค่อยู่ในวง LAN เดียวกันก็พอ อาจจะมีบางอุปกรณ์ใช้ wifi บ้าง แต่จะใช้ internet แค่ตอน setup เฉยๆ หลังจากนั้นเราก็สามารถบล็อกไม่ให้มันออกเน็ตได้ แต่ก็ยังใช้งานมันได้ปกติ เวลาเน็ตหลุดก็ไม่มีปัญหาอะไร

อันนี้เป็นข้อจำกัดที่สำคัญเวลาผมเลือกใช้อุปกรณ์ทั้งหมดนะครับ จะไม่ใช้พวกที่ต้องต่อ internet ตลอดเวลา เพื่อ privacy ด้วย เพราะเราไม่รู้ว่า อุปกรณ์พวกนั้นมันจะส่งข้อมูลอะไรของเรากลับไปที่ server มันบ้าง

ในตอนแรกนี้จะเป็นวิธีทำให้เราสามารถเปิดปิดแอร์ ทีวี หรืออะไรที่ใช้รีโมทแบบ infrared

สิ่งที่ต้องใช้

  • คอมเครื่องเล็กๆ หรือจะเป็นพวก Raspberry Pi ก็ได้
  • Broadlink RM4C Mini
  • wifi

Broadlink RM4C Mini

Broadlink RM4C Mini
เริ่มจากซื้อ Broadlink RM4C mini มาก่อน จากพวก Shopee, Lazada, Aliexpress ก็ได้ จริงๆเป็นรุ่นอื่นก็ได้นะครับ แต่ในที่นี้เราไม่ได้ใช้มันมาก ใช้มันแค่เป็นตัวส่งสัญญาณ infrared แทนรีโมทของเราแค่นั้น จะไม่ใช้งานผ่านแอพมันเลย ใช้แอพมันแค่ตอนsetupเท่านั้น เลยใช้รุ่นถูกสุดเลยก็ได้ หรือจะใช้รุ่นเก่า RM3 Mini แทนก็ได้เหมือนกัน

พอได้มาแล้วก็เสียบปลั๊กแล้วโหลดแอพ BroadLink (Android) มา
แล้วเปิดแอพมากด Add device เพื่อเชื่อมต่อตัว Broadlink กับ wifi บ้าน ตอนนี้ต้องให้มันต่อเน็ตได้ก่อนนะครับ
Alt Text

แล้วแอพมันก็จะหา Broadlink ที่อยู่ใกล้ๆ
Alt Text

พอหาเสร็จมันก็จะให้เราใส่ SSID, Password ของ wifi ก็ใส่ตามขั้นตอนไปเรื่อยๆ

พอมันต่อ wifi ได้แล้ว ก็หยุดแค่นี้เลย ไม่ต้องกด Join the room นะครับ ปิดแอพไปเลย จะลบแอพทิ้งเลยก็ได้ หลังจากนี้เราจะไม่ใช้แอพมันแล้ว
Alt Text

Home Assistant

Alt Text
จริงๆเราสามารถใช้ตัว broadlink ผ่านแอพมันได้แบบง่ายๆเลย แค่เลือกรุ่นแอร์ ทีวี ในแอพ ก็ใช้ได้แล้ว แต่ปัญหาคือเราต้องต่อ internet ตลอดเวลาที่จะใช้มัน ซึ่งมันเป็นปัญหาที่ทำให้ผมไม่ใช้มัน ตามที่บอกไป

เราเลยต้องมี home assistant เพื่อให้มันไปคุยกับ broadlink แทน ซึ่งมันก็สามารถ integrate กับ broadlink ได้ง่ายๆเลย ดูรายละเอียดเพิ่มเติมที่นี่

ข้อดีของการใช้ Home Assistant อีกอย่างคือ เราไม่ต้องซื้อพวก hub เพิ่ม เช่น ถ้าเราใช้ sensor ของทั้ง Aqara และ Ikea เราก็ไม่จำเป็นต้องซื้อ hub แยกของแต่ละยี่ห้อ ซื้อแค่ตัวรับสัญญาน Zigbee เราก็สามารถรับค่าจาก sensor พวกนั้นได้หมด แต่เรื่อง sensor จะอยู่ในตอนถัดๆไปนะครับ

แล้วเราก็ไม่ต้องพึ่งความสามารถของอุปกรณ์ของเรามากนัก แค่มันคุยกับ home assistant ได้ เราก็สามารถเอามันไปต่อ IFTTT, Google Assistant, หรือจะเขียนโค้ดเอง Home Assistant ก็มี API ไว้ให้

ในการรันhome assistant ผมจะใช้ docker-compose นะครับ ตามด้านล่างเลย แต่ถ้าใครใช้ raspberry pi อาจจะลงที่ sd card ตรงๆเลยก็ได้ ไม่ต้องใช้ docker ลองดูวิธีที่นี่

docker-compose.yml

version: '3'
services:
  hass:
    image: homeassistant/home-assistant:0.113.3
    restart: unless-stopped
    volumes:
      - ./config:/config
      - ./static/configuration.yaml:/config/configuration.yaml:ro
      - ./static/ui-lovelace.yaml:/config/ui-lovelace.yaml:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 8123:8123
Enter fullscreen mode Exit fullscreen mode

นอกจาก docker-compose.yml แล้ว เราต้องสร้างไฟล์ config สำหรับ home assistant ด้วย เริ่มจากไฟล์ว่างๆแบบด้านล่าง แล้วเดี๋ยวเราจะใส่อะไรเพิ่มไปเรื่อยๆ
./static/configuration.yaml

default_config:
lovelace:
  mode: yaml
Enter fullscreen mode Exit fullscreen mode

./static/ui-lovelace.yaml (ไฟล์เปล่า)

Enter fullscreen mode Exit fullscreen mode

เสร็จแล้วก็ docker-compose up -d แล้วเปิด localhost:8123 จะมีหน้าขึ้นมาให้สร้าง account
Alt Text

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

ทำให้ Home Assistant คุยกับ Broadlink RM4C Mini ได้

ต่อมาหลังจากเราทำให้ Broadlink ต่อ Wifi ได้แล้ว เราก็จะทำให้มันรับคำสั่งจาก Home Assistant เพื่อส่งสัญญาณ infrared ต่อไปที่เครื่องใช้ไฟฟ้า

แต่ก่อนอื่นเราต้องหาสัญญาณที่ใช้เปิดปิดแอร์ก่อน โดยจะใช้ python-broadlink

git clone git@github.com:mjg59/python-broadlink.git
cd python-broadlink
pip install .
Enter fullscreen mode Exit fullscreen mode

เสร็จแล้ว เราก็หา broadlink ของเราด้วยคำสั่ง

python cli/broadlink_discovery
Enter fullscreen mode Exit fullscreen mode

จะมีข้อมูลต่างๆขึ้นมา

Discovering...
###########################################
RM4
# broadlink_cli --type 0x62be --host 192.168.xxx.xxx --mac xxxxxxxxxxxx
Device file data (to be used with --device @filename in broadlink_cli) : 
0x62be 192.168.xxx.xxx xxxxxxxxxxxx
temperature = 0.0
Enter fullscreen mode Exit fullscreen mode

ที่นี่เราก็จะได้ mac address แล้วเราควรไปเซต static ip ให้ mac address นี้ ip จะได้ไม่เปลี่ยน เพราะถ้าเกิดเราถอดปลั๊ก broadlink แล้วมันเปิดขึ้นมาใหม่ ได้ ip ใหม่ จะทำให้เราต้องมาแก้ ip ไม่งั้น Home Assistant ก็จะคุยกับมันไม่ได้

ต่อไปเราจะให้มัน print สัญญาณของรีโมทเราออกมา เพื่อจะเอาไปใส่ใน Home Assistant
ตรง parameter เอามาจาก output เมื่อกี้ได้เลย แล้วเติม --learn เข้าไป

python cli/broadlink_cli --type 0x62be --host 192.168.xxx.xxx --mac xxxxxxxxxxxx --learn
Enter fullscreen mode Exit fullscreen mode

พอเรารันคำสั่งด้านบน มันจะมีไฟขึ้นมาหน้าเครื่อง เราก็เอารีโมทมากดใส่มันได้เลย อันนี้จะกดเปิดนะครับ
Alt Text

แล้วจะได้ output ประมาณนี้ ให้เก็บตรง Base64: เอาไว้

Learning...
260050020f0d0e0e0f0d0f0d0f0e0e00034072380f2a0e0e0f0d0f0e0e2a0f0d0f0e0e0e0f0d0f2a0f0d0f2a0e2a0f0e0e2a0f2a0e2a0f2a0f290f0e0e0e0f290f0e0e0e0f0d0f0e0e0e0f0d0f0e0e0e0e0e0f0d0f2a0f0d0f2a0e0e0f0d0f0e0e2a0f2a0e0e0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f2a0e0e0f0d0f0e0e2a0f2a0e2a0f0e0e0e0f290f2a0f290f00047572380f2a0f0d0f0d0f0e0e2a0f0e0e0e0e0e0f0d0f2a0f0d0f2a0e2a0f0e0e2a0f2a0e2a0f2a0f290f0e0e0e0f2a0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f0d0f0e0e2a0f0e0e0e0f0d0f0d0f2a0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0e0e0f0d0f2a0f0d0f2a0e0e0f2a0e0e0f00047572380e2a0f0e0e0e0e0e0f2a0e0e0f0d0f0e0e0e0e2a0f0e0e2a0f2a0e0e0f2a0e2a0f2a0e2a0f2a0f0d0f0d0f2a0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0e0e0f0d0f0e0e0e0f0d0f0e0e0e0e0e0f2a0e0e0f0d0f2a0e2a0f2a0f0d0f0d0f0e0e0e0f2a0e0e0f290f2a0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0e0e0f0d0f0e0e0e0f0d0f2a0f0d0f2a0e0e0f0d0f0e0e0e0e0e0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e2a0f2a0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f0d0f2a0f2a0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e0e0f0d0f0d0f2a0f0d0f0e0e0e0e0e0f0d0f2a0f290f0e0e0e0f0d0f0e0e0e0f0d0f0d0f2a0f0d0f0e0e0e0f0d0f0d0f0e0e0e0f0d0f0e0e2a0f2a0e0e0f0d0f0e0e2a0f2a0e000d05000000000000
Base64: b'JgBQAg8NDg4PDQ8NDw4OAANAcjgPKg4ODw0PDg4qDw0PDg4ODw0PKg8NDyoOKg8ODioPKg4qDyoPKQ8ODg4PKQ8ODg4PDQ8ODg4PDQ8ODg4ODg8NDyoPDQ8qDg4PDQ8ODioPKg4ODw0PDg4ODw0PDQ8ODg4PDQ8ODg4PDQ8qDg4PDQ8ODioPKg4qDw4ODg8pDyoPKQ8ABHVyOA8qDw0PDQ8ODioPDg4ODg4PDQ8qDw0PKg4qDw4OKg8qDioPKg8pDw4ODg8qDg4PDQ8NDw4ODg8NDw4ODg8NDw0PDg4qDw4ODg8NDw0PKg8NDw4ODg8NDw0PDg4ODw0PDg4ODw0PDQ8ODg4PDQ8ODg4ODg8NDyoPDQ8qDg4PKg4ODwAEdXI4DioPDg4ODg4PKg4ODw0PDg4ODioPDg4qDyoODg8qDioPKg4qDyoPDQ8NDyoPDQ8ODg4PDQ8NDw4ODg8NDw4ODg4ODw0PDg4ODw0PDg4ODg4PKg4ODw0PKg4qDyoPDQ8NDw4ODg8qDg4PKQ8qDw0PDg4ODw0PDQ8ODg4PDQ8ODg4ODg8NDw4ODg8NDyoPDQ8qDg4PDQ8ODg4ODg8NDw4ODg8NDw4ODg8NDw0PDg4ODw0PDg4qDyoODg8NDw0PDg4ODw0PDg4ODw0PDQ8qDyoODg8NDw0PDg4ODw0PDg4ODw0PDQ8ODg4PDQ8ODg4PDQ8NDyoPDQ8ODg4ODg8NDyoPKQ8ODg4PDQ8ODg4PDQ8NDyoPDQ8ODg4PDQ8NDw4ODg8NDw4OKg8qDg4PDQ8ODioPKg4ADQUAAAAAAAA='
Enter fullscreen mode Exit fullscreen mode

แล้วเราก็ต้องทำแบบเดิม แต่เป็นกดปิดแทน เพื่อเอาโค้ดที่ใช้ปิดแอร์ พอได้มาก็เก็บตรง Base64: ไว้เหมือนเดิม

หลังจากได้มาทั้ง 2 อันแล้ว ก็มาแก้ config ของ Home Assistant โดยเพิ่มส่วน switch เข้าไป ให้เปิดปิดแอร์ได้

./static/configuration.yaml

default_config:
lovelace:
  mode: yaml

switch:
  - platform: broadlink
    host: 192.168.xxx.xxx
    mac: 'xx:xx:xx:xx:xx:xx'
    type: rm4c_mini
    switches:
      bedroom_ac:
        friendly_name: Bedroom AC
        command_on: JgBQAg8PDQ4ODhANDg8NAANBcjkNKw4PDQ8PDQ4qDw0PDg4ODw0QKQ8ODisNKhENDygQKQ4qESgPKg8ODg0PKg4PDg4ODw0OEA0ODw0PDg4ODg4ODioPDg4qDw8NDw4ODioOKhANEA0ODg8ODQ8PDQ4ODw4NDw4OEAwPDg8pDg8ODQ4PDykQKQ8oEA8NDw4qDSsPKg8ABHZxOA8rDg0PDw0PDSsPDQ4ODw4ODw0qEA4NKhApDg8OKw4pDyoOKxEnEA0ODw0qDw4PDg4NDw8PDQ0PDg4QDA8ODg4ODg8pDw8NDw0PDg4NKw8ODw0ODg8ODg8NDw0PDg4ODg4OEA0ODw0ODw0PDw0ODg8ODg4PDikQDQ4qDw4OKhANDgAEdnI4ECkPDg4NDw4PKRANEAwPDg4ODioPDg4qDyoPDQ8pDyoQKQ8pDyoPDQ8ODioQDBAODQ4PDQ8ODg8NDg8ODw0ODg8ODQ8ODg8NDw4ODg8NDw4OKhANDQ8PKQ8qDyoPDQ4ODw4PDQ4qDw4OKhApDg4PDRANDg8ODQ8ODg4PDQ8ODw0ODhANDw0ODg8NDyoPDQ8qDg4PDg8NDg4PDg4ODg4PDREMDg4ODg8ODg4ODg8NDw4ODg8qDioQDQ4ODg4PDQ8ODg4PDQ8ODg4ODg8qDioPDg4ODw0PDg4ODw0PDg4ODg4PDQ8ODg4PDQ8ODg4PDQ8ODioPDQ8ODg4PDQ8ODioPKQ8ODw0PDg4ODw0PDg4ODyoODg4ODw4ODg4ODw0PDg4ODw0PKg8pDw4ODg8NDyoPKg4ADQUQKQ8ODg0PDg==
        command_off: JgBQAg8NEA0ODg4ODg4PAANAcjgPKg4ODw0PDg8pEA0ODhAMEAwPKg8ODioPKg8NDisOKhApDykPKg8NDw4PKQ8ODg4ODw0PDg4PDQ4ODw4ODg4ODyoODw0rDw0ODhANDioQKRANDg4ODg4ODw4ODhELDg4QDQ4ODg4PDg0PDg4ODhANDykPKg4qEA0OKg8ODioPKg4ABHdxOA8qDw0PDg8ODikQDg0PDg4ODg4qEA0OKg8qDw0PKg4qECkOKg8qDw0PDhAoDw4ODw4ODw0ODg4PDg4ODw0ODg4PDg4qDw0QDQ4ODw0QKQ8NDg8ODw0PDg0PDw0ODw0PDw0PDQ4PDg4PDg4NDhANDw0PDg8ODSoPDg4qDw4OKg8ODgAEdnI5DSsQDQ0PDg4OKg4ODw8PDA8ODioQDA8qDioQDg4pECkPKQ8qDyoPDg0PDioPDg4ODg8ODg4NDw8ODw0NDw4ODg4PDw0ODw0ODw0PDg0QDg4ODg4ODg8OKw4qDioPDg4ODw0OKw8pDw4OKg8qDw4ODg4ODw4NDw4ODg8ODg0PDg4PKRApDioPKg4PDioPDg4qDg4PDg4PDg4ODRANDg4ODw4ODg4ODw4ODw4ODg4ODg4ODw4qDioPDQ8ODg8ODg4ODg8NDg8ODg8ODQ8qDioPDw0PDQ8ODRAODQ8ODg4PDQ8ODRAODQ4PDg4ODw0ODg8ODioODg8ODg4ODw8NDioPKg4ODg8ODg4PDQ4PDg4PDSoQDg0ODw4QDA4ODg8QDA4ODg4PKg4qDw4OKg8ODSsQKQ8ADQUNKxANDQ8ODg==
Enter fullscreen mode Exit fullscreen mode
  • mac/ip address เอาจาก output ที่รัน discovery ในขั้นก่อนหน้านี้
  • command_on, command_off ก็ใส่ค่าที่ได้จาก remote ที่เก็บไว้เมื่อกี้

แล้วเราก็ต้องแก้ไฟล์ ui-lovelace.yaml ด้วย ไฟล์นี้จะเป็น template ของ UI ไว้บอกว่าจะให้แสดงปุ่มหรือข้อมูลอะไร ตรงไหนบ้าง ในหน้า Home Assistant ในตอนนี้เราจะเพิ่มแค่ switch เข้าไปก่อน ให้กดเปิดปิดได้

./static/ui-lovelace.yaml

title: Home
views:
  - title: Bedroom
    cards:
      - type: entities
        title: AC
        entities:
          - switch.bedroom_ac
Enter fullscreen mode Exit fullscreen mode

หลังจากแก้ทั้ง 2 ไฟล์เสร็จ ก็ restart home assistant

docker-compose restart hass
Enter fullscreen mode Exit fullscreen mode

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

หลังจากนี้ถ้าจะเพิ่ม remote อะไรไปก็ทำแบบเดิม หาโค้ด, เอาโค้ดมาใส่ home assistant, ใส่ switch ใน lovelace ui

ไฟล์ต่างๆที่ผ่านมาสามารถดูได้ที่นี่นะครับ

ปัญหาสำคัญของ remote แอร์ ที่สังเกตได้คือ มันจะเก็บ state ไว้ที่ remote เช่น อุณหภูมิ, ความแรงพัดลม, เปิด/ปิด ทีนี้เวลาเรากดปุ่มอะไร มันก็จะส่ง state ทั้งหมดไปเลย เช่นถ้าเราเก็บโค้ด กดเปิดไว้ แต่ตอนเรากด remote อุณหภูมิมันขึ้นว่า 26 มันก็จะไปเปลี่ยนให้แอร์อุณภูมิ 26 องศาไปด้วยไม่ว่าอุณหภูมิเดิมจะเป็นเท่าไหร่ ซึ่งมันก็จะทำให้เราไม่สามารถใช้ปุ่มเพิ่มลดอุณหภูมิได้ เพราะการกดแต่ละครั้งจะส่งสัญญาณต่างกันไปตามอุณหภูมิในตอนนั้น

มาถึงตรงนี้ หลายคนอาจสงสัยว่ามัน automation ยังไง ในตอนนี้จะยังไม่มี automation นะครับ แต่ในตอนต่อๆไป จะมีการใช้ sensor เข้ามา ทำให้ทำ automation อะไรที่มีประโยชน์หลายๆอย่างเพิ่มได้ และจะเห็นความสามารถของ Home Assistant มากขึ้น

Discussion (8)

pic
Editor guide
Collapse
suthinan08 profile image
suthinan08

python-broadlink เข้าไปทำตรงไหนหรอครับ

Collapse
atthavit profile image
Atthavit Wannasakwong Author

ในterminalเลยครับ clone project มาจาก github
github.com/mjg59/python-broadlink

Collapse
suthinan08 profile image
suthinan08

ผม ได้ ip mac มาแล้วครับ แต่ add แล้ว แต่ Entity ไม่ขึ้นเลยครับ

Thread Thread
atthavit profile image
Atthavit Wannasakwong Author

หมายถึงaddตรงไหนครับ

Thread Thread
suthinan08 profile image
suthinan08

configuration.yaml ครับ ผมขอ line ได้รึป่าวครับ

Collapse
suthinan08 profile image
suthinan08

พอจะมีขั้นตอนรึป่าวครับ ผมยัง งงๆ อยู่เลย

Collapse
teera04164 profile image
Teerapong

โหลดไฟล์ไม่ได้ครับ

Collapse
atthavit profile image
Atthavit Wannasakwong Author

แก้ลิงค์แล้วครับ