The charger was never asked what it is set to
The trigger buys telemetry and only telemetry, so a charger that has been read a hundred times and commanded none reports amps, volts and nothing else: no schedule, no balancing, no Modbus server, not even its firmware. The message that asks for that half is 0040, and the reference keeps it commented out because the app sends its timestamp without a value type. The app is what the charger answers, so the oddity is reproduced rather than corrected — sent when the settings half is missing or older than ten minutes, waited four seconds for, and after three unanswered requests still sent but no longer waited on. The three settings the panel has and the writer did not — swipe up, swipe down, smart touch — are writable now, which is all eleven of the 0100 commands. Nothing else in the map was missing: every named field of every message was already decoded, and the raw keys the card shows are fields the reference does not name either. Both cards drop a row with nothing in it, which turned a charger that reports only its ceiling into a charger that reports no current range at all. Half a range is still a bound. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3f9d5b943f
commit
b2d333a63f
13 files changed
+171
-4
No files matched your search
@@ -206,6 +206,8 @@
|
||||
"productNumber": "Produktnummer",
|
||||
"ratedPower": "Nominel effekt",
|
||||
"currentRange": "Strømområde",
|
||||
"upTo": "Op til",
|
||||
"from": "Fra",
|
||||
"ocppLink": "OCPP",
|
||||
"mqttLink": "MQTT",
|
||||
"sessionEnergy": "Sessionsenergi",
|
||||
|
||||
@@ -206,6 +206,8 @@
|
||||
"productNumber": "Product number",
|
||||
"ratedPower": "Rated power",
|
||||
"currentRange": "Current range",
|
||||
"upTo": "Up to",
|
||||
"from": "From",
|
||||
"ocppLink": "OCPP",
|
||||
"mqttLink": "MQTT",
|
||||
"sessionEnergy": "Session energy",
|
||||
|
||||
@@ -208,6 +208,8 @@
|
||||
"productNumber": "Numer produktu",
|
||||
"ratedPower": "Moc znamionowa",
|
||||
"currentRange": "Zakres prądu",
|
||||
"upTo": "Do",
|
||||
"from": "Od",
|
||||
"ocppLink": "OCPP",
|
||||
"mqttLink": "MQTT",
|
||||
"sessionEnergy": "Energia sesji",
|
||||
|
||||
@@ -2226,6 +2226,16 @@ class _HomeTabState extends State<_HomeTab> {
|
||||
]);
|
||||
}
|
||||
|
||||
/// The current range as the charger reports it: both bounds when it sends
|
||||
/// both, and the one it does send otherwise — "up to 32 A" is a fact, and
|
||||
/// dropping the row because the other half is missing hides it.
|
||||
String? _currentRange(int? min, int? max) {
|
||||
if (min != null && max != null) return "$min–$max A";
|
||||
if (max != null) return "${t("charging.modbus.upTo")} $max A";
|
||||
if (min != null) return "${t("charging.modbus.from")} $min A";
|
||||
return null;
|
||||
}
|
||||
|
||||
List<(String, String)> _deviceRows(ChargerStatus s) {
|
||||
final product = s.integer("productNumber");
|
||||
final min = s.integer("minCurrentA");
|
||||
@@ -2238,7 +2248,9 @@ class _HomeTabState extends State<_HomeTab> {
|
||||
("hardware", s.text("hardware")),
|
||||
("productNumber", product == null ? null : "$product"),
|
||||
("ratedPower", _unit(s.number("ratedPowerW"), 0, "W")),
|
||||
("currentRange", min != null && max != null ? "$min–$max A" : null),
|
||||
// Either bound on its own is still a bound worth reading; only a charger
|
||||
// that reports neither has nothing to say here.
|
||||
("currentRange", _currentRange(min, max)),
|
||||
("ocppLink", _enumLabel("ocpp", s.integer("ocppStatus"))),
|
||||
("mqttLink", _enumLabel("mqtt", s.integer("mqttStatus"))),
|
||||
]);
|
||||
|
||||
Reference in new issue
Block a user