ควบคุมทีวี ด้วย LINE Chat bot ,Dialogflow และ Flask -Part2

Eddie eddie
2 min readMay 29, 2018

--

ควบคุมทีวี ด้วย LINE Chat bot ,Dialogflow และ Flask -Part1
ควบคุมทีวี ด้วย LINE Chat bot ,Dialogflow และ Flask -Part3

มาต่อกันเลยนะครับจาก Part ที่แล้ว สิ่งที่เราต้องทำต่อมาก็คือการเรียนรู้คำสั่งของ Remote ทีวีบ้านเราด้วย Python-Broadlink

ขั้นตอนนี้ถือว่าเป็นขั้นตอนที่สำคัญอยู่ นั่นคือการเรียนรู้คำสั่งของ Remote control ที่บ้านเรา (ในเคสนี้คือรีโมททีวี) ว่าคำสั่งที่ remote ยิงไปหาทีวีคือคำสั่งอะไร โดยขั้นตอนนี้เราเพียงต้องการคำสั่งของรีโมททีวีเราเฉยๆ เพราะฉะนั้นเราสามารถทำบน Laptop เราเองได้นะ ไม่ต้องทำบน Raspberry Pi

เริ่มต้นก็ทำการ Update pip ก่อน

pip install -upgrade pip

จากนั้นทำการ download เจ้า Broadlink

sudo pip install broadlink

ทำการเสียบสาย USB เข้าที่ตัวอุปกรณ์ Broadlink ให้เรียบร้อย จากนั้นใช้เข็มกดปุ่ม reset ที่ Broadlink สองครั้ง ครั้งละ 5 วินาที

โดยครั้งแรก ให้สังเกตุไฟสีฟ้าให้มันกระพริบรัวๆ

ครั้งที่สองไฟสีฟ้าที่เครื่องจะกระพริบช้าลง เพื่อเป็นการทำให้เจ้า Broadlink เข้าสู่ AP Mode

เมื่อ Broalink ของเราเข้าสู่ AP Mode แล้ว ให้เรา Switch Wifi ของเรา ณ ปัจจุบัน ไปที่ SSID ที่ชื่อ BroadlinkProv แทน

เปิด Terminal ขึ้นมาอีกครั้ง แล้วรัน Python

import broadlinkbroadlink.setup(‘myssid’, ‘mynetworkpass’, 3)

function setup จะรับ parameter 3 ตัว คือ ชื่อ SSID, password และ Encrypt type โดย (0 = none, 1 = WEP, 2 = WPA1, 3 = WPA2, 4 = WPA1/2)

หลังจากเรารันคำสั่ง setup เสร็จ ให้รอสักพักนึง จน BroadlinkProv SSID ที่เราต่อไว้หลุดไปจากนั้นให้เรากลับมาต่อ Wifi ตัวที่เราใส่ไปใน setup ในเคสนี้คือ myssid แล้วรัน Python คำสั่งนี้เพื่อเป็นการค้นหาอุปกรณ์ Broadlink:

devices = broadlink.discover(timeout=5)

devices ที่ return มาจะเป็น Array นะครับ ก่อนจะเรียกใช้ต่อก็เช็คดูก่อนว่า list เราไม่ empty

ทำการ Authen device ถ้า authen สำเร็จจะต้อง return True:

devices[0].auth()

เรียก function enter_learning() เพื่อทำการเริ่มต้นเก็บคำสั่งจาก remote

devices[0].enter_learning()

ให้เราเอา remote ทีวีจริงๆของเรามากดใส่เจ้าตัว Broadlink RM mini3 ใช่ครับเราต้องทำแบบนั้นแหละ!

ของผมจะใช้ให้เจ้าบอทเราเปิดปิดทีวี เพราะฉะนั้นเราต้องกดปุ่ม power บน remote 1 ครั้ง. หลัวจากนั้นทำการรันคำสั่ง Python เพื่อดึงค่าที่ remote ส่งไปให้ทีวี

ir_packet = devices[0].check_data()

ค่าที่ได้มา จะเป็น byte array ผมทำการ print ir_packet แล้วบันทึกเอาไว้ในตัวแปร

TV_POWER_BUTTON = b’&\x00x\x00\x00\x01*\x93\x14\x11\x14\x11\x146\x14\x11\x14\x11\x14\x12\x14\x11\x14\x11\x146\x146\x14\x11\x146\x145\x146\x146\x146\x14\x11\x14\x11\x14\x11\x146\x14\x11\x14\x12\x14\x11\x14\x11\x146\x146\x145\x14\x12\x145\x146\x146\x145\x14\x00\x055\x00\x01)I\x14\x00\x0cL\x00\x01+H\x15\x00\x0cM\x00\x01*H\x14\x00\x0cS\x00\x01*H\x14\x00\x0cH\x00\x01*H\x15\x00\x0cL\x00\x01,G\x15\x00\r\x05'

เอาล่ะในเมื่อได้ชุดคำสั่งที่เป็น byte array ของ remote มาแล้วก็ต้องมาลองกันหน่อย

ติดตั้ง Flask บน Raspberry Pi

Flask เป็น Python micro framework ที่ใช้งานง่ายมาก วิธีการติดตั้งเพียงแค่รัน command ใน Terminal

sudo pip install Flask

อย่างที่บอก Flask มันใช้งานง่ายมากจริง Code ที่ผมไว้เปิดปิดทีวีนี่แค่ copy มาจาก sample ในหน้าเว็บเค้า (http://flask.pocoo.org/) แล้วแก้นิดหน่อยเท่านั้นตามนี้เลย

หลังจากนั้นเราก็มา run server กันเลย command ก็แค่

FLASK_APP=flask.py flask run

(flask.py อันนี้เป็นชื่อไฟล์นะครับ) สิ่งที่ต้องมันใจก็คือ Broadlink กับเจ้า Raspberry Pi ของเราอยู่ใน Wifi วงเดียวกันนะครับ

โดย Default . แล้ว Flask จะไปอยู่บน Port 5000 อยากรู้ว่ามันทำงานสำเร็จมั้ยเราก็ลองเข้าที่ URL http://localhost:5000/ ดู

เรียบร้อยแล้วเราไปต่อกันที่ Part3 เลย

--

--