Skip to content

Commit 6ecdfb0

Browse files
author
lbbrhzn
authored
Merge pull request #16 from drc38/dev
ocpp: handle unit conversion to kW, kWh
2 parents 491438e + 305fe71 commit 6ecdfb0

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

custom_components/ocpp/sensor.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474
"Voltage"
7575
]
7676
DEFAULT_MEASURAND = "Energy.Active.Import.Register"
77+
DEFAULT_ENERGY_UNIT = UnitOfMeasure.wh
78+
DEFAULT_POWER_UNIT = UnitOfMeasure.w
79+
HA_ENERGY_UNIT = UnitOfMeasure.kwh
80+
HA_POWER_UNIT = UnitOfMeasure.kw
7781

7882
#Additional conditions/states to monitor
7983
CONDITIONS = [
@@ -411,8 +415,16 @@ def on_meter_values(self, connector_id: int, meter_value: Dict, **kwargs):
411415
self._metrics[sampled_value["measurand"]] = sampled_value["value"]
412416
if (len(sampled_value.keys()) == 1): #for backwards compatibility
413417
self._metrics[DEFAULT_MEASURAND] = sampled_value["value"]
418+
self._units[DEFAULT_MEASURAND] = DEFAULT_ENERGY_UNIT
414419
if ("unit" in sampled_value):
415420
self._units[sampled_value["measurand"]] = sampled_value["unit"]
421+
if (self._units[sampled_value["measurand"]] == DEFAULT_POWER_UNIT):
422+
self._metrics[sampled_value["measurand"]] = float(self._metrics[sampled_value["measurand"]])/1000
423+
self._units[sampled_value["measurand"]] = HA_POWER_UNIT
424+
if (self._units[sampled_value["measurand"]] == DEFAULT_ENERGY_UNIT):
425+
self._metrics[sampled_value["measurand"]] = float(self._metrics[sampled_value["measurand"]])/1000
426+
self._units[sampled_value["measurand"]] = HA_ENERGY_UNIT
427+
self._metrics[sampled_value["measurand"]] = round(float(self._metrics[sampled_value["measurand"]]),1)
416428
if ("Meter.Start" not in self._metrics): self._metrics["Meter.Start"] = self._metrics[DEFAULT_MEASURAND]
417429
if ("Transaction.Id" not in self._metrics): self._metrics["Transaction.Id"] = kwargs.get("transaction_id")
418430
self._metrics["Session.Time"] = round((int(time.time()) - float(self._metrics["Transaction.Id"]))/60)
@@ -435,6 +447,10 @@ def on_boot_notification(self, charge_point_model, charge_point_vendor, **kwargs
435447
@on(Action.StatusNotification)
436448
def on_status_notification(self, connector_id, error_code, status, **kwargs):
437449
self._metrics["Status"] = status
450+
if (status == ChargePointStatus.suspended_ev || status == ChargePointStatus.suspended_evse):
451+
if ("Current.Import" in self._metrics): self._metrics["Current.Import"] = 0
452+
if ("Power.Active.Import" in self._metrics): self._metrics["Power.Active.Import"] = 0
453+
if ("Power.Reactive.Import" in self._metrics): self._metrics["Power.Reactive.Import"] = 0
438454
self._metrics["Error.Code"] = error_code
439455
return call_result.StatusNotificationPayload()
440456

@@ -454,7 +470,7 @@ def on_start_transaction(self, connector_id, id_tag, meter_start, **kwargs):
454470
self._transactionId = int(time.time())
455471
self._metrics["Stop.Reason"] = ""
456472
self._metrics["Transaction.Id"] = self._transactionId
457-
self._metrics["Meter.Start"] = int(meter_start) / 1000.0
473+
self._metrics["Meter.Start"] = int(meter_start) / 1000
458474
return call_result.StartTransactionPayload(
459475
id_tag_info = { "status" : AuthorizationStatus.accepted },
460476
transaction_id = self._transactionId
@@ -463,7 +479,7 @@ def on_start_transaction(self, connector_id, id_tag, meter_start, **kwargs):
463479
@on(Action.StopTransaction)
464480
def on_stop_transaction(self, meter_stop, transaction_id, reason, **kwargs):
465481
self._metrics["Stop.Reason"] = reason
466-
self._metrics["Session.Energy"] = round(int(meter_stop)/1000.0 - float(self._metrics["Meter.Start"]), 1)
482+
self._metrics["Session.Energy"] = round(int(meter_stop)/1000 - float(self._metrics["Meter.Start"]), 1)
467483
if ("Current.Import" in self._metrics): self._metrics["Current.Import"] = 0
468484
if ("Power.Active.Import" in self._metrics): self._metrics["Power.Active.Import"] = 0
469485
if ("Power.Reactive.Import" in self._metrics): self._metrics["Power.Reactive.Import"] = 0

0 commit comments

Comments
 (0)