AI Hunter
Member
Bạn đã bao giờ muốn bước vào phòng và nói: "Jarvis, bật đèn lên" và căn phòng bừng sáng? Thay vì phụ thuộc vào Google Assistant hay Alexa (với nỗi lo về quyền riêng tư), chúng ta sẽ tự tay xây dựng hệ thống này.
Trong bài viết này, chúng ta sẽ kết nối Python với Home Assistant (HASS) để điều khiển thiết bị điện trong nhà bằng giọng nói Tiếng Việt.
Chúng ta không cần hàn mạch hay động vào dây điện. Python sẽ đóng vai trò là "Bộ não", ra lệnh cho "Cơ bắp" là Home Assistant thông qua API.
Phần cứng:
Cài đặt thư viện Python:
(Lưu ý: Nếu cài `pyaudio` bị lỗi trên Windows, hãy tìm file .whl tương ứng để cài thủ công hoặc dùng `pipwin install pyaudio`).
Để Python điều khiển được nhà, bạn cần cấp cho nó một chiếc "chìa khóa" (Token).
Dưới đây là đoạn code Python hoàn chỉnh (`jarvis_home.py`).
Cách dùng từ khóa `if/else` ở trên tuy nhanh nhưng hơi "cứng nhắc" (bạn phải nói đúng từ "bật" hoặc "tắt").
Để thông minh hơn, bạn có thể gửi câu nói của người dùng tới ChatGPT kèm theo danh sách thiết bị.
Ví dụ Prompt cho GPT:
Như vậy, Jarvis của bạn sẽ thực sự "hiểu" ngữ cảnh chứ không chỉ bắt từ khóa!
Trong bài viết này, chúng ta sẽ kết nối Python với Home Assistant (HASS) để điều khiển thiết bị điện trong nhà bằng giọng nói Tiếng Việt.
1. Kiến trúc hệ thống
Chúng ta không cần hàn mạch hay động vào dây điện. Python sẽ đóng vai trò là "Bộ não", ra lệnh cho "Cơ bắp" là Home Assistant thông qua API.
- Input: Microphone thu âm giọng nói của bạn.
- Processing: Python chuyển âm thanh thành văn bản (Speech-to-Text) và phân tích ý định.
- Action: Python gửi lệnh HTTP Request tới Home Assistant để bật/tắt thiết bị.
2. Chuẩn bị
Phần cứng:
- Một máy tính chạy Python (Laptop hoặc Raspberry Pi/Orange Pi).
- Microphone.
- Hệ thống Home Assistant đang hoạt động (đã kết nối ít nhất 1 bóng đèn hoặc công tắc).
Cài đặt thư viện Python:
Mã:
pip install requests speechrecognition pyaudio
3. Cấu hình Home Assistant
Để Python điều khiển được nhà, bạn cần cấp cho nó một chiếc "chìa khóa" (Token).
- Truy cập trang quản trị Home Assistant (thường là `http://IP_CUA_BAN:8123`).
- Nhấn vào tên tài khoản của bạn (góc dưới cùng bên trái).
- Kéo xuống dưới cùng, tìm mục Long-Lived Access Tokens.
- Nhấn Create Token -> Đặt tên là "Jarvis Python" -> Nhấn OK.
- QUAN TRỌNG: Copy chuỗi ký tự dài ngoằng hiện ra và lưu lại ngay. Bạn sẽ không xem lại được nó lần thứ 2 đâu.
4. Triển khai Code (Full Source)
Dưới đây là đoạn code Python hoàn chỉnh (`jarvis_home.py`).
Python:
import speech_recognition as sr
import requests
import json
# --- CẤU HÌNH (Thay đổi theo hệ thống của bạn) ---
HASS_URL = "http://192.168.1.10:8123" # IP của Home Assistant
TOKEN = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Ik..." # Dán token dài ngoằng vào đây (Giữ nguyên chữ Bearer ở đầu)
# Danh sách thiết bị (ID lấy trong Home Assistant)
DEVICES = {
"đèn phòng khách": "light.phong_khach",
"quạt": "switch.quat_tuong",
"đèn ngủ": "light.den_ngu_rgb"
}
def call_hass_service(entity_id, action):
"""Gửi lệnh tới Home Assistant qua REST API"""
# Xác định domain (light hoặc switch) dựa vào entity_id
domain = entity_id.split('.')[0]
url = f"{HASS_URL}/api/services/{domain}/{action}"
headers = {
"Authorization": TOKEN,
"content-type": "application/json",
}
data = {"entity_id": entity_id}
try:
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(f"✅ Lệnh thành công: {action} -> {entity_id}")
return True
else:
print(f"❌ Lỗi HASS: {response.text}")
except Exception as e:
print(f"⚠️ Không kết nối được HASS: {e}")
return False
def listen():
"""Nghe và nhận diện giọng nói Tiếng Việt"""
r = sr.Recognizer()
with sr.Microphone() as source:
print("\n🎤 Đang lắng nghe... (Nói 'Jarvis' để ra lệnh)")
r.adjust_for_ambient_noise(source)
try:
audio = r.listen(source, timeout=5, phrase_time_limit=5)
# Dùng Google API (Free) để nhận diện tiếng Việt
text = r.recognize_google(audio, language="vi-VN")
print(f"🗣️ Bạn nói: {text}")
return text.lower()
except sr.UnknownValueError:
print("bot: (Không nghe rõ)")
return ""
except sr.RequestError:
print("bot: (Lỗi mạng)")
return ""
except:
return ""
def process_command(text):
"""Xử lý logic điều khiển"""
# 1. Xác định hành động (Bật/Tắt)
action = None
if "bật" in text or "mở" in text:
action = "turn_on"
elif "tắt" in text or "đóng" in text:
action = "turn_off"
if not action:
return # Không làm gì nếu không có lệnh rõ ràng
# 2. Xác định thiết bị
target_device = None
for name, entity_id in DEVICES.items():
if name in text:
target_device = entity_id
break
# 3. Thực thi
if target_device:
call_hass_service(target_device, action)
else:
print("⚠️ Không tìm thấy thiết bị nào trùng khớp trong câu nói.")
# --- VÒNG LẶP CHÍNH ---
if __name__ == "__main__":
print("--- JARVIS HOME CONTROL ---")
while True:
command = listen()
if command:
process_command(command)
5. Giải thích & Hướng dẫn
- Cơ chế nhận diện: Chúng ta dùng `speech_recognition` kết nối với Google API. Đây là cách miễn phí và chính xác nhất cho Tiếng Việt hiện nay (yêu cầu có Internet).
- Mapping thiết bị: Tại biến `DEVICES`, bạn cần khai báo tên gọi thân mật (ví dụ: "đèn phòng khách") tương ứng với `entity_id` kỹ thuật trong Home Assistant (ví dụ: `light.yeelight_color_1`).
- REST API: Hàm `call_hass_service` đóng vai trò như một người đưa thư, gửi gói tin JSON chứa lệnh điều khiển tới server Home Assistant.
6. Nâng cấp: Kết hợp với ChatGPT (AI Agent)
Cách dùng từ khóa `if/else` ở trên tuy nhanh nhưng hơi "cứng nhắc" (bạn phải nói đúng từ "bật" hoặc "tắt").
Để thông minh hơn, bạn có thể gửi câu nói của người dùng tới ChatGPT kèm theo danh sách thiết bị.
Ví dụ Prompt cho GPT:
User nói: "Phòng tối quá làm sao đọc sách".
Danh sách thiết bị: [light.phong_khach, switch.quat].
Hãy trả về JSON lệnh cần thực hiện.
-> GPT sẽ tự hiểu và trả về: {"action": "turn_on", "device": "light.phong_khach"}
Như vậy, Jarvis của bạn sẽ thực sự "hiểu" ngữ cảnh chứ không chỉ bắt từ khóa!
Bài viết liên quan