ภาพรวมการแจ้งเตือน

ความช่วยเหลือเรื่องการแจ้งเตือน

ทุกอย่างที่ต้องใช้เพื่อให้ Notifier ทำงานข้าง TeslaMate ของคุณ และสิ่งที่ต้องตรวจสอบเมื่อเหตุการณ์ไม่มาถึง

ก่อนเริ่ม

สามอย่าง และการติดตั้ง TeslaMate ส่วนใหญ่มีสองอย่างแรกอยู่แล้ว

  • TeslaMate ที่มี MQTT broker โดย Mosquitto มาพร้อมไฟล์ Compose มาตรฐานของ TeslaMate
  • Docker บนเครื่องเดียวกับ TeslaMate หรือโฮสต์ใดก็ได้ที่เข้าถึง broker ได้
  • การเชื่อมต่ออินเทอร์เน็ตขาออก ไม่ต้องเปิดพอร์ตขาเข้า และ TeslaMate ไม่ต้องเปิดสู่สาธารณะ

ติดตั้ง Notifier

TeslaMate ติดต่อไปยังโทรศัพท์ของคุณเองไม่ได้ และการแจ้งเตือนบน iOS ต้องผ่าน Apple เท่านั้น Notifier คือคอนเทนเนอร์เล็ก ๆ ที่คอยดู MQTT แล้วส่งเหตุการณ์ต่อ มันทำงานข้าง ๆ TeslaMate และไม่เปิดพอร์ตใด ๆ

  1. รับโทเคนในแอป

    เปิด HedgieMate ไปที่การตั้งค่า จากนั้นไปที่การแจ้งเตือนแบบพุชแล้วเปิดใช้งาน แอปจะแสดงโทเคนเชื่อมต่อที่ขึ้นต้นด้วย hm_ และรหัสเซิร์ฟเวอร์ TeslaMate ที่คุณเชื่อมต่ออยู่ คัดลอกทั้งสองค่า

    โทเคนคือสิ่งที่จับคู่แอปกับคอนเทนเนอร์ ให้ดูแลเหมือนรหัสผ่าน

  2. เพิ่มคอนเทนเนอร์ลงไฟล์ Compose

    เปิดไฟล์ docker-compose.yml ที่คุณใช้รัน TeslaMate แล้วเพิ่มเซอร์วิสด้านล่าง การอยู่ในไฟล์เดียวกันทำให้ใช้เครือข่ายร่วมกับ broker ดังนั้น MQTT_HOST จึงเป็นแค่ชื่อเซอร์วิสของ broker

    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 เป็นตัวเลือกเสริม ช่วยเก็บชื่อรถไว้ข้ามการรีสตาร์ต ถ้าไม่ใส่ รีเลย์ก็เติมชื่อให้อยู่ดี ให้ใช้ named volume แทน bind mount เพราะคอนเทนเนอร์รันด้วยผู้ใช้ที่ไม่ใช่ root และเขียนลงไดเรกทอรีที่ Docker สร้างในฐานะ root ไม่ได้

  3. สั่งรัน

    สตาร์ตเซอร์วิสใหม่ ส่วนอื่นของสแตกไม่ต้องรีสตาร์ต

    เทอร์มินัล
    docker compose up -d hedgiemate-notifier

    จากนั้นอ่านล็อก การเริ่มต้นที่ปกติจะแสดงการเชื่อมต่อ broker และรหัสรถที่กำลังเฝ้าดู

    เทอร์มินัล
    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 broker ของคุณ ภายใน Compose คือชื่อเซอร์วิส ซึ่งมักเป็น mosquitto
SERVER_ID จำเป็น ไม่มี UUID ของเซิร์ฟเวอร์จากแอป คอนเทนเนอร์เริ่มทำงานได้แม้ไม่มีค่านี้ แต่การตั้งค่ารายเซิร์ฟเวอร์และรายคันในแอปจะถูกละเลย
MQTT_PORT 1883 พอร์ตของ broker
MQTT_USERNAME ไม่มี ชื่อผู้ใช้ของ broker หากต้องยืนยันตัวตน
MQTT_PASSWORD ไม่มี รหัสผ่านของ broker
MQTT_CLIENT_ID hedgiemate-notifier client ID ที่ใช้กับ broker เปลี่ยนได้หากมีอย่างอื่นเชื่อมต่อด้วยค่านี้อยู่แล้ว
MQTT_TLS false ตั้งเป็น true สำหรับ broker ที่ใช้ 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 ที่อยู่ของรีเลย์ ไม่มีเหตุผลที่ต้องเปลี่ยน

เหตุการณ์ทั้งหมด

แต่ละแถวคือสวิตช์แยกรายคันในแอป การอัปเดต Live Activities ไม่ใช่การแจ้งเตือนจึงไม่อยู่ในรายการนี้

การแจ้งเตือน ส่งเมื่อ
การขับขี่
เริ่มขับ 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
ความปลอดภัย
การบันทึก Sentry center_display_state = 7
ตัวรถ
อัปเดตซอฟต์แวร์ update_available → true
กำลังเข้าสู่โหมดพัก state → asleep pending
โหมดพัก state → asleep
รถตื่นแล้ว state leaves asleep

ไม่มีอะไรมาเลย

ไล่ตามรายการจากบนลงล่าง ส่วนใหญ่เป็นหนึ่งในสามข้อแรก

