סקירת ההתראות

עזרה בהתראות

כל מה שצריך כדי שה-Notifier ירוץ ליד ה-TeslaMate שלך, ומה לבדוק כשאירוע לא מגיע.

לפני שמתחילים

שלושה דברים, ולרוב התקנות ה-TeslaMate שני הראשונים כבר יש.

  • TeslaMate עם ברוקר MQTT. Mosquitto מגיע עם קובץ ה-Compose המוגדר כברירת מחדל של TeslaMate.
  • Docker על אותה מכונה כמו TeslaMate, או על כל מחשב שיכול להגיע לברוקר.
  • חיבור אינטרנט יוצא. בלי פורט נכנס, וה-TeslaMate שלך לא צריך להיות חשוף לאינטרנט.

התקנת ה-Notifier

ה-TeslaMate שלך לא יכול להגיע לטלפון שלך בעצמו, והתראת iOS יכולה להגיע רק דרך Apple. ה-Notifier הוא הקונטיינר הקטן שעוקב אחר MQTT ומעביר אירועים. הוא ממוקם ליד TeslaMate ואינו פותח פורט.

  1. קבלת הטוקן באפליקציה

    פתח את HedgieMate, עבור להגדרות, אחר כך להתראות Push, והפעל התראות. האפליקציה מציגה טוקן קישור שמתחיל ב-hm_ ומזהה שרת של שרת ה-TeslaMate שאתה מחובר אליו. העתק את שניהם.

    הטוקן מקשר בין האפליקציה לקונטיינר. התייחס אליו כמו לסיסמה.

  2. הוספת הקונטיינר לקובץ ה-Compose

    פתח את קובץ ה-docker-compose.yml שממנו אתה מריץ את TeslaMate והוסף את השירות שלהלן. מכיוון שהוא באותו קובץ, הוא חולק רשת עם הברוקר שלך, ולכן MQTT_HOST הוא פשוט שם השירות של הברוקר.

    docker-compose.yml
    # add under services: in the docker-compose.yml you run TeslaMate from
      hedgiemate-notifier:
        image: hedgiemate/notifier:latest
        restart: unless-stopped
        depends_on:
          - mosquitto
        environment:
          HEDGIEMATE_USER_TOKEN: "hm_your_token_here"
          SERVER_ID: "your-server-uuid"
          MQTT_HOST: "mosquitto"
          MQTT_PORT: "1883"
          CAR_IDS: "1"
          LOG_LEVEL: "info"
        volumes:
          - hedgiemate-notifier-data:/data
    
    # and under the top-level volumes: key, adding it if the file has none
      hedgiemate-notifier-data:

    ה-Volume אופציונלי. הוא שומר את שמות הרכבים בין הפעלות; בלעדיו ה-Relay ישלים את השם בכל מקרה. השתמש ב-Volume בשם ולא ב-bind mount: הקונטיינר פועל כמשתמש שאינו root ואינו יכול לכתוב לתיקייה שנוצרה על ידי Docker כ-root.

  3. הפעלה

    הרם את השירות החדש. שאר הרכיבים שלך לא צריכים הפעלה מחדש.

    טרמינל
    docker compose up -d hedgiemate-notifier

    אחר כך קרא את היומנים. בהפעלה תקינה יופיעו החיבור לברוקר ומזהי הרכבים שאחריהם הוא עוקב.

    טרמינל
    docker compose logs -f hedgiemate-notifier
  4. אישור באפליקציה

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

    שום דבר לא יגיע עד שהרכב באמת ישנה מצב. חיבור הכבל הוא הדרך המהירה ביותר לראות את האירוע הראשון.

בלי Compose

אם TeslaMate לא מנוהל דרך Compose, docker run עושה את אותו הדבר. כוון את MQTT_HOST למחשב שהקונטיינר יכול להגיע אליו.

טרמינל
docker run -d \
  --name hedgiemate-notifier \
  --restart unless-stopped \
  -e HEDGIEMATE_USER_TOKEN="hm_your_token_here" \
  -e SERVER_ID="your-server-uuid" \
  -e MQTT_HOST="your-mqtt-host" \
  -e CAR_IDS="1" \
  hedgiemate/notifier:latest

יותר מ-TeslaMate אחד

הרץ Notifier אחד ליד כל שרת. אותו טוקן קישור עובד בכל מקום. מזהה השרת הוא מה שמפריד ביניהם באפליקציה.

הגדרות

הכול מוגדר באמצעות משתני סביבה. שלושה הם חובה, לשאר יש ברירות מחדל שעובדות.

משתנה ברירת מחדל תיאור
HEDGIEMATE_USER_TOKEN חובה אין טוקן הקישור מהאפליקציה. מתחיל ב-hm_.
MQTT_HOST חובה אין שם המחשב של ברוקר ה-MQTT שלך. בתוך Compose זה שם השירות, לרוב mosquitto.
SERVER_ID חובה אין ה-UUID של השרת מהאפליקציה. הקונטיינר מופעל גם בלעדיו, אבל אז ההגדרות לכל שרת ולכל רכב שנעשו באפליקציה לא נלקחות בחשבון.
MQTT_PORT 1883 הפורט של הברוקר.
MQTT_USERNAME אין שם המשתמש של הברוקר, אם הברוקר שלך דורש אימות.
MQTT_PASSWORD אין הסיסמה של הברוקר.
MQTT_CLIENT_ID hedgiemate-notifier מזהה הלקוח שמשמש מול הברוקר. שנה אותו אם משהו אחר כבר מתחבר בשם הזה.
MQTT_TLS false הגדר ל-true לברוקר עם TLS. פורט ברירת המחדל עובר אז ל-8883.
MQTT_NAMESPACE אין התאם ל-MQTT_NAMESPACE של TeslaMate שלך, אם הגדרת אחד. הנושאים יהיו teslamate<namespace>/cars/#.
CAR_IDS 1 מזהי הרכבים שאחריהם לעקוב, מופרדים בפסיקים, למשל 1,2. לכל רכב מכונת מצבים משלו.
LOG_LEVEL info debug, info, warn או error.
RELAY_URL https://push.hedgiemate.com ה-Endpoint של ה-Relay. אין סיבה לשנות אותו.

