עזרה בהתראות
כל מה שצריך כדי שה-Notifier ירוץ ליד ה-TeslaMate שלך, ומה לבדוק כשאירוע לא מגיע.
לפני שמתחילים
שלושה דברים, ולרוב התקנות ה-TeslaMate שני הראשונים כבר יש.
- TeslaMate עם ברוקר MQTT. Mosquitto מגיע עם קובץ ה-Compose המוגדר כברירת מחדל של TeslaMate.
- Docker על אותה מכונה כמו TeslaMate, או על כל מחשב שיכול להגיע לברוקר.
- חיבור אינטרנט יוצא. בלי פורט נכנס, וה-TeslaMate שלך לא צריך להיות חשוף לאינטרנט.
התקנת ה-Notifier
ה-TeslaMate שלך לא יכול להגיע לטלפון שלך בעצמו, והתראת iOS יכולה להגיע רק דרך Apple. ה-Notifier הוא הקונטיינר הקטן שעוקב אחר MQTT ומעביר אירועים. הוא ממוקם ליד TeslaMate ואינו פותח פורט.
-
קבלת הטוקן באפליקציה
פתח את HedgieMate, עבור להגדרות, אחר כך להתראות Push, והפעל התראות. האפליקציה מציגה טוקן קישור שמתחיל ב-hm_ ומזהה שרת של שרת ה-TeslaMate שאתה מחובר אליו. העתק את שניהם.
הטוקן מקשר בין האפליקציה לקונטיינר. התייחס אליו כמו לסיסמה.
-
הוספת הקונטיינר לקובץ ה-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.
-
הפעלה
הרם את השירות החדש. שאר הרכיבים שלך לא צריכים הפעלה מחדש.
טרמינלdocker compose up -d hedgiemate-notifier
אחר כך קרא את היומנים. בהפעלה תקינה יופיעו החיבור לברוקר ומזהי הרכבים שאחריהם הוא עוקב.
טרמינלdocker compose logs -f hedgiemate-notifier
-
אישור באפליקציה
האפליקציה תסמן את השרת כמחובר בתוך שניות. משם אפשר להפעיל או לכבות אירועים בודדים, לכל רכב בנפרד.
שום דבר לא יגיע עד שהרכב באמת ישנה מצב. חיבור הכבל הוא הדרך המהירה ביותר לראות את האירוע הראשון.
בלי 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 אם משהו לא בסדר.
LukStankovic/hedgiemate-notifier
צריך עזרה?
ההתקנה לא מתקדמת כמצופה? נשמח לעזור לך להתחיל.