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:
co-authored by
Claude Opus 5
parent
3f9d5b943f
commit
b2d333a63f
@@ -167,6 +167,8 @@
|
||||
"productNumber": "Produktnummer",
|
||||
"ratedPower": "Nominel effekt",
|
||||
"currentRange": "Strømområde",
|
||||
"upTo": "Op til",
|
||||
"from": "Fra",
|
||||
"ocppLink": "OCPP",
|
||||
"mqttLink": "MQTT",
|
||||
"plugged": "Kabel tilsluttet",
|
||||
|
||||
@@ -153,6 +153,8 @@
|
||||
"productNumber": "Product number",
|
||||
"ratedPower": "Rated power",
|
||||
"currentRange": "Current range",
|
||||
"upTo": "Up to",
|
||||
"from": "From",
|
||||
"ocppLink": "OCPP",
|
||||
"mqttLink": "MQTT",
|
||||
"plugged": "Cable plugged in",
|
||||
|
||||
@@ -169,6 +169,8 @@
|
||||
"productNumber": "Numer produktu",
|
||||
"ratedPower": "Moc znamionowa",
|
||||
"currentRange": "Zakres prądu",
|
||||
"upTo": "Do",
|
||||
"from": "Od",
|
||||
"ocppLink": "OCPP",
|
||||
"mqttLink": "MQTT",
|
||||
"plugged": "Kabel podłączony",
|
||||
|
||||
@@ -366,6 +366,16 @@ function countdown(sec) {
|
||||
return m > 0 ? `${m} min ${r} s` : `${r} s`;
|
||||
}
|
||||
|
||||
// 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.
|
||||
function currentRange(min, max) {
|
||||
if (isSet(min) && isSet(max)) return `${min}\u2013${max} A`;
|
||||
if (isSet(max)) return `${t("charging.modbus.upTo")} ${max} A`;
|
||||
if (isSet(min)) return `${t("charging.modbus.from")} ${min} A`;
|
||||
return null;
|
||||
}
|
||||
|
||||
function sessionLength(sec) {
|
||||
if (!isSet(sec)) return null;
|
||||
const h = Math.floor(sec / 3600);
|
||||
@@ -566,8 +576,10 @@ const deviceIdentity = computed(() => {
|
||||
["hardware", s.hardware],
|
||||
["productNumber", isSet(s.productNumber) ? String(s.productNumber) : null],
|
||||
["ratedPower", unit(s.ratedPowerW, 0, "W")],
|
||||
["currentRange",
|
||||
isSet(s.minCurrentA) && isSet(s.maxCurrentA) ? `${s.minCurrentA}–${s.maxCurrentA} A` : null],
|
||||
// The charger's own floor and ceiling. Either half on its own is still a
|
||||
// bound the number beside the slider has to respect, so a charger that
|
||||
// reports one and not the other says the one.
|
||||
["currentRange", currentRange(s.minCurrentA, s.maxCurrentA)],
|
||||
["ocppLink", enumLabel("ocpp", s.ocppStatus)],
|
||||
["mqttLink", enumLabel("mqtt", s.mqttStatus)],
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user