Skip to content

Commit 7b1ad7e

Browse files
committed
add sensor for statistics
1 parent 4384494 commit 7b1ad7e

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

‎app/src/main/java/com/mg4/control/hardware/EnergyProbe.kt‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ object EnergyProbe {
9898
Signal("Trajet combiné : distance", 0x21407b81, null),
9999
Signal("Trajet combiné : vitesse moyenne", 0x21407b80, null),
100100
Signal("Trajet combiné : conso moyenne", 0x21407b82, null),
101-
Signal("Autonomie restante", 0x21401565, null),
101+
Signal("Autonomie restante (SENSOR)", 0x21401565, null),
102+
Signal("Autonomie restante (BMS)", 0x2140f41c, BMS_SERVICE),
102103

103104
// ── Les six drapeaux « V » de la famille BMS ────────────────────────
104105
// Relevé du 2026-09-18 : le SoC était JUSTE avec son drapeau à false, et deux sentinelles
@@ -146,12 +147,37 @@ object EnergyProbe {
146147
lignes += " ${s.name} 0x${hex(s.id)} : ${voies.joinToString(" · ")}"
147148
}
148149

150+
// Dernière inconnue du relevé : aucune des propriétés connues ne donne une puissance de
151+
// charge en kW. On balaie donc toutes les MESURES de la famille BMS (les identifiants en
152+
// 0x216… sont les flottants) pendant une charge : la bonne s'y trouve nécessairement.
153+
lignes += balayage(bms)
154+
149155
val texte = lignes.joinToString("\n")
150156
lignes.forEach { AppLogger.i(TAG, it) }
151157
garde(texte)
152158
return texte
153159
}
154160

161+
/**
162+
* Relève toutes les mesures que le gestionnaire BMS déclare porter, en excluant celles déjà
163+
* nommées plus haut. Une ligne compacte : c'est un filet pour attraper ce qu'on n'a pas su nommer.
164+
*/
165+
private fun balayage(bms: Any?): String {
166+
bms ?: return " balayage BMS : gestionnaire absent"
167+
val connus = SIGNALS.map { it.id }.toSet()
168+
return try {
169+
val configs = bms.javaClass.getMethod("getPropertyList").invoke(bms) as? List<*>
170+
?: return " balayage BMS : liste nulle"
171+
val mesures = configs.filterNotNull().mapNotNull { cfg ->
172+
runCatching { cfg.javaClass.getMethod("getPropertyId").invoke(cfg) as? Int }.getOrNull()
173+
}.filter { it !in connus && typeOf(it) == java.lang.Float::class.java }.sorted()
174+
if (mesures.isEmpty()) " balayage BMS : aucune mesure nouvelle"
175+
else " balayage BMS : " + mesures.joinToString(" · ") { "0x${hex(it)}=${lire(bms, it)}" }
176+
} catch (e: Exception) {
177+
" balayage BMS : ${court(e)}"
178+
}
179+
}
180+
155181
@Synchronized
156182
private fun garde(texte: String) {
157183
historique.addLast(texte)

0 commit comments

Comments
 (0)