Skip to content

Commit d130c64

Browse files
committed
update README
1 parent 5dd6b5b commit d130c64

1 file changed

Lines changed: 107 additions & 0 deletions

File tree

‎README.md‎

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,53 @@ Durée de course et calibrage restent réglables option coupée : ils servent au
302302
restaurer
303303
- Précédence entre déclencheurs : manuel → température → Bluetooth → profil par défaut
304304

305+
### Statistiques
306+
Onglet de la barre du haut, **désactivé par défaut** : tant qu'il n'est pas activé, rien n'est
307+
relevé. Tout reste dans la voiture, dans un fichier privé de l'application ; rien n'est envoyé
308+
ailleurs. Trois sous-onglets sur le rail habituel :
309+
310+
- **Général** : résumé sur 30 jours ou sur tout l'historique — distance, consommation, énergie
311+
consommée, récupérée et rechargée, coût. Réglages : prix du kWh en charge lente et en charge rapide
312+
(jusqu'à 100 000, pour toutes les monnaies), monnaie, batterie de la voiture (51, 64 ou 77 kWh),
313+
filtre des petits trajets, durée de conservation (30 jours à 1 an, 3 mois par défaut) et
314+
« Tout supprimer »
315+
- **Trajets** : chaque trajet avec sa durée, sa distance, sa consommation et le détail de l'énergie
316+
- **Recharge** : énergie rechargée, coût et sessions AC / DC, y compris les charges faites pendant
317+
que le boîtier dormait
318+
319+
D'où viennent les chiffres :
320+
321+
| Mesure | Source |
322+
|---|---|
323+
| Bornes d'un trajet | Le contact — les compteurs d'énergie de la voiture repartent de zéro au même moment |
324+
| Distance | Intégration de la vitesse, relevée toutes les 10 s en roulant ; l'odomètre, qui ne publie que le kilomètre entier, sert de garde-fou |
325+
| Énergie d'un trajet, SWI133 et SWI132 | Compteurs de la voiture, au dixième de kWh : total, climatisation, accessoires, récupération |
326+
| Énergie d'un trajet, autres firmwares | Leurs compteurs restent à zéro : tension × courant de la batterie, relevés chaque seconde en roulant. Le détail se limite à « Moteur » et « Climatisation et autres », au kWh entier |
327+
| Énergie d'une charge | Écart de pourcentage × capacité utile de la batterie choisie |
328+
| Type et puissance d'une charge | Type lu sur la voiture (alternatif ou continu) ; puissance mesurée si le boîtier est éveillé pendant la charge, sinon calculée (énergie ÷ durée) et annoncée comme telle |
329+
330+
Règles à connaître :
331+
- **Charge de nuit** : le boîtier s'éteint pendant la charge et rien n'est relevé. Au réveil, le
332+
pourcentage est comparé au dernier relevé et la charge est **reconstituée**. On peut la
333+
**compléter** — type de prise, heures de début et de fin, aux boutons − et + — pour obtenir sa
334+
puissance moyenne
335+
- **Coût d'un trajet** : il suit le **prix moyen de l'énergie réellement rechargée** sur la période,
336+
pas le tarif domicile — sans quoi un plein en borne rapide disparaîtrait du coût. Le tarif d'une
337+
charge se **corrige** depuis son détail ; le prix moyen et le coût des trajets suivent
338+
- **Consommation d'une période** : calculée sur les totaux, pas en moyennant les trajets — un trajet
339+
de 2 km pèserait sinon autant qu'un trajet de 200 km
340+
- **Précision affichée** : quand l'incertitude d'une consommation dépasse 10 % (trajet court, compteur
341+
au dixième de kWh), elle s'affiche avec « ≈ » et sans décimale
342+
- **Petits trajets** : filtre désactivé par défaut ; activé, un trajet plus court que la distance
343+
choisie (1 km par défaut, de 0,1 à 50 km) n'est pas enregistré
344+
- **Batterie** : en changer recalcule les recharges déjà enregistrées ; tant qu'elle n'a pas été
345+
confirmée, l'onglet Recharge le rappelle
346+
- **Coupures** : le trajet en cours est enregistré après chaque relevé, et un trajet interrompu par
347+
l'extinction du boîtier est clos au démarrage suivant. L'historique est écrit dans un fichier
348+
temporaire puis renommé : une coupure d'alimentation ne le tronque jamais
349+
- **Horloge** : un boîtier réveillé par la charge peut repartir sur son horloge d'usine (2019) ; les
350+
relevés datés d'avant 2025 sont écartés
351+
305352
### Réglages
306353
Écran organisé en **quatre onglets** :
307354
- **Langues** : français, anglais, allemand, espagnol, italien, portugais, turc — la langue est
@@ -543,6 +590,9 @@ MG4Control/
543590
│ │ │ ├── DrivingProfile.kt # Modèle de données d'un profil
544591
│ │ │ ├── DriveMode.kt # Enum modes de conduite (ECO/NORMAL/SPORT/SNOW/CUSTOM)
545592
│ │ │ ├── RegenLevel.kt # Enum niveaux de régénération + ordre du cycle par défaut
593+
│ │ │ ├── StatsTracker.kt # Statistiques : trajets et charges (machine à états pure, testée)
594+
│ │ │ ├── StatsSummary.kt # Statistiques : agrégats d'une période (coût, consommation)
595+
│ │ │ ├── PowerIntegrator.kt # Énergie par tension × courant (firmwares sans compteurs)
546596
│ │ │ └── ProfileBackup.kt # Format de la sauvegarde véhicule
547597
│ │ │
548598
│ │ ├── profile/
@@ -553,8 +603,12 @@ MG4Control/
553603
│ │ │
554604
│ │ ├── hardware/
555605
│ │ │ ├── MG4Hardware.kt # Abstraction matérielle (4 couches)
606+
│ │ │ ├── StatsCollector.kt # Relevés des statistiques (seulement si elles sont activées)
556607
│ │ │ └── VehicleWriteGate.kt # Verrou de vitesse posé dans les primitives d'écriture
557608
│ │ │
609+
│ │ ├── stats/
610+
│ │ │ └── StatsStore.kt # Historique des statistiques : fichier, purge à la lecture
611+
│ │ │
558612
│ │ ├── accessibility/
559613
│ │ │ ├── KeyCaptureService.kt # Service d'accessibilité — voit les touches avant le launcher
560614
│ │ │ └── AdvancedShortcuts.kt # Stockage (touche, type d'appui) → action
@@ -584,6 +638,7 @@ MG4Control/
584638
│ │ │ ├── SettingsFragment.kt # Réglages (rail 4 onglets)
585639
│ │ │ ├── ShortcutsFragment.kt # Raccourcis classiques + avancés + liste
586640
│ │ │ ├── AutomationFragment.kt # Automatisations
641+
│ │ │ ├── StatsFragment.kt # Statistiques (rail 3 onglets)
587642
│ │ │ ├── ProfileAdapter.kt # Adaptateur RecyclerView profils
588643
│ │ │ ├── AppDialog.kt # Fenêtres de l'app : confirmation, grille de choix, listes, boutons − / +
589644
│ │ │ ├── RestoreProfilesDialog.kt # « Restaurer les profils ? » — liste des profils retrouvés
@@ -1333,6 +1388,50 @@ shortcuts use them too.
13331388
reinstall a window lists the profiles found and offers to restore them
13341389
- Trigger precedence: manual → temperature → Bluetooth → default profile
13351390

1391+
### Statistics
1392+
A top-bar tab, **off by default**: until it is turned on, nothing is recorded. Everything stays in
1393+
the car, in a private file of the app; nothing is sent anywhere. Three sub-tabs on the usual rail:
1394+
1395+
- **General**: summary over 30 days or the whole history — distance, consumption, energy used,
1396+
recovered and charged, cost. Settings: kWh price for slow and fast charging (up to 100,000, for
1397+
every currency), currency, the car's battery (51, 64 or 77 kWh), short-trip filter, retention
1398+
(30 days to 1 year, 3 months by default) and "Delete all"
1399+
- **Trips**: each trip with its duration, distance, consumption and energy breakdown
1400+
- **Charging**: energy charged, cost and AC / DC sessions, including charges made while the head
1401+
unit was asleep
1402+
1403+
Where the figures come from:
1404+
1405+
| Measure | Source |
1406+
|---|---|
1407+
| Trip boundaries | Ignition — the car's energy counters restart from zero at the same moment |
1408+
| Distance | Integration of the speed, read every 10 s while driving; the odometer, which only publishes whole kilometres, is the safeguard |
1409+
| Trip energy, SWI133 and SWI132 | The car's counters, in tenths of a kWh: total, climate, accessories, regeneration |
1410+
| Trip energy, other firmwares | Their counters stay at zero: battery voltage × current, read every second while driving. The breakdown is limited to "Motor" and "Climate control and others", in whole kWh |
1411+
| Charge energy | Percentage gained × usable capacity of the chosen battery |
1412+
| Charge type and power | Type read from the car (AC or DC); power measured if the head unit is awake during the charge, otherwise computed (energy ÷ duration) and labelled as such |
1413+
1414+
Rules worth knowing:
1415+
- **Overnight charge**: the head unit sleeps during the charge and nothing is read. On wake-up, the
1416+
percentage is compared with the last reading and the charge is **reconstructed**. It can be
1417+
**completed** — plug type, start and end times, with − and + buttons — to get its average power
1418+
- **Trip cost**: it follows the **average price of the energy actually charged** over the period,
1419+
not the home tariff — otherwise a fast-charger top-up would vanish from the cost. A charge's
1420+
tariff is **corrected** from its detail; the average price and trip costs follow
1421+
- **Consumption over a period**: computed on the totals, not by averaging trips — otherwise a 2 km
1422+
trip would weigh as much as a 200 km one
1423+
- **Displayed precision**: when a consumption's uncertainty exceeds 10% (short trip, counter in
1424+
tenths of a kWh), it is shown with "≈" and no decimal
1425+
- **Short trips**: filter off by default; when on, a trip shorter than the chosen distance (1 km by
1426+
default, 0.1 to 50 km) is not recorded
1427+
- **Battery**: changing it recalculates the charges already recorded; until it has been confirmed,
1428+
the Charging tab reminds you
1429+
- **Power cuts**: the ongoing trip is saved after each reading, and a trip cut short by the head
1430+
unit switching off is closed at the next start-up. The history is written to a temporary file
1431+
then renamed: a power cut never truncates it
1432+
- **Clock**: a head unit woken up by charging may restart on its factory clock (2019); readings
1433+
dated before 2025 are discarded
1434+
13361435
### Settings
13371436
Screen organised into **four tabs**:
13381437
- **Languages**: French, English, German, Spanish, Italian, Portuguese, Turkish — the language is
@@ -1565,6 +1664,9 @@ MG4Control/
15651664
│ │ │ ├── DrivingProfile.kt # Profile data model
15661665
│ │ │ ├── DriveMode.kt # Drive mode enum (ECO/NORMAL/SPORT/SNOW/CUSTOM)
15671666
│ │ │ ├── RegenLevel.kt # Regen level enum + default shortcut cycle order
1667+
│ │ │ ├── StatsTracker.kt # Statistics: trips and charges (pure state machine, tested)
1668+
│ │ │ ├── StatsSummary.kt # Statistics: aggregates of a period (cost, consumption)
1669+
│ │ │ ├── PowerIntegrator.kt # Energy from voltage × current (firmwares without counters)
15681670
│ │ │ └── ProfileBackup.kt # Vehicle backup format
15691671
│ │ │
15701672
│ │ ├── profile/
@@ -1575,8 +1677,12 @@ MG4Control/
15751677
│ │ │
15761678
│ │ ├── hardware/
15771679
│ │ │ ├── MG4Hardware.kt # Hardware abstraction (4 layers)
1680+
│ │ │ ├── StatsCollector.kt # Statistics readings (only when turned on)
15781681
│ │ │ └── VehicleWriteGate.kt # Speed lock, enforced inside the write primitives
15791682
│ │ │
1683+
│ │ ├── stats/
1684+
│ │ │ └── StatsStore.kt # Statistics history: file, purged on read
1685+
│ │ │
15801686
│ │ ├── accessibility/
15811687
│ │ │ ├── KeyCaptureService.kt # Accessibility service — sees keys before the launcher
15821688
│ │ │ └── AdvancedShortcuts.kt # Storage for (key, press type) → action
@@ -1606,6 +1712,7 @@ MG4Control/
16061712
│ │ │ ├── SettingsFragment.kt # Settings (4-tab rail)
16071713
│ │ │ ├── ShortcutsFragment.kt # Classic + advanced shortcuts + list
16081714
│ │ │ ├── AutomationFragment.kt # Automations
1715+
│ │ │ ├── StatsFragment.kt # Statistics (3-tab rail)
16091716
│ │ │ ├── ProfileAdapter.kt # Profile RecyclerView adapter
16101717
│ │ │ ├── AppDialog.kt # App windows: confirmation, choice grid, lists, − / + buttons
16111718
│ │ │ ├── RestoreProfilesDialog.kt # "Restore profiles?" — lists the profiles found

0 commit comments

Comments
 (0)