Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions custom_components/ocpp/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@
"Voltage"
]
DEFAULT_MEASURAND = "Energy.Active.Import.Register"
DEFAULT_ENERGY_UNIT = UnitOfMeasure.wh
DEFAULT_POWER_UNIT = UnitOfMeasure.w
HA_ENERGY_UNIT = UnitOfMeasure.kwh
HA_POWER_UNIT = UnitOfMeasure.kw

#Additional conditions/states to monitor
CONDITIONS = [
Expand Down Expand Up @@ -411,8 +415,16 @@ def on_meter_values(self, connector_id: int, meter_value: Dict, **kwargs):
self._metrics[sampled_value["measurand"]] = sampled_value["value"]
if (len(sampled_value.keys()) == 1): #for backwards compatibility
self._metrics[DEFAULT_MEASURAND] = sampled_value["value"]
self._units[DEFAULT_MEASURAND] = DEFAULT_ENERGY_UNIT
if ("unit" in sampled_value):
self._units[sampled_value["measurand"]] = sampled_value["unit"]
if (self._units[sampled_value["measurand"]] == DEFAULT_POWER_UNIT):
self._metrics[sampled_value["measurand"]] = float(self._metrics[sampled_value["measurand"]])/1000
self._units[sampled_value["measurand"]] = HA_POWER_UNIT
if (self._units[sampled_value["measurand"]] == DEFAULT_ENERGY_UNIT):
self._metrics[sampled_value["measurand"]] = float(self._metrics[sampled_value["measurand"]])/1000
self._units[sampled_value["measurand"]] = HA_ENERGY_UNIT
self._metrics[sampled_value["measurand"]] = round(float(self._metrics[sampled_value["measurand"]]),1)
if ("Meter.Start" not in self._metrics): self._metrics["Meter.Start"] = self._metrics[DEFAULT_MEASURAND]
if ("Transaction.Id" not in self._metrics): self._metrics["Transaction.Id"] = kwargs.get("transaction_id")
self._metrics["Session.Time"] = round((int(time.time()) - float(self._metrics["Transaction.Id"]))/60)
Expand All @@ -435,6 +447,10 @@ def on_boot_notification(self, charge_point_model, charge_point_vendor, **kwargs
@on(Action.StatusNotification)
def on_status_notification(self, connector_id, error_code, status, **kwargs):
self._metrics["Status"] = status
if (status == ChargePointStatus.suspended_ev || status == ChargePointStatus.suspended_evse):
if ("Current.Import" in self._metrics): self._metrics["Current.Import"] = 0
if ("Power.Active.Import" in self._metrics): self._metrics["Power.Active.Import"] = 0
if ("Power.Reactive.Import" in self._metrics): self._metrics["Power.Reactive.Import"] = 0
self._metrics["Error.Code"] = error_code
return call_result.StatusNotificationPayload()

Expand All @@ -454,7 +470,7 @@ def on_start_transaction(self, connector_id, id_tag, meter_start, **kwargs):
self._transactionId = int(time.time())
self._metrics["Stop.Reason"] = ""
self._metrics["Transaction.Id"] = self._transactionId
self._metrics["Meter.Start"] = int(meter_start) / 1000.0
self._metrics["Meter.Start"] = int(meter_start) / 1000
return call_result.StartTransactionPayload(
id_tag_info = { "status" : AuthorizationStatus.accepted },
transaction_id = self._transactionId
Expand All @@ -463,7 +479,7 @@ def on_start_transaction(self, connector_id, id_tag, meter_start, **kwargs):
@on(Action.StopTransaction)
def on_stop_transaction(self, meter_stop, transaction_id, reason, **kwargs):
self._metrics["Stop.Reason"] = reason
self._metrics["Session.Energy"] = round(int(meter_stop)/1000.0 - float(self._metrics["Meter.Start"]), 1)
self._metrics["Session.Energy"] = round(int(meter_stop)/1000 - float(self._metrics["Meter.Start"]), 1)
if ("Current.Import" in self._metrics): self._metrics["Current.Import"] = 0
if ("Power.Active.Import" in self._metrics): self._metrics["Power.Active.Import"] = 0
if ("Power.Reactive.Import" in self._metrics): self._metrics["Power.Reactive.Import"] = 0
Expand Down