/// **Le compteur réseau n'est pas un compteur solaire** — signalé sur banc, pas trouvé ici. /// /// Le 2026-09-06, `.75` a changé de matériel : Fronius SunSpec retiré, **Eastron SDM72** /// posé en compteur réseau (rootMeter) et **SDM120** en compteur de production. L'écran a /// affiché le SDM72 dans les DEUX rôles — réseau *et* solaire — avec le badge /// « auto · lecture seule », donc sans aucun moyen de le corriger. /// /// La box, elle, était juste : `Energy.GetRootMeter` rendait bien le SDM72, et les /// interfaces distinguaient les deux appareils sans ambiguïté : /// /// | Thing | classe | interfaces | /// |---|---|---| /// | `Grid` | `sdm72` | `energymeter`, `smartmeter`, `connectable` | /// | `PV` | `sdm120Producer` | **`smartmeterproducer`**, `smartmeter`, `connectable` | /// /// La liste de l'app pour le rôle solaire contenait `energymeter`, `meter` et `smartmeter` /// — portées par **tout** compteur, réseau compris — et **pas** `smartmeterproducer`, la /// seule qui dise « ce compteur mesure une production ». library; import 'package:etm_powersync_app/providers/energy_setup_provider.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { group('les interfaces discriminent, ou elles ne servent à rien', () { test('le rôle solaire exige une interface de PRODUCTION', () { final solaire = EmsRole.solarMeter.compatibleInterfaces; expect(solaire, contains('smartmeterproducer')); // Les génériques sont exclues : elles matchent le compteur réseau. expect(solaire, isNot(contains('energymeter'))); expect(solaire, isNot(contains('smartmeter'))); expect(solaire, isNot(contains('meter'))); }); test('le SDM72 du banc ne matche plus le rôle solaire', () { // Interfaces réelles, relevées sur `.75`. const sdm72 = ['energymeter', 'smartmeter', 'connectable']; expect( sdm72.any((i) => EmsRole.solarMeter.compatibleInterfaces.contains(i)), isFalse); }); test('le SDM120 du banc matche, lui', () { const sdm120 = ['smartmeterproducer', 'smartmeter', 'connectable']; expect( sdm120.any((i) => EmsRole.solarMeter.compatibleInterfaces.contains(i)), isTrue); }); test('le rôle réseau garde ses génériques — c\'est là qu\'elles ont un sens', () { expect(EmsRole.gridMeter.compatibleInterfaces, contains('energymeter')); expect(EmsRole.gridMeter.compatibleInterfaces, contains('smartmeter')); }); }); }