Nápověda k notifikacím
Vše, co potřebujete ke spuštění Notifieru vedle vašeho TeslaMate, a co zkontrolovat, když událost nedorazí.
Než začnete
Tři věci a většina instalací TeslaMate má první dvě už hotové.
- TeslaMate s MQTT brokerem. Mosquitto je součástí výchozího Compose souboru TeslaMate.
- Docker na stejném stroji jako TeslaMate, nebo na jakémkoli hostiteli, který dosáhne na brokera.
- Odchozí připojení k internetu. Žádný příchozí port, TeslaMate nemusí být veřejně dostupný.
Instalace Notifieru
TeslaMate se k vašemu telefonu sám nedostane a notifikace na iOS může přijít jedině přes Apple. Notifier je ten malý kontejner, který sleduje MQTT a události předává dál. Běží vedle TeslaMate a neotevírá žádný port.
-
Získejte token v aplikaci
Otevřete HedgieMate, jděte do Nastavení a pak do Push notifikací a zapněte je. Aplikace ukáže propojovací token začínající na hm_ a ID serveru, ke kterému jste připojeni. Zkopírujte si obojí.
Token propojuje aplikaci s kontejnerem. Chovejte se k němu jako k heslu.
-
Přidejte kontejner do Compose souboru
Otevřete docker-compose.yml, ze kterého spouštíte TeslaMate, a přidejte službu níže. Když zůstane ve stejném souboru, sdílí síť s brokerem, takže MQTT_HOST je prostě název služby brokera.
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 je nepovinný. Uchová názvy aut přes restart, bez něj je doplní relay. Použijte pojmenovaný volume, ne bind mount: kontejner běží pod neprivilegovaným uživatelem a do složky, kterou Docker vytvořil jako root, nemá právo zapisovat.
-
Spusťte ho
Nastartujte novou službu. Zbytek vašeho stacku restartovat nemusíte.
Termináldocker compose up -d hedgiemate-notifier
Pak se podívejte do logu. Zdravý start vypíše připojení k brokeru a ID aut, která sleduje.
Termináldocker compose logs -f hedgiemate-notifier
-
Ověřte v aplikaci
Aplikace během několika sekund označí server jako připojený. Odtud můžete jednotlivé události zapínat a vypínat pro každé auto zvlášť.
Nic nedorazí, dokud auto skutečně nezmění stav. Nejrychleji uvidíte první událost po zapojení do nabíječky.
Bez Compose
Pokud TeslaMate neběží přes Compose, docker run udělá totéž. Do MQTT_HOST zadejte hostitele, na kterého kontejner dosáhne.
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
Více TeslaMate serverů
U každého serveru spusťte jeden Notifier. Stejný propojovací token funguje všude. Servery od sebe v aplikaci odlišuje ID serveru.
Konfigurace
Vše se nastavuje proměnnými prostředí. Tři jsou povinné, zbytek má funkční výchozí hodnoty.
| Proměnná | Výchozí | Popis |
|---|---|---|
HEDGIEMATE_USER_TOKEN povinné | žádná | Propojovací token z aplikace. Začíná na hm_. |
MQTT_HOST povinné | žádná | Hostname vašeho MQTT brokera. Uvnitř Compose je to název služby, obvykle mosquitto. |
SERVER_ID povinné | žádná | UUID serveru z aplikace. Kontejner se spustí i bez něj, ale nastavení pro jednotlivé servery a auta se pak ignoruje. |
MQTT_PORT | 1883 | Port brokera. |
MQTT_USERNAME | žádná | Uživatelské jméno k brokeru, pokud vyžaduje přihlášení. |
MQTT_PASSWORD | žádná | Heslo k brokeru. |
MQTT_CLIENT_ID | hedgiemate-notifier | Client ID používané na brokeru. Změňte ho, pokud se pod ním už připojuje něco jiného. |
MQTT_TLS | false | Nastavte na true pro brokera přes TLS. Výchozí port se pak změní na 8883. |
MQTT_NAMESPACE | žádná | Musí odpovídat MQTT_NAMESPACE ve vašem TeslaMate, pokud jste ho nastavili. Témata se změní na teslamate<namespace>/cars/#. |
CAR_IDS | 1 | ID aut ke sledování oddělená čárkou, například 1,2. Každé auto má vlastní stavový automat. |
LOG_LEVEL | info | debug, info, warn nebo error. |
RELAY_URL | https://push.hedgiemate.com | Adresa relay serveru. Není důvod ji měnit. |
Všechny události
Každý řádek je samostatný přepínač pro každé auto v aplikaci. Aktualizace Live Activities nejsou notifikace a v seznamu nejsou.
| Notifikace | Odešle se, když |
|---|---|
| Jízda | |
| Jízda zahájena | state → driving |
| Jízda ukončena | state leaves driving |
| Nabíjení | |
| Nabíjení zahájeno | charging_state → Charging |
| Nabíjení dokončeno | charging_state → Complete |
| Nabíjení přerušeno | charging_state leaves Charging without Complete |
| Nabíječka připojena | plugged_in → true |
| Nabíječka odpojena | plugged_in → false |
| Baterie | |
| Nízká baterie | battery_level ≤ BATTERY_LOW_THRESHOLD |
| Cílová úroveň baterie | battery_level ≥ BATTERY_HIGH_THRESHOLD |
| Poloha | |
| Vstup do geofence | geofence set |
| Opuštění geofence | geofence cleared or changed |
| Zabezpečení | |
| Nahrávání Sentry | center_display_state = 7 |
| Vozidlo | |
| Aktualizace softwaru | update_available → true |
| Usíná | state → asleep pending |
| Spí | state → asleep |
| Vozidlo se probudilo | state leaves asleep |
Nic nechodí
Projděte seznam odshora. Většina případů je jeden z prvních tří.
Aplikace pořád píše, že server není připojen
Zkontrolujte přes docker compose ps, že kontejner opravdu běží, a přečtěte si jeho log. Nejčastější příčinou je špatný MQTT_HOST: uvnitř Compose je to název služby brokera, tedy mosquitto, ne localhost.
Kontejner běží, ale žádná událost nepřijde
CAR_IDS musí odpovídat ID auta, které používá TeslaMate. TeslaMate čísluje auta od 1 a při více autech je vypište: CAR_IDS=1,2.
MQTT se připojí a v logu je ticho
Pokud jste v TeslaMate nastavili MQTT_NAMESPACE, nastavte stejnou hodnotu i Notifieru. Bez ní si názvy témat neodpovídají a kontejner nemá co číst.
Některé události chodí, jiné nikdy
Každá událost je přepínač pro jednotlivé auto v aplikaci. Otevřete server v Nastavení a zkontrolujte seznam událostí u daného auta.
Notifikace o baterii nikdy nepřijdou
BATTERY_LOW_THRESHOLD a BATTERY_HIGH_THRESHOLD jsou ve výchozím stavu 20 a 90. Posílají se jednou za nabíjecí relaci, takže auto, které hranici od začátku nabíjení nepřekročilo, žádnou nepošle.
Notifikace po pár dnech přestanou chodit
Ověřte, že služba má restart: unless-stopped, aby naběhla spolu s hostitelem. Pak zkontrolujte iOS: pohltit je může režim soustředění nebo nastavení notifikací u aplikace.
Live Activities se neobjevují
Live Activities musí být pro HedgieMate povolené v Nastavení iOS a musí běžet aktivní relace. Dynamic Island vyžaduje iPhone 14 Pro nebo novější.
Broker vyžaduje přihlášení nebo TLS
Nastavte MQTT_USERNAME a MQTT_PASSWORD. Pro TLS nastavte MQTT_TLS na true, čímž se výchozí port změní na 8883.
Potřebujete vidět, co se děje
Nastavte LOG_LEVEL na debug, situaci zopakujte a pak hodnotu vraťte zpět. Debug vypisuje každou MQTT zprávu i rozhodnutí, které z ní vzešlo.
Dotazy
Proč vlastně Notifier potřebuju?
TeslaMate běží na vašem serveru a k telefonu se sám nedostane, a notifikaci na iOS umí doručit jedině Apple. Notifier je ten článek mezi tím: sleduje vaše MQTT topics, zachytí změnu stavu a událost odešle k doručení.
Musí být můj TeslaMate dostupný z internetu?
Ne. Notifier navazuje jen odchozí spojení, takže kvůli notifikacím nemusíte nic vystavovat ani přesměrovávat žádný port.
Co přesně odchází ze serveru?
Typ události, stav baterie, stav nabíjení a název geofence, pokud geofence používáte. Souřadnice a trasy zůstávají ve vašem TeslaMate a adresu vašeho serveru neposíláme. Data událostí se po několika hodinách mažou.
Může běžet na jiném stroji než TeslaMate?
Ano, pokud dosáhne na váš MQTT broker. Nastavte MQTT_HOST na daného hostitele a ověřte, že je port brokera odtud dostupný.
Funguje to s více auty?
Ano. Vypište ID do CAR_IDS a každé auto dostane vlastní sledování stavu i vlastní přepínače v aplikaci.
Co se stane, když je relay nedostupný?
Kontejner to několikrát zopakuje s rostoucí prodlevou a pak danou událost zahodí. Běží dál a další změnu stavu zpracuje normálně.
Ukládá něco?
Jen cache názvů aut, a to pouze pokud připojíte nepovinný volume. Vše ostatní drží v paměti po dobu běhu kontejneru.
Jak ho aktualizuji?
Stáhněte image znovu a službu znovu vytvořte. Poznámky k vydání jsou na stránce releases na GitHubu.
Jak notifikace vypnu?
Vypněte je v aplikaci, nebo zastavte kontejner. Obojí funguje samostatně a nic dalšího ve vašem TeslaMate stacku na Notifieru nezávisí.
Zdrojový kód
Notifier je v Go pod licencí MIT. Můžete si kód projít nebo založit issue, když něco nesedí.
LukStankovic/hedgiemate-notifier
Máte problémy?
Nedaří se vám propojení nastavit? Jsme tu pro vás.