@@ -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