Skip to content
Merged
Show file tree
Hide file tree
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
35 changes: 16 additions & 19 deletions custom_components/ocpp/api.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
"""Representation of a OCCP Entities."""
from __future__ import annotations

import asyncio
from collections import defaultdict
from datetime import datetime, timedelta, timezone
import logging
from math import sqrt
import time
from typing import Dict

from homeassistant.config_entries import ConfigEntry
from homeassistant.const import STATE_OK, STATE_UNAVAILABLE, TIME_MINUTES
Expand Down Expand Up @@ -644,7 +645,7 @@ async def data_transfer(self, vendor_id: str, message_id: str = "", data: str =
)
self._metrics[cdet.data_response.value].value = datetime.now(
tz=timezone.utc
).isoformat()
)
self._metrics[cdet.data_response.value].extra_attr = {message_id: resp.data}
return True
else:
Expand All @@ -663,7 +664,7 @@ async def get_configuration(self, key: str = ""):
_LOGGER.debug("Get Configuration for %s: %s", key, value)
self._metrics[cdet.config_response.value].value = datetime.now(
tz=timezone.utc
).isoformat()
)
self._metrics[cdet.config_response.value].extra_attr = {key: value}
return value
if resp.unknown_key is not None:
Expand Down Expand Up @@ -848,11 +849,11 @@ def average_of_nonzero(values):
self._metrics[metric].value = float(metric_value) / 1000
self._metrics[metric].unit = HA_ENERGY_UNIT
else:
self._metrics[metric].value = round(float(metric_value), 1)
self._metrics[metric].value = float(metric_value)
self._metrics[metric].unit = metric_unit

@on(Action.MeterValues)
def on_meter_values(self, connector_id: int, meter_value: Dict, **kwargs):
def on_meter_values(self, connector_id: int, meter_value: dict, **kwargs):
"""Request handler for MeterValues Calls."""
self._metrics[csess.transaction_id.value].value = kwargs.get(
om.transaction_id.name, 0
Expand All @@ -868,7 +869,7 @@ def on_meter_values(self, connector_id: int, meter_value: Dict, **kwargs):
location = sv.get(om.location.value, None)
context = sv.get(om.context.value, None)

if len(sv.keys()) == 1: # Backwars compatibility
if len(sv.keys()) == 1: # Backwards compatibility
measurand = DEFAULT_MEASURAND
unit = DEFAULT_ENERGY_UNIT

Expand All @@ -880,7 +881,7 @@ def on_meter_values(self, connector_id: int, meter_value: Dict, **kwargs):
self._metrics[measurand].value = float(value) / 1000
self._metrics[measurand].unit = HA_ENERGY_UNIT
else:
self._metrics[measurand].value = round(float(value), 1)
self._metrics[measurand].value = float(value)
self._metrics[measurand].unit = unit
if location is not None:
self._metrics[measurand].extra_attr[
Expand Down Expand Up @@ -915,11 +916,9 @@ def on_meter_values(self, connector_id: int, meter_value: Dict, **kwargs):
/ 60
)
if self._metrics[csess.meter_start.value].value is not None:
self._metrics[csess.session_energy.value].value = round(
float(self._metrics[DEFAULT_MEASURAND].value or 0)
- float(self._metrics[csess.meter_start.value].value),
1,
)
self._metrics[csess.session_energy.value].value = float(
self._metrics[DEFAULT_MEASURAND].value or 0
) - float(self._metrics[csess.meter_start.value].value)
else:
self._metrics[csess.session_energy.value].value = 0
self.hass.async_create_task(self.central.update(self.central.cpid))
Expand Down Expand Up @@ -1016,11 +1015,9 @@ def on_stop_transaction(self, meter_stop, timestamp, transaction_id, **kwargs):
self._metrics[cstat.stop_reason.value].value = kwargs.get(om.reason.name, None)

if self._metrics[csess.meter_start.value].value is not None:
self._metrics[csess.session_energy.value].value = round(
int(meter_stop) / 1000
- float(self._metrics[csess.meter_start.value].value),
1,
)
self._metrics[csess.session_energy.value].value = int(
meter_stop
) / 1000 - float(self._metrics[csess.meter_start.value].value)
if Measurand.current_import.value in self._metrics:
self._metrics[Measurand.current_import.value].value = 0
if Measurand.power_active_import.value in self._metrics:
Expand All @@ -1047,10 +1044,10 @@ def on_data_transfer(self, vendor_id, **kwargs):
@on(Action.Heartbeat)
def on_heartbeat(self, **kwargs):
"""Handle a Heartbeat."""
now = datetime.now(tz=timezone.utc).isoformat()
now = datetime.now(tz=timezone.utc)
self._metrics[cstat.heartbeat.value].value = now
self.hass.async_create_task(self.central.update(self.central.cpid))
return call_result.HeartbeatPayload(current_time=now)
return call_result.HeartbeatPayload(current_time=now.isoformat())

@property
def supported_features(self) -> int:
Expand Down
1 change: 1 addition & 0 deletions custom_components/ocpp/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class OcppButtonDescription(ButtonEntityDescription):

async def async_setup_entry(hass, entry, async_add_devices):
"""Configure the Button platform."""

central_system = hass.data[DOMAIN][entry.entry_id]
cp_id = entry.data.get(CONF_CPID, DEFAULT_CPID)

Expand Down
11 changes: 6 additions & 5 deletions custom_components/ocpp/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,18 @@
}
NUMBERS = [NUMBER_MAX_CURRENT]

# Where a HA unit does not exist use Ocpp unit
UNITS_OCCP_TO_HA = {
UnitOfMeasure.wh: ha.ENERGY_WATT_HOUR,
UnitOfMeasure.kwh: ha.ENERGY_KILO_WATT_HOUR,
UnitOfMeasure.varh: None,
UnitOfMeasure.kvarh: None,
UnitOfMeasure.varh: UnitOfMeasure.varh,
UnitOfMeasure.kvarh: UnitOfMeasure.kvarh,
UnitOfMeasure.w: ha.POWER_WATT,
UnitOfMeasure.kw: ha.POWER_KILO_WATT,
UnitOfMeasure.va: ha.POWER_VOLT_AMPERE,
UnitOfMeasure.kva: None,
UnitOfMeasure.var: None,
UnitOfMeasure.kvar: None,
UnitOfMeasure.kva: UnitOfMeasure.kva,
UnitOfMeasure.var: UnitOfMeasure.var,
UnitOfMeasure.kvar: UnitOfMeasure.kvar,
UnitOfMeasure.a: ha.ELECTRIC_CURRENT_AMPERE,
UnitOfMeasure.v: ha.ELECTRIC_POTENTIAL_VOLT,
UnitOfMeasure.celsius: ha.TEMP_CELSIUS,
Expand Down
2 changes: 1 addition & 1 deletion custom_components/ocpp/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class HAChargerStatuses(str, Enum):
heartbeat = "Heartbeat"
error_code = "Error.Code"
stop_reason = "Stop.Reason"
firmware_status = "FW.Status"
firmware_status = "Status.Firmware"
reconnects = "Reconnects"


Expand Down
Loading