Skip to content

Commit 5d8c502

Browse files
Fix timezone issue with EVC data
1 parent 838bcf4 commit 5d8c502

File tree

5 files changed

+36
-33
lines changed

5 files changed

+36
-33
lines changed

custom_components/ge_cloud/api.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import random
3030
from datetime import datetime
3131
from datetime import timedelta
32+
from datetime import timezone
3233

3334
_LOGGER = logging.getLogger(__name__)
3435
TIMEOUT = 240
@@ -234,7 +235,7 @@ async def async_get_evc_sessions(self, uuid):
234235
"""
235236
Get list of EVC sessions
236237
"""
237-
now = datetime.now()
238+
now = datetime.now(timezone.utc)
238239
start = now - timedelta(hours=24)
239240
start_time=start.strftime("%Y-%m-%dT%H:%M:%SZ")
240241
end_time=now.strftime("%Y-%m-%dT%H:%M:%SZ")
@@ -249,8 +250,8 @@ async def async_get_evc_device_data(self, uuid):
249250
"""
250251
Get smart device data points
251252
"""
252-
now = datetime.now()
253-
start = now - timedelta(minutes=5)
253+
now = datetime.now(timezone.utc)
254+
start = now - timedelta(minutes=10)
254255
start_time=start.strftime("%Y-%m-%dT%H:%M:%SZ")
255256
end_time=now.strftime("%Y-%m-%dT%H:%M:%SZ")
256257

@@ -266,7 +267,7 @@ async def async_get_evc_device_data(self, uuid):
266267
if meter_id == EVC_METER_CHARGER:
267268
for point in meter.get("measurements", []):
268269
measurand = point.get("measurand", None)
269-
if measurand and measurand in EVC_DATA_POINTS:
270+
if (measurand is not None) and measurand in EVC_DATA_POINTS:
270271
value = point.get("value", None)
271272
unit = point.get("unit", None)
272273
result[EVC_DATA_POINTS[measurand]] = value

custom_components/ge_cloud/const.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import homeassistant.helpers.config_validation as cv
33

44
DOMAIN = "ge_cloud"
5-
INTEGRATION_VERSION = "1.1.10"
5+
INTEGRATION_VERSION = "1.1.11"
66
CONFIG_VERSION = 1
77

88
CONFIG_KIND = "kind"

custom_components/ge_cloud/coordinator.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ async def _async_update_data(self, first=False):
8181
if self.type == "evc_device":
8282
self.data["evc_device"] = await self.api.async_get_evc_device(self.serial)
8383
self.data["point"] = await self.api.async_get_evc_device_data(self.serial)
84-
if (self.update_count % 5) == 0:
85-
self.data["commands"] = await self.api.async_get_evc_commands(self.serial)
8684
if (self.update_count % 10) == 0:
8785
self.data["sessions"] = await self.api.async_get_evc_sessions(self.serial)
86+
if (self.update_count % 5) == 0:
87+
self.data["commands"] = await self.api.async_get_evc_commands(self.serial)
8888

8989
_LOGGER.info("Coordinator data Update for device {}".format(self.device_name))
9090
if not first:

custom_components/ge_cloud/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
"iot_class": "cloud_polling",
1717
"requirements": ["pytz"],
1818
"ssdp": [],
19-
"version": "1.1.10",
19+
"version": "1.1.11",
2020
"zeroconf": []
2121
}

custom_components/ge_cloud/sensor.py

+27-25
Original file line numberDiff line numberDiff line change
@@ -455,35 +455,35 @@ def extra_state_attributes(self) -> dict[str, Any]:
455455
sessions = self.coordinator.data.get("sessions", [])
456456
smart_point = self.coordinator.data.get("point", {})
457457
session = {}
458-
consumption_24h = 0
459-
meter_start = None
460-
meter_stop = None
461458
consumption = 0
459+
consumption_24h = 0
462460

463461
if sessions:
464462
for session in sessions:
465-
try:
466-
meter_start = float(session.get("meter_start", 0)) / 1000.0
467-
except (ValueError, TypeError):
468-
pass
469-
try:
470-
if session.get("meter_stop", None) is None:
463+
meter_start = session.get("meter_start", None)
464+
meter_stop = session.get("meter_stop", None)
465+
466+
if meter_start is not None:
467+
if meter_stop is None:
471468
meter_stop = smart_point.get("Energy.Active.Import.Register", meter_start)
472-
else:
473-
meter_stop = session.get("meter_stop", None)
469+
470+
try:
471+
meter_start = float(meter_start) / 1000.0
474472
meter_stop = float(meter_stop) / 1000.0
475473
except (ValueError, TypeError):
476474
pass
477-
consumption = float(meter_stop) - float(meter_start)
478-
consumption_24h += consumption
475+
476+
if isinstance(meter_start, float) and isinstance(meter_stop, float):
477+
consumption = float(meter_stop) - float(meter_start)
478+
consumption_24h += consumption
479479

480480
return {
481481
"started_by": session.get("started_by", None),
482-
"meter_start": meter_start,
483482
"started_at": session.get("started_at", None),
483+
"meter_start": session.get("meter_start", None),
484484
"stopped_by": session.get("stopped_by", None),
485-
"meter_stop": meter_stop,
486485
"stopped_at": session.get("stopped_at", None),
486+
"meter_stop": session.get("meter_stop", None),
487487
"stop_reason": session.get("stop_reason", None),
488488
"consumption": consumption,
489489
"consumption_24h": consumption_24h,
@@ -507,31 +507,33 @@ def native_value(self) -> float | datetime | None:
507507
elif self.coordinator.type == "evc_device":
508508
evc_device = self.coordinator.data.get("evc_device", {})
509509
smart_point = self.coordinator.data.get("point", {})
510+
510511
if key == 'status':
511512
value = evc_device.get("status", None)
512513
elif key == 'last_session':
513514
sessions = self.coordinator.data.get("sessions", [])
514-
smart_point = self.coordinator.data.get("point", {})
515515
session = {}
516516
consumption = 0
517517
meter_start = None
518518
meter_stop = None
519519
if sessions:
520520
session = sessions[-1]
521-
try:
522-
meter_start = float(session.get("meter_start", 0)) / 1000.0
523-
except (ValueError, TypeError):
524-
pass
525-
try:
526-
if session.get("meter_stop", None) is None:
521+
meter_start = session.get("meter_start", None)
522+
meter_stop = session.get("meter_stop", None)
523+
524+
if meter_start is not None:
525+
if meter_stop is None:
527526
meter_stop = smart_point.get("Energy.Active.Import.Register", meter_start)
528-
else:
529-
meter_stop = session.get("meter_stop", None)
527+
528+
try:
529+
meter_start = float(meter_start) / 1000.0
530530
meter_stop = float(meter_stop) / 1000.0
531531
except (ValueError, TypeError):
532532
pass
533-
if meter_start and meter_stop:
533+
534+
if isinstance(meter_start, float) and isinstance(meter_stop, float):
534535
consumption = round(float(meter_stop) - float(meter_start), 2)
536+
535537
value = consumption
536538
elif key == "voltage":
537539
value = smart_point.get("Voltage", None)

0 commit comments

Comments
 (0)