37 lines
1.5 KiB
Markdown
37 lines
1.5 KiB
Markdown
# JT808 Daily Mileage Streaming
|
|
|
|
## Scope
|
|
|
|
The analytics app can calculate daily mileage from JT808 telemetry only. It consumes `vehicle.event.jt808.v1`, keeps the rolling per-vehicle daily state in Redis, and saves the current daily result into the common `vehicle-stat` metric repository.
|
|
|
|
## Storage
|
|
|
|
There is no separate JT808 daily-mileage table. Runtime state is stored under the configured JT808 state store so the stream can continue after restart. The derived metric is written through `VehicleStatRepository.saveDailyStat(...)` into the common JDBC/MySQL metric table `vehicle_stat_metric`.
|
|
|
|
The JT808 daily-mileage value is calculated from the GPS total mileage reported in location additional information:
|
|
|
|
```text
|
|
daily_mileage_km = last_total_mileage_km - first_total_mileage_km
|
|
calculation_method = JT808_TOTAL_MILEAGE_DIFF
|
|
```
|
|
|
|
The metric is saved only after at least two ordered JT808 location points with valid `total_mileage_km` have been received for the same vehicle and local day. If the difference is negative, no metric row is saved for that state update.
|
|
|
|
## Runtime Settings
|
|
|
|
Set these in Portainer or Nacos, without committing secrets:
|
|
|
|
```text
|
|
KAFKA_TOPIC_JT808_EVENT=vehicle.event.jt808.v1
|
|
VEHICLE_STAT_JT808_MILEAGE_ENABLED=true
|
|
MYSQL_JDBC_URL=<jdbc-url>
|
|
MYSQL_USERNAME=<user>
|
|
MYSQL_PASSWORD=<password>
|
|
REDIS_HOST=<host>
|
|
REDIS_PORT=6379
|
|
REDIS_DATABASE=50
|
|
REDIS_PASSWORD=<password>
|
|
```
|
|
|
|
Algorithm defaults use the Asia/Shanghai daily boundary. The rolling state stores only the fields needed by the GPS total-mileage difference calculation.
|