Bump pytrafikverket to 0.2.0.1 (#71131)

* Bump pytrafikverket to 0.2.0.1

* Use system timezone

* Minor review changes

* current time

* Adjustments timezone
pull/71367/head
G Johansson 2022-05-05 20:55:52 +02:00 committed by GitHub
parent 8f5e61ee80
commit d2c9fa4075
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 40 additions and 45 deletions

View File

@ -13,7 +13,7 @@ from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY, WEEKDAYS
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util.dt import UTC, as_utc, parse_time
from homeassistant.util import dt
from .const import CONF_FROM, CONF_TIME, CONF_TO, DOMAIN
@ -58,21 +58,23 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator):
)
self._from: str = entry.data[CONF_FROM]
self._to: str = entry.data[CONF_TO]
self._time: time | None = parse_time(entry.data[CONF_TIME])
self._time: time | None = dt.parse_time(entry.data[CONF_TIME])
self._weekdays: list[str] = entry.data[CONF_WEEKDAY]
async def _async_update_data(self) -> dict[str, Any]:
"""Fetch data from Trafikverket."""
departure_day = next_departuredate(self._weekdays)
currenttime = datetime.now()
current_time = dt.now()
when = (
datetime.combine(departure_day, self._time)
datetime.combine(
departure_day, self._time, dt.get_time_zone(self.hass.config.time_zone)
)
if self._time
else datetime.now()
else dt.now()
)
if currenttime > when:
when = currenttime
if current_time > when:
when = current_time
try:
routedata: FerryStop = await self._ferry_api.async_get_next_ferry_stop(
@ -84,10 +86,11 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator):
) from error
states = {
"departure_time": routedata.departure_time.replace(tzinfo=UTC),
"departure_time": routedata.departure_time,
"departure_from": routedata.from_harbor_name,
"departure_to": routedata.to_harbor_name,
"departure_modified": as_utc(routedata.modified_time.replace(tzinfo=UTC)),
"departure_modified": routedata.modified_time,
"departure_information": routedata.other_information,
}
_LOGGER.debug("States: %s", states)
return states

View File

@ -2,7 +2,7 @@
"domain": "trafikverket_ferry",
"name": "Trafikverket Ferry",
"documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry",
"requirements": ["pytrafikverket==0.1.6.2"],
"requirements": ["pytrafikverket==0.2.0.1"],
"codeowners": ["@gjohansson-ST"],
"config_flow": true,
"iot_class": "cloud_polling",

View File

@ -3,8 +3,7 @@ from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from datetime import timedelta
import logging
from datetime import datetime, timedelta
from typing import Any
from homeassistant.components.sensor import (
@ -20,12 +19,11 @@ from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.util.dt import as_utc
from .const import ATTRIBUTION, DOMAIN
from .coordinator import TVDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__)
ATTR_FROM = "from_harbour"
ATTR_TO = "to_harbour"
ATTR_MODIFIED_TIME = "modified_time"
@ -39,7 +37,7 @@ SCAN_INTERVAL = timedelta(minutes=5)
class TrafikverketRequiredKeysMixin:
"""Mixin for required keys."""
value_fn: Callable[[dict[str, Any]], StateType]
value_fn: Callable[[dict[str, Any]], StateType | datetime]
info_fn: Callable[[dict[str, Any]], StateType | list]
@ -56,7 +54,7 @@ SENSOR_TYPES: tuple[TrafikverketSensorEntityDescription, ...] = (
name="Departure Time",
icon="mdi:clock",
device_class=SensorDeviceClass.TIMESTAMP,
value_fn=lambda data: data["departure_time"],
value_fn=lambda data: as_utc(data["departure_time"]),
info_fn=lambda data: data["departure_information"],
),
TrafikverketSensorEntityDescription(
@ -78,7 +76,7 @@ SENSOR_TYPES: tuple[TrafikverketSensorEntityDescription, ...] = (
name="Departure Modified",
icon="mdi:clock",
device_class=SensorDeviceClass.TIMESTAMP,
value_fn=lambda data: data["departure_modified"],
value_fn=lambda data: as_utc(data["departure_modified"]),
info_fn=lambda data: data["departure_information"],
entity_registry_enabled_default=False,
),
@ -122,7 +120,7 @@ class FerrySensor(CoordinatorEntity[TVDataUpdateCoordinator], SensorEntity):
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, entry_id)},
manufacturer="Trafikverket",
model="v1.2",
model="v2.0",
name=name,
configuration_url="https://api.trafikinfo.trafikverket.se/",
)
@ -133,6 +131,7 @@ class FerrySensor(CoordinatorEntity[TVDataUpdateCoordinator], SensorEntity):
self._attr_native_value = self.entity_description.value_fn(
self.coordinator.data
)
self._attr_extra_state_attributes = {
"other_information": self.entity_description.info_fn(self.coordinator.data),
}

View File

@ -2,7 +2,7 @@
"domain": "trafikverket_train",
"name": "Trafikverket Train",
"documentation": "https://www.home-assistant.io/integrations/trafikverket_train",
"requirements": ["pytrafikverket==0.1.6.2"],
"requirements": ["pytrafikverket==0.2.0.1"],
"codeowners": ["@endor-force", "@gjohansson-ST"],
"config_flow": true,
"iot_class": "cloud_polling",

View File