כל האירועים

כל שורה היא מפסק נפרד לכל רכב באפליקציה. עדכוני פעילויות בזמן אמת אינם התראות ואינם מופיעים כאן.

התראה נשלחת כאשר
נסיעה
נסיעה החלה state → driving
נסיעה הסתיימה state leaves driving
טעינה
טעינה החלה charging_state → Charging
טעינה הושלמה charging_state → Complete
טעינה הופסקה charging_state leaves Charging without Complete
הכבל חובר plugged_in → true
הכבל נותק plugged_in → false
סוללה
סוללה חלשה battery_level ≤ BATTERY_LOW_THRESHOLD
יעד הטעינה הושג battery_level ≥ BATTERY_HIGH_THRESHOLD
מיקום
כניסה לגאופנס geofence set
יציאה מגאופנס geofence cleared or changed
אבטחה
מצב שמירה מקליט center_display_state = 7
רכב
עדכון תוכנה update_available → true
נרדם state → asleep pending
ישן state → asleep
התעורר state leaves asleep

שום דבר לא מגיע

עבור על הרשימה מלמעלה למטה. ברוב המקרים מדובר באחד משלושת הראשונים.

האפליקציה עדיין מציגה שהשרת לא מחובר

בדוק עם docker compose ps שהקונטיינר אכן פועל, ואחר כך קרא את היומנים. MQTT_HOST שגוי הוא הסיבה הרגילה: בתוך Compose זה שם השירות של הברוקר, mosquitto, ולא localhost.

הקונטיינר פועל אבל אף אירוע לא נשלח

CAR_IDS חייב להתאים למזהה הרכב שבו TeslaMate משתמש. TeslaMate ממספר רכבים מ-1, ועם כמה רכבים מציינים את כולם: CAR_IDS=1,2.

MQTT מתחבר והיומן נשאר שקט

אם הגדרת MQTT_NAMESPACE ב-TeslaMate, הגדר את אותו ערך ב-Notifier. אחרת שמות הנושאים לא מתאימים והקונטיינר יושב בלי מה לקרוא.

חלק מהאירועים מגיעים, אחרים לא

כל אירוע הוא מפסק לכל רכב באפליקציה. פתח את השרת בהגדרות ובדוק את רשימת האירועים של אותו רכב.

התראות סוללה לא נשלחות בכלל

BATTERY_LOW_THRESHOLD ו-BATTERY_HIGH_THRESHOLD מוגדרים כברירת מחדל ל-20 ול-90. הן נשלחות פעם אחת בכל טעינה, כך שרכב שלא חצה את הרף מאז שהתחיל להיטען לא ישלח אחת.

ההתראות נפסקות אחרי כמה ימים

ודא שלשירות יש restart: unless-stopped, כדי שיחזור יחד עם המחשב. אחר כך בדוק ב-iOS: מצב מיקוד או הגדרות ההתראות של האפליקציה עלולים לחסום אותן.

פעילויות בזמן אמת לא מופיעות

צריך לאשר פעילויות בזמן אמת ל-HedgieMate בהגדרות iOS, וצריכה להיות פעילות מתמשכת. Dynamic Island דורש iPhone 14 Pro ואילך.

הברוקר דורש התחברות או TLS

הגדר MQTT_USERNAME ו-MQTT_PASSWORD. ל-TLS הגדר את MQTT_TLS ל-true, מה שמעביר את פורט ברירת המחדל ל-8883.

אתה רוצה לראות מה הוא עושה

הגדר את LOG_LEVEL ל-debug, שחזר את המקרה ואחר כך החזר אותו. ב-debug מודפסת כל הודעת MQTT וכל החלטה שנגזרת ממנה.

שאלות

למה בכלל צריך את ה-Notifier?

ה-TeslaMate שלך נמצא בשרת שלך ואין לו דרך להגיע לטלפון שלך, והתראת iOS יכולה להימסר רק על ידי Apple. ה-Notifier סוגר את הפער: הוא עוקב אחר נושאי ה-MQTT שלך, מזהה את שינוי המצב ושולח את האירוע כלפי חוץ למסירה.

האם ה-TeslaMate שלי צריך להיות נגיש מהאינטרנט?

לא. ה-Notifier יוצר רק חיבורים יוצאים, כך שאין צורך לחשוף דבר ואין צורך להעביר פורט כדי שההתראות יעבדו.

מה בעצם עוזב את השרת שלי?

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

אפשר להריץ אותו על מכונה אחרת מ-TeslaMate?

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

האם הוא עובד עם כמה רכבים?

כן. ציין את המזהים ב-CAR_IDS ולכל רכב יהיה מעקב מצב נפרד ומפסקים נפרדים באפליקציה.

מה קורה אם ה-Relay לא נגיש?

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

האם הוא שומר משהו?

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

איך מעדכנים אותו?

משוך את ה-image מחדש וצור את השירות שוב. הערות הגרסה נמצאות בדף ה-Releases ב-GitHub.

איך מכבים התראות?

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

קוד המקור

ה-Notifier כתוב ב-Go ברישיון MIT. קרא אותו, או פתח Issue אם משהו לא בסדר.

Image של Docker hedgiemate/notifier:latest Docker Hub

צריך עזרה?

ההתקנה לא מתקדמת כמצופה? נשמח לעזור לך להתחיל.