Bump pytrafikverket to 0.2.0.1 (#71131)
* Bump pytrafikverket to 0.2.0.1 * Use system timezone * Minor review changes * current time * Adjustments timezonepull/71367/head
parent
8f5e61ee80
commit
d2c9fa4075
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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),
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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/",
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue