בעידן של היום, בו ישנה תחרות גדולה בין ספקיות התוכן שללא ספק עושה לנו הלקוחות טוב, השימוש בסטרימרים השונים גדל מיום ליום. לאחרונה חיפשתי דרך לשלוט בכלל הסטרימרים בצורה פשוטה ונוחה דרך מערכת הבית החכם. אחד האתגרים בהם נתקלתי היה ליצור משהו אחיד שיוכל לשלוט בסוגים שונים של סטרימרים וכך הגעתי ל ADB.
ADB או Android Debug Bridge הוא בעצם מצב מיוחד שמאפשר גישה של מפתחים אל המאפיינים השונים של המערכת ולקבל ממנה פידבקים ומידע נוסף בזמן הפיתוח. ADB מאפשר לנו לבצע שלל פעולות על המכשיר דרך הרשת ובניהן ניתן לעשות:
- פתיחה/ סגירה של אפליקציות.
- שינוי עוצמת ווליום / השתקה.
- ניווט במקשיפ (כאילו לחצנו בשלט).
- שליטה בניגון וידאו.
- קבלת צילום מסך של מה שמוצג כרגע.
- הצגת רשימת האפליקציות המותקנות על המכשיר
- ועוד.
במדריך זה אסביר כיצד ניתן להשתמש ב ADB על מנת לשלוט בסטרימרים ובטלויזיות מבוססות AndroidTV, שנתחיל?
שלב א' – הפעלת מצב מפתחים בסטרימרים / מכשירים מבוססי AndroidTV
על מנת שנוכל לשלוט באותם מכשירים עלינו בעצם להפעיל את היכולת לכך על המכשיר עצמו. לצורך כך עקבו אחר השלבים הבאים (שימו לב כי יתכן ומיקום הכפתורים והתפריטים משתנים בין גרסאות ה Android השונות):
שלב ראשון, כנסו למסך ההגדרות:
כעת, נווטו אל האיקון של אודות (About):
כעת, נווטו על האייקון "Build" ולחצו עליו 7 פעמים
כעת חזרו אל מסך הבית ולחצו שוב על הגדרות. וגללו עד אשר תראו את האופציה להכנס ל "מצב מפתחים" (Developer Options).
2 השלבים הבאים מיועדים עבור בעלי Xiaomi Mibox s אשר משתמשים במתאם Usb to Lan. על מנת שתוכלו להפעיל מצב של "ניפוי באגים" יש לשנות את תצורת ה USB מתצורת טעינה לכל תצורה אחרת, למשל MTP. לצורך כך גללו מטה עד אשר תגיעו לתפריט של בחירת "תצורת USB":
כעת, בחרו בתצורת ה USB הרצויה:
השלב הבא (מיועד לכולם), הוא הפעלת ניפוי באגים. על מנת לאפשר את החיבור יש להפעיל את "ניפוי באגים ב USB" ולאחר מכן על אישור.
שלב ב' – התקנת ADB Server
ADB Server הוא בעצם רכיב התקשורת שיקשר בין מערכת הבית החכם לבין מכשיר האנדרואיד עליו תרצו לשלוט. את המערכת ניתן להתקין במספר אופנים אך במדריך זה אתמקד הבהתקנה באמצעות docker container.
לצורך ההתקנה, פתחו את קובץ ה docker-compose שלכם והכניסו פנימה את הקוד הבא:
adb:
image: sorccu/adb
hostname: adb
container_name: adb
restart: unless-stopped
command: sh -c "/root/.android/startup.sh & adb -a -P 5037 server nodaemon"
volumes:
- ./adb/config:/root/.android
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- PUID=${PUID}
- TZ=${TZ}
- DEBUG_MODE=${DEBUG_MODE}
- LOG_LEVEL="info"
- KEYS_PATH="./root"
ports:
- "5037:5037"
כאשר:
- ./adb/config הוא הנתיב להגדרות.
- KEYS_PATH – נתיב למיקום בו יווצרו המפתחות שישמו להתחברות.
לפני התקנת הדוקר על ידי הפקודה docker-compose יש ליצור קובץ סקריפט על פי הנתיב שצויין בנתיב של ה command. הסקיפט הזה יהיה אחרי על החיבור בין שרת ה ADB לבין מכשירי האנדרואיד השונים. לצורך כך צרו את הקובץ startup.sh והדביקו פנימה את קטע הקוד הבא:
#!/bin/sh
sleep 5
DEVICES="192.168.0.89 192.168.0.62"
echo "Connecting to devices."
for device in $DEVICES; do
adb connect $device
done
echo "Done."
while true; do
for device in $DEVICES; do
adb connect $device > /dev/null 2>&1
done
sleep 40
done
כאשר תחת DEVICES הכניסו את כתובות ה IP של מכשירי האנדרואיד אשר תרצו לשלוט עליהם. את הכתובות יש להכניס עם רווחים. שמרו את הקובץ והתקינו את הקונטיינר באמצעות הפקודה הבאה:
docker-compose up -d
כעת תופיע על המסך של מכשיר האנדרואיד שלכם הודעה שנראת כך:
הודעה זו מבקשת את אישורכם לביצוע החיבור בין שרת ה ADB למכשיר האנדרואיד. סמנו את "אפשר תמיד ממחשב זה" אחרת היא תקפוץ שוב לאחר כל אתחול.
על מנת לוודא שהשרת אכן רץ וכי החיבור למכישיר האנדרואיד נריץ את הפקודה הבאה בתוך הקונטיינר:
adb devices
הפלט אמור להראות כך:
שלב ג' – חיבור למערכת הבית החכם
בשלב זה אסביר כיצד ניתן לחבר את הסטרימר אל מערכת הבית החכם, במקרה שלנו Home-Assistant ואיך להגדיר את התצוגה שלו.
בשלב הראשון נוסיף קונפיגורציה פשוטה שתוסיף את הסטרימר כ Media Player (בהמשך נבצע הגדרות מתקדמות יותר). לצורך כך, הוסיפו את קטע הקוד הבא לקובץ ה configuration.yaml:
media_player:
# Use the Python ADB implementation
- platform: androidtv
name: mibox
host: 192.168.0.89
adb_server_ip: 192.168.0.252
exclude_unnamed_apps: true
כאשר:
- name – שם לתצוגה בתוך הממשק של HA.
- host – כתובת ה IP הסטרימר / AndroidTV
- adb_server_ip – כתובת ה IP של קונטיינר ה ADB שהתקנו בשלב הקודם.
כעת, שמרו את ההגדרות ואתחלו את Home-Assistant. אם ביצעתם הכל כראוי, תוכלו לראות ב Developer Tools את הסטרימר בצורה הבאה:
ואם תכניסו את הכתובת שתחת entity_picture לדפדפן תוכלו לראות את מה שהסטרימר מציג כרגע (בהמשך אסביר גם איך להציג אותה בצורה יפה יותר):
שלב ג' – הוספת שלט והגדרתו באמצעות Lovelace
בעזרתו של Dima Goltsman המוכשר שפיתח את generic-remote-control-card ניתן עכשיו ממש בקלות להוסיף את השלט לתצוגה בצורה פשוטה ונוחה ולהגדיר אותו לשימוש ב ADB, Broadlink או כל שיטה אחרת בה נבחר.
על מנת להתחיל יש תחילה להוסיף את הקבצים הנחוצים לתצוגה ולתפקוד השלט. את זה ניתן לבצע באחת משתי השיטות הבאות:
- שימוש ב HACS (מועדפת).
- העתקה ידנית של הקבצים.
במדריך זה אסביר על השיטה הראשונה, שימוש ב HACS. ראשית יש להתקין את HACS על פי ההוראות כאן ולאתחל את Home-Assistanr. אם ההתקנה עברה כראוי תוכלו לראות כי לתפריט הראשי נוספה אופציה של Community:
כעת, עברו למסך של HACS והכנסו להגדרות, שם נוכל להוסיף את הריפו של דימה ולהתקין את הקבצים:
כעת, בתחתית במסך הכניסו את כתובת הריפו של דימה, בחרו קטגוריה ולחצו על סמל הדיסקט (שמירה),
כתובת הריפו היא: https://github.com/dimagoltsman/generic-remote-control-card.
כעת, ניתן לחזור למסך הראשי של HACS ולבצע את ההתקנה של הקבצים הנחוצים לשלט. עברו לקטגורית ה Plugins ושם הקלידו את המילה remote ולחצו על "Generic Remote Control Card":
כאן, תקבלו תפריט עם האפשרויות השונות (התקנה, עדכון ועוד), לחצו על התקנה:
על מנת שנוכל להשתמש בכרטיס, ערכו את קובץ ה ui-lovelace.yaml והוסיפו את השורות הבאות בתחילת הקובץ תחת resources בצורה הבאה:
- url: /local/community/generic-remote-control-card/generic-remote-content-card.js
type: module
ואתחלו את Home-Assistant על מנת שהשינויים יכנסו לתוקף.
ועכשיו נוסיף את השלט עצמו לתצוגה. כפי שציינתי, הכרטיס של דימה תומך במספר שלטים ולכל שלט ניתן להגדיר באמצעות איזה רכיב הוא יעבוד (ADB, Broadlink או כל רכיב אחר שנמצא לנכון). בחלק הזה נוסיף שלט ל Mibox S ונתמש ב ADB שהתקנו בשלבים הקודמים של המדריך.
לצורך כך, פתחו שוב את קובץ ה ui-lovelace.yaml והדביקו פנימה את הקוד הבא:
# Stremers
##################################################
- type: vertical-stack
title: Mediaplayers
icon: mdi:music-box-outline
cards:
- name: Mibox
remote_template: mibox
type: 'custom:generic-remote-control-card'
buttons:
back:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 4
bottom:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 20
clickleft:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 21
clickright:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 22
home:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 3
ok:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 66
power:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 26
top:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 19
volumedown:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 25
volumeup:
call: androidtv.adb_command
data:
entity_id: media_player.mibox
command: input keyevent 24
##################################################
כאשר:
- remote_template – מציין איזה סוג שלט להציג (פרטנר, מיבוקס וכו').
- entity_id – ה ID שקיבל הרכיבב של ה android tv (לפי ההגדרה שנעשתה ב Home-Assistant).
שמרו את הקובץ ורעננו את התצוגה. אם ביצעתם הכל כראוי תוכלו לראות ב Home-Assistant כי השלט נוסף בהצלחה:
בהצלחה!
למישהו יש בעיה עם MiBox S – שכונן USB שחובר – לא מזוהה (כאשר USB Debugging עובד)?
ניסיתי לשים את ההגדרות MTP שמצויינות פה ועדיין כלום
מרשים
חזק ביותר. כל הכבוד!