Files
banban/docs/architecture/05-location-flow.md
2026-07-07 16:58:05 +08:00

2.5 KiB

Location Flow

Device-Sourced Location

The mini-program location page displays the bound device's reported location. It is not the same as reading the parent's phone location.

sequenceDiagram
  autonumber
  participant Device as TalkingQ device
  participant MQTT as MQTT broker
  participant Handler as TalkingQMQTTService
  participant Location as Location service
  participant Current as child_location_current
  participant History as child_location_history
  participant Mini as banban-mini location page
  participant API as /banban/devices/{device_id}/location

  Device->>MQTT: msg_id=000 with latitude/longitude or GPS response
  MQTT->>Handler: deliver device event/response
  Handler->>Location: report_mqtt_device_location(...)
  Location->>Location: resolve active child binding
  Location->>Current: upsert latest location
  Location->>History: insert location history point
  Handler-->>MQTT: success event_resp

  Mini->>API: GET current location
  API->>Current: read current row for bound child/device
  API-->>Mini: current location, accuracy, battery, address fields

  Mini->>API: GET trajectory
  API->>History: read recent/today points
  API-->>Mini: trajectory points

Data Model

erDiagram
  device_auth ||--o{ child_location_current : device
  children ||--o{ child_location_current : child
  device_auth ||--o{ child_location_history : device
  children ||--o{ child_location_history : child
  device_bindings ||--o{ child_location_current : active_binding_source

  child_location_current {
    int id PK
    int child_id FK
    varchar device_id FK
    decimal lat
    decimal lng
    varchar coord_type
    decimal accuracy_m
    int battery_pct
    datetime device_time
    datetime server_time
    varchar address
  }

  child_location_history {
    int id PK
    int child_id FK
    varchar device_id FK
    decimal lat
    decimal lng
    varchar coord_type
    datetime device_time
    datetime server_time
  }

Review / Audit Wording

Location is sourced from the bound child device and shown to the parent for
device tracking, trajectory, and alarm context. It is not used to get the
parent phone's current location unless a separate phone-location feature is
added later.

Source Anchors

  • Mini-program location page: banban-mini/src/pages/location/index.tsx
  • Location API client: banban-mini/src/services/location.ts
  • Device location routes: talkingq-url/banban/routers/devices.py
  • Location service: talkingq-url/banban/service/location.py
  • MQTT persistence: talkingq-url/handlers/mqtt_handler.py