แอปยังบอกว่าเซิร์ฟเวอร์ไม่ได้เชื่อมต่อ

ตรวจด้วย docker compose ps ว่าคอนเทนเนอร์ทำงานอยู่จริง แล้วอ่านล็อก สาเหตุที่พบบ่อยคือ MQTT_HOST ผิด ภายใน Compose ค่านี้คือชื่อเซอร์วิสของ broker คือ 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 โหมดโฟกัสหรือการตั้งค่าการแจ้งเตือนของแอปอาจกลืนมันไป

Live Activities ไม่ปรากฏ

ต้องอนุญาต Live Activities ให้ HedgieMate ในการตั้งค่า iOS และต้องมีเซสชันที่กำลังทำงานอยู่ Dynamic Island ต้องใช้ iPhone 14 Pro ขึ้นไป

broker ต้องล็อกอินหรือใช้ TLS

ตั้ง MQTT_USERNAME และ MQTT_PASSWORD สำหรับ TLS ให้ตั้ง MQTT_TLS เป็น true ซึ่งจะเปลี่ยนพอร์ตเริ่มต้นเป็น 8883

คุณอยากเห็นว่ามันกำลังทำอะไร

ตั้ง LOG_LEVEL เป็น debug ทำซ้ำเหตุการณ์ แล้วตั้งกลับเป็นค่าเดิม โหมด debug จะบันทึกทุกข้อความ MQTT และทุกการตัดสินใจที่เกิดจากข้อความนั้น

คำถาม

ทำไมถึงต้องมี Notifier

TeslaMate อยู่บนเซิร์ฟเวอร์ของคุณเองและติดต่อโทรศัพท์ไม่ได้ ส่วนการแจ้งเตือนบน iOS มีแต่ Apple เท่านั้นที่ส่งได้ Notifier คือส่วนที่เชื่อมช่องว่างนี้ มันคอยดู MQTT topic ของคุณ จับการเปลี่ยนสถานะ แล้วส่งเหตุการณ์ออกไปเพื่อให้ถูกส่งถึงคุณ

TeslaMate ของฉันต้องเข้าถึงได้จากอินเทอร์เน็ตไหม

ไม่ต้อง Notifier สร้างเฉพาะการเชื่อมต่อขาออก จึงไม่ต้องเปิดบริการใดสู่ภายนอกและไม่ต้องทำพอร์ตฟอร์เวิร์ดเพื่อให้การแจ้งเตือนทำงาน

อะไรบ้างที่ออกจากเซิร์ฟเวอร์ของฉันจริง ๆ

ประเภทเหตุการณ์ ระดับแบตเตอรี่ สถานะการชาร์จ และชื่อ geofence หากคุณใช้ geofence พิกัดและเส้นทางการขับขี่ยังอยู่ใน TeslaMate ของคุณ และที่อยู่เซิร์ฟเวอร์ไม่ถูกส่งออกไป ข้อมูลเหตุการณ์จะถูกลบหลังผ่านไปไม่กี่ชั่วโมง

รันบนเครื่องอื่นที่ไม่ใช่ TeslaMate ได้ไหม

ได้ ตราบใดที่เข้าถึง MQTT broker ของคุณได้ ตั้ง MQTT_HOST ให้ชี้ไปยังโฮสต์นั้นและตรวจว่าพอร์ตของ broker เข้าถึงได้จากที่นั่น

ใช้กับรถหลายคันได้ไหม

ได้ ใส่รหัสไว้ใน CAR_IDS แล้วรถแต่ละคันจะมีการติดตามสถานะของตัวเองและสวิตช์ของตัวเองในแอป

ถ้ารีเลย์ติดต่อไม่ได้จะเกิดอะไรขึ้น

คอนเทนเนอร์จะลองใหม่ไม่กี่ครั้งโดยเว้นระยะนานขึ้น แล้วทิ้งเหตุการณ์นั้นไป มันยังทำงานต่อและจัดการการเปลี่ยนสถานะครั้งถัดไปตามปกติ

มันเก็บข้อมูลอะไรไว้ไหม

เก็บเพียงแคชชื่อรถ และเฉพาะเมื่อคุณเมานต์ volume ที่เป็นตัวเลือกเสริม ส่วนที่เหลืออยู่ในหน่วยความจำตราบที่คอนเทนเนอร์ยังทำงาน

อัปเดตอย่างไร

ดึงอิมเมจใหม่แล้วสร้างเซอร์วิสขึ้นมาใหม่ บันทึกการเปลี่ยนแปลงอยู่ในหน้า releases บน GitHub

ปิดการแจ้งเตือนอย่างไร

ปิดในแอป หรือหยุดคอนเทนเนอร์ ทั้งสองวิธีทำงานได้ด้วยตัวเอง และไม่มีส่วนอื่นในสแตก TeslaMate ที่พึ่งพามัน

ซอร์สโค้ด

Notifier เขียนด้วย Go ภายใต้สัญญาอนุญาต MIT อ่านโค้ดได้ หรือเปิด issue ถ้าพบปัญหา

อิมเมจ Docker hedgiemate/notifier:latest Docker Hub

ต้องการความช่วยเหลือไหม

มีปัญหาในการตั้งค่าใช่ไหม เราพร้อมช่วยคุณเริ่มต้นใช้งาน