ADB – שליטה במכשירים מבוססי AndroidTV דרך מערכת הבית החכם

Home-Assistant adb

בעידן של היום, בו ישנה תחרות גדולה בין ספקיות התוכן שללא ספק עושה לנו הלקוחות טוב, השימוש בסטרימרים השונים גדל מיום ליום. לאחרונה חיפשתי דרך לשלוט בכלל הסטרימרים בצורה פשוטה ונוחה דרך מערכת הבית החכם. אחד האתגרים בהם נתקלתי היה ליצור משהו אחיד שיוכל לשלוט בסוגים שונים של סטרימרים וכך הגעתי ל ADB.

ADB או Android Debug Bridge הוא בעצם מצב מיוחד שמאפשר גישה של מפתחים אל המאפיינים השונים של המערכת ולקבל ממנה פידבקים ומידע נוסף בזמן הפיתוח. ADB מאפשר לנו לבצע שלל פעולות על המכשיר דרך הרשת ובניהן ניתן לעשות:

  • פתיחה/ סגירה של אפליקציות.
  • שינוי עוצמת ווליום / השתקה.
  • ניווט במקשיפ (כאילו לחצנו בשלט).
  • שליטה בניגון וידאו.
  • קבלת צילום מסך של מה שמוצג כרגע.
  • הצגת רשימת האפליקציות המותקנות על המכשיר
  • ועוד.

במדריך זה אסביר כיצד ניתן להשתמש ב ADB על מנת לשלוט בסטרימרים ובטלויזיות מבוססות AndroidTV, שנתחיל?

שלב א' – הפעלת מצב מפתחים בסטרימרים / מכשירים מבוססי AndroidTV

על מנת שנוכל לשלוט באותם מכשירים עלינו בעצם להפעיל את היכולת לכך על המכשיר עצמו. לצורך כך עקבו אחר השלבים הבאים (שימו לב כי יתכן ומיקום הכפתורים והתפריטים משתנים בין גרסאות ה Android השונות):

שלב ראשון, כנסו למסך ההגדרות:

ADB - AndroidTV - Settings

כעת, נווטו אל האיקון של אודות (About):

ADB - AndroidTV - About

כעת, נווטו על האייקון "Build" ולחצו עליו 7 פעמים

ADB - AndroidTV - Build

כעת חזרו אל מסך הבית ולחצו שוב על הגדרות. וגללו עד אשר תראו את האופציה להכנס ל "מצב מפתחים" (Developer Options).

ADB - AndroidTV - Developer Options

2 השלבים הבאים מיועדים עבור בעלי Xiaomi Mibox s אשר משתמשים במתאם Usb to Lan. על מנת שתוכלו להפעיל מצב של "ניפוי באגים" יש לשנות את תצורת ה USB מתצורת טעינה לכל תצורה אחרת, למשל MTP. לצורך כך גללו מטה עד אשר תגיעו לתפריט של בחירת "תצורת USB":

אפשרויות מפתח - תצורת USB

כעת, בחרו בתצורת ה USB הרצויה:

בחר תצורת UDB

השלב הבא (מיועד לכולם), הוא הפעלת ניפוי באגים. על מנת לאפשר את החיבור יש להפעיל את "ניפוי באגים ב 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

הפלט אמור להראות כך:

ADB Devices List

שלב ג' – חיבור למערכת הבית החכם

בשלב זה אסביר כיצד ניתן לחבר את הסטרימר אל מערכת הבית החכם, במקרה שלנו 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 לדפדפן תוכלו לראות את מה שהסטרימר מציג כרגע (בהמשך אסביר גם איך להציג אותה בצורה יפה יותר):

Home-Assistant adb

שלב ג' – הוספת שלט והגדרתו באמצעות Lovelace

בעזרתו של Dima Goltsman המוכשר שפיתח את generic-remote-control-card ניתן עכשיו ממש בקלות להוסיף את השלט לתצוגה בצורה פשוטה ונוחה ולהגדיר אותו לשימוש ב ADB, Broadlink או כל שיטה אחרת בה נבחר.

על מנת להתחיל יש תחילה להוסיף את הקבצים הנחוצים לתצוגה ולתפקוד השלט. את זה ניתן לבצע באחת משתי השיטות הבאות:

  1. שימוש ב HACS (מועדפת).
  2. העתקה ידנית של הקבצים.

במדריך זה אסביר על השיטה הראשונה, שימוש ב HACS. ראשית יש להתקין את HACS על פי ההוראות כאן ולאתחל את Home-Assistanr. אם ההתקנה עברה כראוי תוכלו לראות כי לתפריט הראשי נוספה אופציה של Community:

Home-Assistant HACS

כעת, עברו למסך של HACS והכנסו להגדרות, שם נוכל להוסיף את הריפו של דימה ולהתקין את הקבצים:

Home-Assistant Hacs Settings - Techblog

כעת, בתחתית במסך הכניסו את כתובת הריפו של דימה, בחרו קטגוריה ולחצו על סמל הדיסקט (שמירה),
כתובת הריפו היא: https://github.com/dimagoltsman/generic-remote-control-card.

כעת, ניתן לחזור למסך הראשי של HACS ולבצע את ההתקנה של הקבצים הנחוצים לשלט. עברו לקטגורית ה Plugins ושם הקלידו את המילה remote ולחצו על "Generic Remote Control Card":

Generic Remote Control Card

כאן, תקבלו תפריט עם האפשרויות השונות (התקנה, עדכון ועוד), לחצו על התקנה:

Generic Remote Control Card Installation

על מנת שנוכל להשתמש בכרטיס, ערכו את קובץ ה 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 כי השלט נוסף בהצלחה:

Home-Assistant Mibox Remote Control.

בהצלחה!

3 Comments

  1. למישהו יש בעיה עם MiBox S – שכונן USB שחובר – לא מזוהה (כאשר USB Debugging עובד)?

    ניסיתי לשים את ההגדרות MTP שמצויינות פה ועדיין כלום

Leave a Reply

כתובת האימייל שלך לא תפורסם


*