Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d03705e

Browse files
authoredAug 25, 2024
Ocpp: add disconnect required status (#15659)
1 parent f8b7f77 commit d03705e

File tree

11 files changed

+103
-29
lines changed

11 files changed

+103
-29
lines changed
 

‎api/reason.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ type Reason int
66
const (
77
ReasonUnknown Reason = iota
88
ReasonWaitingForAuthorization
9+
ReasonDisconnectRequired
910
)

‎api/reason_enumer.go‎

Lines changed: 12 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎assets/js/components/Loadpoint.vue‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ export default {
141141
sessionSolarPercentage: Number,
142142
143143
// charger
144-
chargerAwaitingAuthorization: Boolean,
144+
chargerStatusReason: String,
145145
chargerFeatureIntegratedDevice: Boolean,
146146
chargerFeatureHeating: Boolean,
147147
chargerIcon: String,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<template>
2+
<svg :style="svgStyle" viewBox="0 0 32 32">
3+
<path
4+
fill="currentColor"
5+
d="M5.505,24.609c-0.595,-0.935 -0.94,-2.041 -0.94,-3.222c-0,-1.632 0.661,-3.198 1.831,-4.336l1.995,-1.994c0.52,-0.521 1.364,-0.521 1.885,0l0.391,0.391l1.724,-1.724c0.52,-0.52 1.365,-0.52 1.885,-0c0.52,0.52 0.52,1.365 0,1.885l-1.724,1.724l2.115,2.115l1.724,-1.724c0.52,-0.52 1.365,-0.52 1.885,-0c0.52,0.52 0.52,1.365 0,1.885l-1.724,1.724l0.391,0.391c0.521,0.521 0.521,1.365 -0,1.885c-0,0 -1.994,1.995 -1.994,1.995c-1.138,1.17 -2.704,1.831 -4.336,1.831c-1.181,0 -2.287,-0.345 -3.222,-0.94l-2.448,2.448c-0.521,0.52 -1.365,0.52 -1.886,-0c-0.52,-0.521 -0.52,-1.365 0,-1.886l2.448,-2.448Zm4.219,-6.333l-0.391,-0.39l-1.057,1.057c-0.005,0.005 -0.01,0.01 -0.015,0.015c-0.658,0.637 -1.03,1.514 -1.03,2.429c0,0.797 0.282,1.533 0.75,2.114c0.106,0.059 0.205,0.133 0.295,0.223c0.09,0.09 0.164,0.189 0.223,0.295c0.581,0.468 1.317,0.75 2.114,0.75c0.915,-0 1.792,-0.372 2.429,-1.03c0.005,-0.005 0.01,-0.01 0.015,-0.015c0,-0 1.057,-1.057 1.057,-1.057l-4.39,-4.391Zm14.885,-12.771l2.448,-2.448c0.521,-0.52 1.365,-0.52 1.886,0c0.52,0.521 0.52,1.365 -0,1.886l-2.448,2.448c0.595,0.935 0.94,2.041 0.94,3.222c0,1.632 -0.661,3.198 -1.831,4.336l-1.995,1.994c-0.52,0.521 -1.364,0.521 -1.885,-0l-6.667,-6.667c-0.521,-0.521 -0.521,-1.365 0,-1.885c0,-0 1.994,-1.995 1.994,-1.995c1.138,-1.17 2.704,-1.831 4.336,-1.831c1.181,-0 2.287,0.345 3.222,0.94Zm-0.59,2.994c-0.106,-0.059 -0.205,-0.133 -0.295,-0.223c-0.09,-0.09 -0.164,-0.189 -0.223,-0.295c-0.581,-0.468 -1.317,-0.75 -2.114,-0.75c-0.915,0 -1.792,0.372 -2.429,1.03c-0.005,0.005 -0.01,0.01 -0.015,0.015c-0,0 -1.057,1.057 -1.057,1.057l4.781,4.781l1.057,-1.057c0.005,-0.005 0.01,-0.01 0.015,-0.015c0.658,-0.637 1.03,-1.514 1.03,-2.429c-0,-0.797 -0.282,-1.533 -0.75,-2.114Z"
6+
/>
7+
<path
8+
fill="currentColor"
9+
d="M25.333,20l0.781,-0l-0.39,-0.391c-0.52,-0.52 -0.52,-1.365 -0,-1.885c0.52,-0.52 1.365,-0.52 1.885,-0l2.667,2.667c0.387,0.386 0.492,0.962 0.289,1.453c-0.066,0.161 -0.164,0.308 -0.289,0.432l-2.667,2.667c-0.52,0.52 -1.365,0.52 -1.885,-0c-0.52,-0.521 -0.52,-1.365 -0,-1.886l0.39,-0.39l-0.781,-0c-1.463,-0 -2.666,1.203 -2.666,2.666c-0,1.463 1.203,2.667 2.666,2.667c0.656,-0 1.289,-0.242 1.778,-0.679c0.549,-0.491 1.392,-0.444 1.883,0.105c0.49,0.548 0.443,1.392 -0.105,1.882c-0.978,0.875 -2.244,1.359 -3.556,1.359c-2.926,-0 -5.333,-2.408 -5.333,-5.334c-0,-2.925 2.408,-5.333 5.333,-5.333Z"
10+
/>
11+
</svg>
12+
</template>
13+
14+
<script>
15+
import icon from "../../mixins/icon";
16+
17+
export default {
18+
name: "Reconnect",
19+
mixins: [icon],
20+
};
21+
</script>

‎assets/js/components/Vehicle.vue‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export default {
107107
integratedDevice: Boolean,
108108
limitEnergy: Number,
109109
mode: String,
110-
chargerAwaitingAuthorization: Boolean,
110+
chargerStatusReason: String,
111111
phaseAction: String,
112112
phaseRemainingInterpolated: Number,
113113
planActive: Boolean,

‎assets/js/components/VehicleStatus.vue‎

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,15 @@
8484
>
8585
<RfidWaitIcon />
8686
</div>
87+
<div
88+
v-if="disconnectRequiredVisible"
89+
ref="disconnectRequired"
90+
class="entry text-warning"
91+
data-bs-toggle="tooltip"
92+
data-testid="vehicle-status-disconnect-required"
93+
>
94+
<ReconnectIcon />
95+
</div>
8796

8897
<!-- smart cost -->
8998
<button
@@ -148,39 +157,44 @@ import DynamicPriceIcon from "./MaterialIcon/DynamicPrice.vue";
148157
import { DEFAULT_LOCALE } from "../i18n";
149158
import formatter from "../mixins/formatter";
150159
import { CO2_TYPE } from "../units";
151-
import PlanStartIcon from "./MaterialIcon/PlanStart.vue";
160+
import ClimaterIcon from "./MaterialIcon/Climater.vue";
152161
import PlanEndIcon from "./MaterialIcon/PlanEnd.vue";
162+
import PlanStartIcon from "./MaterialIcon/PlanStart.vue";
163+
import ReconnectIcon from "./MaterialIcon/Reconnect.vue";
153164
import RfidWaitIcon from "./MaterialIcon/RfidWait.vue";
154-
import ClimaterIcon from "./MaterialIcon/Climater.vue";
155-
import VehicleLimitReachedIcon from "./MaterialIcon/VehicleLimitReached.vue";
156-
import VehicleLimitWarningIcon from "./MaterialIcon/VehicleLimitWarning.vue";
157-
import VehicleLimitIcon from "./MaterialIcon/VehicleLimit.vue";
158-
import VehicleMinSocIcon from "./MaterialIcon/VehicleMinSoc.vue";
159165
import SunDownIcon from "./MaterialIcon/SunDown.vue";
160166
import SunUpIcon from "./MaterialIcon/SunUp.vue";
161167
import Tooltip from "bootstrap/js/dist/tooltip";
168+
import VehicleLimitIcon from "./MaterialIcon/VehicleLimit.vue";
169+
import VehicleLimitReachedIcon from "./MaterialIcon/VehicleLimitReached.vue";
170+
import VehicleLimitWarningIcon from "./MaterialIcon/VehicleLimitWarning.vue";
171+
import VehicleMinSocIcon from "./MaterialIcon/VehicleMinSoc.vue";
162172
import WelcomeIcon from "./MaterialIcon/Welcome.vue";
163173
174+
const REASON_AUTH = "waitingforauthorization";
175+
const REASON_DISCONNECT = "disconnectrequired";
176+
164177
export default {
165178
name: "VehicleStatus",
166179
components: {
180+
ClimaterIcon,
167181
DynamicPriceIcon,
168-
PlanStartIcon,
169182
PlanEndIcon,
183+
PlanStartIcon,
184+
ReconnectIcon,
170185
RfidWaitIcon,
171-
ClimaterIcon,
172-
VehicleLimitIcon,
173-
VehicleMinSocIcon,
174186
SunDownIcon,
175187
SunUpIcon,
188+
VehicleLimitIcon,
189+
VehicleMinSocIcon,
176190
WelcomeIcon,
177191
},
178192
mixins: [formatter],
179193
props: {
180194
vehicleSoc: Number,
181195
charging: Boolean,
182196
chargingPlanDisabled: Boolean,
183-
chargerAwaitingAuthorization: Boolean,
197+
chargerStatusReason: String,
184198
connected: Boolean,
185199
currency: String,
186200
effectiveLimitSoc: Number,
@@ -222,6 +236,7 @@ export default {
222236
smartCostTooltip: null,
223237
vehicleLimitTooltip: null,
224238
awaitingAuthorizationTooltip: null,
239+
disconnectRequiredTooltip: null,
225240
};
226241
},
227242
mounted() {
@@ -235,6 +250,7 @@ export default {
235250
this.updateSmartCostTooltip();
236251
this.updateVehicleLimitTooltip();
237252
this.updateAwaitingAuthorizationTooltip();
253+
this.updateDisconnectRequiredTooltip();
238254
},
239255
watch: {
240256
planActiveTooltipContent() {
@@ -267,6 +283,9 @@ export default {
267283
awaitingAuthorizationTooltipContent() {
268284
this.$nextTick(this.updateAwaitingAuthorizationTooltip);
269285
},
286+
disconnectRequiredTooltipContent() {
287+
this.$nextTick(this.updateDisconnectRequiredTooltip);
288+
},
270289
},
271290
computed: {
272291
phaseTimerActive() {
@@ -307,14 +326,23 @@ export default {
307326
return this.connected && this.vehicleLimitSoc > 0 && this.vehicleLimitSoc < limit;
308327
},
309328
awaitingAuthorizationVisible() {
310-
return this.chargerAwaitingAuthorization;
329+
return this.chargerStatusReason === REASON_AUTH;
311330
},
312331
awaitingAuthorizationTooltipContent() {
313332
if (!this.awaitingAuthorizationVisible) {
314333
return "";
315334
}
316335
return this.$t("main.vehicleStatus.awaitingAuthorization");
317336
},
337+
disconnectRequiredVisible() {
338+
return this.chargerStatusReason === REASON_DISCONNECT;
339+
},
340+
disconnectRequiredTooltipContent() {
341+
if (!this.disconnectRequiredVisible) {
342+
return "";
343+
}
344+
return this.$t("main.vehicleStatus.disconnectRequired");
345+
},
318346
vehicleLimitTooltipContent() {
319347
if (!this.vehicleLimitVisible) {
320348
return "";
@@ -584,6 +612,13 @@ export default {
584612
this.$refs.awaitingAuthorization
585613
);
586614
},
615+
updateDisconnectRequiredTooltip() {
616+
this.updateTooltip(
617+
this.disconnectRequiredTooltip,
618+
this.disconnectRequiredTooltipContent,
619+
this.$refs.disconnectRequired
620+
);
621+
},
587622
updateTooltip: function (instance, content, ref, hoverOnly = false) {
588623
if (!content || !ref) {
589624
if (instance) {

‎charger/ocpp.go‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,20 @@ var _ api.StatusReasoner = (*OCPP)(nil)
342342

343343
func (c *OCPP) StatusReason() (api.Reason, error) {
344344
var res api.Reason
345-
if c.conn.NeedsAuthentication() {
345+
346+
s, err := c.conn.Status()
347+
if err != nil {
348+
return res, err
349+
}
350+
351+
switch {
352+
case c.conn.NeedsAuthentication():
346353
res = api.ReasonWaitingForAuthorization
354+
355+
case s == core.ChargePointStatusFinishing:
356+
res = api.ReasonDisconnectRequired
347357
}
358+
348359
return res, nil
349360
}
350361

‎core/keys/loadpoint.go‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ const (
1717
PhasesEnabled = "phasesEnabled" // enabled phases (1/3)
1818
PhasesActive = "phasesActive" // active phases as used by vehicle (1/2/3)
1919

20-
ChargerIcon = "chargerIcon" // charger icon for ui
21-
ChargerFeature = "chargerFeature" // charger feature
22-
ChargerPhysicalPhases = "chargerPhysicalPhases" // charger phases
23-
ChargerPhases1p3p = "chargerPhases1p3p" // phase switcher (1p3p chargers)
24-
ChargerAwaitingAuthorization = "chargerAwaitingAuthorization" // charger awaiting authorization
20+
ChargerIcon = "chargerIcon" // charger icon for ui
21+
ChargerFeature = "chargerFeature" // charger feature
22+
ChargerPhysicalPhases = "chargerPhysicalPhases" // charger phases
23+
ChargerPhases1p3p = "chargerPhases1p3p" // phase switcher (1p3p chargers)
24+
ChargerStatusReason = "chargerStatusReason" // either awaiting authorization or disconnect required
2525

2626
// loadpoint status
2727
Enabled = "enabled" // loadpoint enabled

‎core/loadpoint.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,7 @@ func (lp *Loadpoint) Update(sitePower float64, rates api.Rates, batteryBuffered,
16761676

16771677
if sr, ok := lp.charger.(api.StatusReasoner); ok && lp.GetStatus() == api.StatusB {
16781678
if r, err := sr.StatusReason(); err == nil {
1679-
lp.publish(keys.ChargerAwaitingAuthorization, r == api.ReasonWaitingForAuthorization)
1679+
lp.publish(keys.ChargerStatusReason, r)
16801680
} else {
16811681
lp.log.ERROR.Printf("charger status reason: %v", err)
16821682
}

‎i18n/de.toml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@ cleanEnergyNextStart = "Saubere Energie in {duration}."
541541
cleanEnergySet = "CO₂-Limit gesetzt."
542542
climating = "Vorklimatisierung erkannt."
543543
connected = "Verbunden."
544+
disconnectRequired = "Vorgang abgebrochen. Erneut verbinden."
544545
disconnected = "Nicht verbunden."
545546
finished = "Abgeschlossen."
546547
minCharge = "Mindestladung bis {soc}."

‎i18n/en.toml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ cleanEnergyNextStart = "Clean energy in {duration}."
539539
cleanEnergySet = "CO₂ limit set."
540540
climating = "Pre-conditioning detected."
541541
connected = "Connected."
542+
disconnectRequired = "Session terminated. Please reconnect."
542543
disconnected = "Disconnected."
543544
finished = "Finished."
544545
minCharge = "Minimum charging to {soc}."

0 commit comments

Comments
 (0)
Please sign in to comment.