@ -24,7 +24,7 @@ from homeassistant.helpers.device_registry import DeviceEntryType
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from homeassistant.util.dt import as_utc, get_time_zone, parse_time
from homeassistant.util import dt
from .const import CONF_FROM, CONF_TIME, CONF_TO, CONF_TRAINS, DOMAIN
from .util import create_unique_id
@ -42,7 +42,6 @@ ATTR_DEVIATIONS = "deviations"
ICON = "mdi:train"
SCAN_INTERVAL = timedelta(minutes=5)
STOCKHOLM_TIMEZONE = get_time_zone("Europe/Stockholm")
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
@ -111,7 +110,9 @@ async def async_setup_entry(
) from error
train_time = (
parse_time(entry.data.get(CONF_TIME, "")) if entry.data.get(CONF_TIME) else None
dt.parse_time(entry.data.get(CONF_TIME, ""))
if entry.data.get(CONF_TIME)
else None
)
async_add_entities(
@ -153,7 +154,7 @@ def next_departuredate(departure: list[str]) -> date:
def _to_iso_format(traintime: datetime) -> str:
"""Return isoformatted utc time."""
return as_utc(traintime.replace(tzinfo=STOCKHOLM_TIMEZONE)).isoformat()
return dt.as_utc(traintime).isoformat()
class TrainSensor(SensorEntity):
@ -183,7 +184,7 @@ class TrainSensor(SensorEntity):
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, entry_id)},
manufacturer="Trafikverket",
model="v1.2",
model="v2.0",
name=name,
configuration_url="https://api.trafikinfo.trafikverket.se/",
)
@ -193,12 +194,12 @@ class TrainSensor(SensorEntity):
async def async_update(self) -> None:
"""Retrieve latest state."""
when = datetime.now()
when = dt.now()
_state: TrainStop | None = None
if self._time:
departure_day = next_departuredate(self._weekday)
when = datetime.combine(departure_day, self._time).replace(
tzinfo=STOCKHOLM_TIMEZONE
when = datetime.combine(
departure_day, self._time, dt.get_time_zone(self.hass.config.time_zone)
)
try:
if self._time:
@ -222,17 +223,11 @@ class TrainSensor(SensorEntity):
self._attr_available = True
# The original datetime doesn't provide a timezone so therefore attaching it here.
self._attr_native_value = _state.advertised_time_at_location.replace(
tzinfo=STOCKHOLM_TIMEZONE
)
self._attr_native_value = dt.as_utc(_state.advertised_time_at_location)
if _state.time_at_location:
self._attr_native_value = _state.time_at_location.replace(
tzinfo=STOCKHOLM_TIMEZONE
)
self._attr_native_value = dt.as_utc(_state.time_at_location)
if _state.estimated_time_at_location:
self._attr_native_value = _state.estimated_time_at_location.replace(
tzinfo=STOCKHOLM_TIMEZONE
)
self._attr_native_value = dt.as_utc(_state.estimated_time_at_location)
self._update_attributes(_state)

View File

@ -2,7 +2,7 @@
"domain": "trafikverket_weatherstation",
"name": "Trafikverket Weather Station",
"documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation",
"requirements": ["pytrafikverket==0.1.6.2"],
"requirements": ["pytrafikverket==0.2.0.1"],
"codeowners": ["@endor-force", "@gjohansson-ST"],
"config_flow": true,
"iot_class": "cloud_polling",

View File

@ -24,13 +24,11 @@ from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.util.dt import as_utc, get_time_zone
from homeassistant.util.dt import as_utc
from .const import ATTRIBUTION, CONF_STATION, DOMAIN, NONE_IS_ZERO_SENSORS
from .coordinator import TVDataUpdateCoordinator
STOCKHOLM_TIMEZONE = get_time_zone("Europe/Stockholm")
@dataclass
class TrafikverketRequiredKeysMixin:
@ -156,8 +154,8 @@ async def async_setup_entry(
def _to_datetime(measuretime: str) -> datetime:
"""Return isoformatted utc time."""
time_obj = datetime.strptime(measuretime, "%Y-%m-%dT%H:%M:%S")
return as_utc(time_obj.replace(tzinfo=STOCKHOLM_TIMEZONE))
time_obj = datetime.strptime(measuretime, "%Y-%m-%dT%H:%M:%S.%f%z")
return as_utc(time_obj)
class TrafikverketWeatherStation(
@ -184,7 +182,7 @@ class TrafikverketWeatherStation(
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, entry_id)},
manufacturer="Trafikverket",
model="v1.2",
model="v2.0",
name=sensor_station,
configuration_url="https://api.trafikinfo.trafikverket.se/",
)

View File

@ -1978,7 +1978,7 @@ pytradfri[async]==9.0.0
# homeassistant.components.trafikverket_ferry
# homeassistant.components.trafikverket_train
# homeassistant.components.trafikverket_weatherstation
pytrafikverket==0.1.6.2
pytrafikverket==0.2.0.1
# homeassistant.components.usb
pyudev==0.22.0

View File

@ -1301,7 +1301,7 @@ pytradfri[async]==9.0.0
# homeassistant.components.trafikverket_ferry
# homeassistant.components.trafikverket_train
# homeassistant.components.trafikverket_weatherstation
pytrafikverket==0.1.6.2
pytrafikverket==0.2.0.1
# homeassistant.components.usb
pyudev==0.22.0