Přehled notifikací

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.

  1. 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.

  2. 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.

  3. Spusťte ho

    Nastartujte novou službu. Zbytek vašeho stacku restartovat nemusíte.

    Terminál
    docker 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ál
    docker compose logs -f hedgiemate-notifier
  4. 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.

Terminál
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

Docker image hedgiemate/notifier:latest Docker Hub

Máte problémy?

Nedaří se vám propojení nastavit? Jsme tu pro vás.