mirror of
https://github.com/home-assistant/core.git
synced 2025-10-08 03:09:27 +00:00
Compare commits
38 Commits
remove-cod
...
2025.10.1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
013346cead | ||
![]() |
5abaabc9da | ||
![]() |
32481312c3 | ||
![]() |
bdc9eb37d3 | ||
![]() |
e0afcbc02b | ||
![]() |
cd56a6a98d | ||
![]() |
9d85893bbb | ||
![]() |
9e8a70225f | ||
![]() |
96ec795d5e | ||
![]() |
65b796070d | ||
![]() |
32994812e5 | ||
![]() |
66ff9d63a3 | ||
![]() |
b2a63d4996 | ||
![]() |
f9f37b7f2a | ||
![]() |
7bdd9dd38a | ||
![]() |
1e8aae0a89 | ||
![]() |
cf668e9dc2 | ||
![]() |
2e91c8700f | ||
![]() |
9d14627daa | ||
![]() |
73b8283748 | ||
![]() |
edeaaa2e63 | ||
![]() |
d26dd8fc39 | ||
![]() |
34640ea735 | ||
![]() |
46a2e21ef0 | ||
![]() |
508af53e72 | ||
![]() |
5f7440608c | ||
![]() |
0d1aa38a26 | ||
![]() |
929f8c148a | ||
![]() |
92db1f5a04 | ||
![]() |
e66b5ce0bf | ||
![]() |
1e17150e9f | ||
![]() |
792902de3d | ||
![]() |
04d78c3dd5 | ||
![]() |
5c8d5bfb84 | ||
![]() |
99bff31869 | ||
![]() |
d949119fb0 | ||
![]() |
e7b737ece5 | ||
![]() |
fb8ddac2e8 |
10
build.yaml
10
build.yaml
@@ -1,10 +1,10 @@
|
||||
image: ghcr.io/home-assistant/{arch}-homeassistant
|
||||
build_from:
|
||||
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2025.09.3
|
||||
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2025.09.3
|
||||
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2025.09.3
|
||||
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2025.09.3
|
||||
i386: ghcr.io/home-assistant/i386-homeassistant-base:2025.09.3
|
||||
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2025.10.0
|
||||
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2025.10.0
|
||||
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2025.10.0
|
||||
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2025.10.0
|
||||
i386: ghcr.io/home-assistant/i386-homeassistant-base:2025.10.0
|
||||
codenotary:
|
||||
signer: notary@home-assistant.io
|
||||
base_image: notary@home-assistant.io
|
||||
|
@@ -6,5 +6,5 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/airos",
|
||||
"iot_class": "local_polling",
|
||||
"quality_scale": "bronze",
|
||||
"requirements": ["airos==0.5.1"]
|
||||
"requirements": ["airos==0.5.4"]
|
||||
}
|
||||
|
@@ -2,17 +2,14 @@
|
||||
|
||||
from airtouch4pyapi import AirTouch
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_HOST, Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryNotReady
|
||||
|
||||
from .coordinator import AirtouchDataUpdateCoordinator
|
||||
from .coordinator import AirTouch4ConfigEntry, AirtouchDataUpdateCoordinator
|
||||
|
||||
PLATFORMS = [Platform.CLIMATE]
|
||||
|
||||
type AirTouch4ConfigEntry = ConfigEntry[AirtouchDataUpdateCoordinator]
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: AirTouch4ConfigEntry) -> bool:
|
||||
"""Set up AirTouch4 from a config entry."""
|
||||
@@ -22,7 +19,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AirTouch4ConfigEntry) ->
|
||||
info = airtouch.GetAcs()
|
||||
if not info:
|
||||
raise ConfigEntryNotReady
|
||||
coordinator = AirtouchDataUpdateCoordinator(hass, airtouch)
|
||||
coordinator = AirtouchDataUpdateCoordinator(hass, entry, airtouch)
|
||||
await coordinator.async_config_entry_first_refresh()
|
||||
entry.runtime_data = coordinator
|
||||
|
||||
|
@@ -2,26 +2,34 @@
|
||||
|
||||
import logging
|
||||
|
||||
from airtouch4pyapi import AirTouch
|
||||
from airtouch4pyapi.airtouch import AirTouchStatus
|
||||
|
||||
from homeassistant.components.climate import SCAN_INTERVAL
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
||||
from .const import DOMAIN
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
type AirTouch4ConfigEntry = ConfigEntry[AirtouchDataUpdateCoordinator]
|
||||
|
||||
|
||||
class AirtouchDataUpdateCoordinator(DataUpdateCoordinator):
|
||||
"""Class to manage fetching Airtouch data."""
|
||||
|
||||
def __init__(self, hass, airtouch):
|
||||
def __init__(
|
||||
self, hass: HomeAssistant, entry: AirTouch4ConfigEntry, airtouch: AirTouch
|
||||
) -> None:
|
||||
"""Initialize global Airtouch data updater."""
|
||||
self.airtouch = airtouch
|
||||
|
||||
super().__init__(
|
||||
hass,
|
||||
_LOGGER,
|
||||
config_entry=entry,
|
||||
name=DOMAIN,
|
||||
update_interval=SCAN_INTERVAL,
|
||||
)
|
||||
|
@@ -620,6 +620,13 @@ class GoogleGenerativeAILLMBaseEntity(Entity):
|
||||
def create_generate_content_config(self) -> GenerateContentConfig:
|
||||
"""Create the GenerateContentConfig for the LLM."""
|
||||
options = self.subentry.data
|
||||
model = options.get(CONF_CHAT_MODEL, RECOMMENDED_CHAT_MODEL)
|
||||
thinking_config: ThinkingConfig | None = None
|
||||
if model.startswith("models/gemini-2.5") and not model.endswith(
|
||||
("tts", "image", "image-preview")
|
||||
):
|
||||
thinking_config = ThinkingConfig(include_thoughts=True)
|
||||
|
||||
return GenerateContentConfig(
|
||||
temperature=options.get(CONF_TEMPERATURE, RECOMMENDED_TEMPERATURE),
|
||||
top_k=options.get(CONF_TOP_K, RECOMMENDED_TOP_K),
|
||||
@@ -652,7 +659,7 @@ class GoogleGenerativeAILLMBaseEntity(Entity):
|
||||
),
|
||||
),
|
||||
],
|
||||
thinking_config=ThinkingConfig(include_thoughts=True),
|
||||
thinking_config=thinking_config,
|
||||
)
|
||||
|
||||
|
||||
|
@@ -6,6 +6,6 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/hassio",
|
||||
"iot_class": "local_polling",
|
||||
"quality_scale": "internal",
|
||||
"requirements": ["aiohasupervisor==0.3.3b0"],
|
||||
"requirements": ["aiohasupervisor==0.3.3"],
|
||||
"single_config_entry": true
|
||||
}
|
||||
|
@@ -67,11 +67,7 @@ class ZBT2FirmwareMixin(ConfigEntryBaseFlow, FirmwareInstallFlowProtocol):
|
||||
"""Mixin for Home Assistant Connect ZBT-2 firmware methods."""
|
||||
|
||||
context: ConfigFlowContext
|
||||
|
||||
# `rts_dtr` targets older adapters, `baudrate` works for newer ones. The reason we
|
||||
# try them in this order is that on older adapters `baudrate` entered the ESP32-S3
|
||||
# bootloader instead of the MG24 bootloader.
|
||||
BOOTLOADER_RESET_METHODS = [ResetTarget.RTS_DTR, ResetTarget.BAUDRATE]
|
||||
BOOTLOADER_RESET_METHODS = [ResetTarget.RTS_DTR]
|
||||
|
||||
async def async_step_install_zigbee_firmware(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
|
@@ -157,7 +157,7 @@ async def async_setup_entry(
|
||||
class FirmwareUpdateEntity(BaseFirmwareUpdateEntity):
|
||||
"""Connect ZBT-2 firmware update entity."""
|
||||
|
||||
bootloader_reset_methods = [ResetTarget.RTS_DTR, ResetTarget.BAUDRATE]
|
||||
bootloader_reset_methods = [ResetTarget.RTS_DTR]
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
|
@@ -6,7 +6,7 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/homeassistant_hardware",
|
||||
"integration_type": "system",
|
||||
"requirements": [
|
||||
"universal-silabs-flasher==0.0.34",
|
||||
"universal-silabs-flasher==0.0.35",
|
||||
"ha-silabs-firmware-client==0.2.0"
|
||||
]
|
||||
}
|
||||
|
@@ -14,6 +14,6 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/homekit_controller",
|
||||
"iot_class": "local_push",
|
||||
"loggers": ["aiohomekit", "commentjson"],
|
||||
"requirements": ["aiohomekit==3.2.18"],
|
||||
"requirements": ["aiohomekit==3.2.19"],
|
||||
"zeroconf": ["_hap._tcp.local.", "_hap._udp.local."]
|
||||
}
|
||||
|
@@ -8,13 +8,16 @@ from idasen_ha import Desk
|
||||
|
||||
from homeassistant.components import bluetooth
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.debounce import Debouncer
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
type IdasenDeskConfigEntry = ConfigEntry[IdasenDeskCoordinator]
|
||||
|
||||
UPDATE_DEBOUNCE_TIME = 0.2
|
||||
|
||||
|
||||
class IdasenDeskCoordinator(DataUpdateCoordinator[int | None]):
|
||||
"""Class to manage updates for the Idasen Desk."""
|
||||
@@ -33,9 +36,22 @@ class IdasenDeskCoordinator(DataUpdateCoordinator[int | None]):
|
||||
hass, _LOGGER, config_entry=config_entry, name=config_entry.title
|
||||
)
|
||||
self.address = address
|
||||
self._expected_connected = False
|
||||
self.desk = Desk(self._async_handle_update)
|
||||
|
||||
self.desk = Desk(self.async_set_updated_data)
|
||||
self._expected_connected = False
|
||||
self._height: int | None = None
|
||||
|
||||
@callback
|
||||
def async_update_data() -> None:
|
||||
self.async_set_updated_data(self._height)
|
||||
|
||||
self._debouncer = Debouncer(
|
||||
hass=self.hass,
|
||||
logger=_LOGGER,
|
||||
cooldown=UPDATE_DEBOUNCE_TIME,
|
||||
immediate=True,
|
||||
function=async_update_data,
|
||||
)
|
||||
|
||||
async def async_connect(self) -> bool:
|
||||
"""Connect to desk."""
|
||||
@@ -60,3 +76,9 @@ class IdasenDeskCoordinator(DataUpdateCoordinator[int | None]):
|
||||
"""Ensure that the desk is connected if that is the expected state."""
|
||||
if self._expected_connected:
|
||||
await self.async_connect()
|
||||
|
||||
@callback
|
||||
def _async_handle_update(self, height: int | None) -> None:
|
||||
"""Handle an update from the desk."""
|
||||
self._height = height
|
||||
self._debouncer.async_schedule_call()
|
||||
|
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any
|
||||
|
||||
from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.translation import async_get_cached_translations
|
||||
|
||||
from .const import MEDIA_SOURCE_DATA, URI_SCHEME, URI_SCHEME_REGEX
|
||||
|
||||
@@ -62,12 +63,15 @@ class MediaSourceItem:
|
||||
async def async_browse(self) -> BrowseMediaSource:
|
||||
"""Browse this item."""
|
||||
if self.domain is None:
|
||||
title = async_get_cached_translations(
|
||||
self.hass, self.hass.config.language, "common", "media_source"
|
||||
).get("component.media_source.common.sources_default", "Media Sources")
|
||||
base = BrowseMediaSource(
|
||||
domain=None,
|
||||
identifier=None,
|
||||
media_class=MediaClass.APP,
|
||||
media_content_type=MediaType.APPS,
|
||||
title="Media Sources",
|
||||
title=title,
|
||||
can_play=False,
|
||||
can_expand=True,
|
||||
children_media_class=MediaClass.APP,
|
||||
|
@@ -9,5 +9,8 @@
|
||||
"unknown_media_source": {
|
||||
"message": "Unknown media source: {domain}"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"sources_default": "Media sources"
|
||||
}
|
||||
}
|
||||
|
@@ -208,7 +208,7 @@ class ModbusStructEntity(ModbusBaseEntity, RestoreEntity):
|
||||
|
||||
def __process_raw_value(self, entry: float | str | bytes) -> str | None:
|
||||
"""Process value from sensor with NaN handling, scaling, offset, min/max etc."""
|
||||
if self._nan_value and entry in (self._nan_value, -self._nan_value):
|
||||
if self._nan_value is not None and entry in (self._nan_value, -self._nan_value):
|
||||
return None
|
||||
if isinstance(entry, bytes):
|
||||
return entry.decode()
|
||||
|
@@ -34,6 +34,7 @@ async def async_setup_entry(
|
||||
|
||||
coordinator = NordPoolDataUpdateCoordinator(hass, config_entry)
|
||||
await coordinator.fetch_data(dt_util.utcnow(), True)
|
||||
await coordinator.update_listeners(dt_util.utcnow())
|
||||
if not coordinator.last_update_success:
|
||||
raise ConfigEntryNotReady(
|
||||
translation_domain=DOMAIN,
|
||||
|
@@ -44,9 +44,10 @@ class NordPoolDataUpdateCoordinator(DataUpdateCoordinator[DeliveryPeriodsData]):
|
||||
name=DOMAIN,
|
||||
)
|
||||
self.client = NordPoolClient(session=async_get_clientsession(hass))
|
||||
self.unsub: Callable[[], None] | None = None
|
||||
self.data_unsub: Callable[[], None] | None = None
|
||||
self.listener_unsub: Callable[[], None] | None = None
|
||||
|
||||
def get_next_interval(self, now: datetime) -> datetime:
|
||||
def get_next_data_interval(self, now: datetime) -> datetime:
|
||||
"""Compute next time an update should occur."""
|
||||
next_hour = dt_util.utcnow() + timedelta(hours=1)
|
||||
next_run = datetime(
|
||||
@@ -56,23 +57,45 @@ class NordPoolDataUpdateCoordinator(DataUpdateCoordinator[DeliveryPeriodsData]):
|
||||
next_hour.hour,
|
||||
tzinfo=dt_util.UTC,
|
||||
)
|
||||
LOGGER.debug("Next update at %s", next_run)
|
||||
LOGGER.debug("Next data update at %s", next_run)
|
||||
return next_run
|
||||
|
||||
def get_next_15_interval(self, now: datetime) -> datetime:
|
||||
"""Compute next time we need to notify listeners."""
|
||||
next_run = dt_util.utcnow() + timedelta(minutes=15)
|
||||
next_minute = next_run.minute // 15 * 15
|
||||
next_run = next_run.replace(
|
||||
minute=next_minute, second=0, microsecond=0, tzinfo=dt_util.UTC
|
||||
)
|
||||
|
||||
LOGGER.debug("Next listener update at %s", next_run)
|
||||
return next_run
|
||||
|
||||
async def async_shutdown(self) -> None:
|
||||
"""Cancel any scheduled call, and ignore new runs."""
|
||||
await super().async_shutdown()
|
||||
if self.unsub:
|
||||
self.unsub()
|
||||
self.unsub = None
|
||||
if self.data_unsub:
|
||||
self.data_unsub()
|
||||
self.data_unsub = None
|
||||
if self.listener_unsub:
|
||||
self.listener_unsub()
|
||||
self.listener_unsub = None
|
||||
|
||||
async def update_listeners(self, now: datetime) -> None:
|
||||
"""Update entity listeners."""
|
||||
self.listener_unsub = async_track_point_in_utc_time(
|
||||
self.hass,
|
||||
self.update_listeners,
|
||||
self.get_next_15_interval(dt_util.utcnow()),
|
||||
)
|
||||
self.async_update_listeners()
|
||||
|
||||
async def fetch_data(self, now: datetime, initial: bool = False) -> None:
|
||||
"""Fetch data from Nord Pool."""
|
||||
self.unsub = async_track_point_in_utc_time(
|
||||
self.hass, self.fetch_data, self.get_next_interval(dt_util.utcnow())
|
||||
self.data_unsub = async_track_point_in_utc_time(
|
||||
self.hass, self.fetch_data, self.get_next_data_interval(dt_util.utcnow())
|
||||
)
|
||||
if self.config_entry.pref_disable_polling and not initial:
|
||||
self.async_update_listeners()
|
||||
return
|
||||
try:
|
||||
data = await self.handle_data(initial)
|
||||
|
@@ -307,7 +307,7 @@
|
||||
},
|
||||
"markdown": {
|
||||
"name": "Format as Markdown",
|
||||
"description": "Enable Markdown formatting for the message body (Web app only). See the Markdown guide for syntax details: https://www.markdownguide.org/basic-syntax/."
|
||||
"description": "Enable Markdown formatting for the message body. See the Markdown guide for syntax details: https://www.markdownguide.org/basic-syntax/."
|
||||
},
|
||||
"tags": {
|
||||
"name": "Tags/Emojis",
|
||||
|
@@ -35,7 +35,7 @@ from .const import CONF_DELETE_PERMANENTLY, DATA_BACKUP_AGENT_LISTENERS, DOMAIN
|
||||
from .coordinator import OneDriveConfigEntry
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
UPLOAD_CHUNK_SIZE = 16 * 320 * 1024 # 5.2MB
|
||||
UPLOAD_CHUNK_SIZE = 32 * 320 * 1024 # 10.4MB
|
||||
TIMEOUT = ClientTimeout(connect=10, total=43200) # 12 hours
|
||||
METADATA_VERSION = 2
|
||||
CACHE_TTL = 300
|
||||
@@ -163,7 +163,10 @@ class OneDriveBackupAgent(BackupAgent):
|
||||
)
|
||||
try:
|
||||
backup_file = await LargeFileUploadClient.upload(
|
||||
self._token_function, file, session=async_get_clientsession(self._hass)
|
||||
self._token_function,
|
||||
file,
|
||||
upload_chunk_size=UPLOAD_CHUNK_SIZE,
|
||||
session=async_get_clientsession(self._hass),
|
||||
)
|
||||
except HashMismatchError as err:
|
||||
raise BackupAgentError(
|
||||
|
@@ -7,5 +7,5 @@
|
||||
"integration_type": "service",
|
||||
"iot_class": "cloud_polling",
|
||||
"loggers": ["ovoenergy"],
|
||||
"requirements": ["ovoenergy==2.0.1"]
|
||||
"requirements": ["ovoenergy==3.0.1"]
|
||||
}
|
||||
|
@@ -6,5 +6,5 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/portainer",
|
||||
"iot_class": "local_polling",
|
||||
"quality_scale": "bronze",
|
||||
"requirements": ["pyportainer==0.1.7"]
|
||||
"requirements": ["pyportainer==1.0.3"]
|
||||
}
|
||||
|
@@ -215,6 +215,7 @@ def create_coordinator_container_vm(
|
||||
return DataUpdateCoordinator(
|
||||
hass,
|
||||
_LOGGER,
|
||||
config_entry=None,
|
||||
name=f"proxmox_coordinator_{host_name}_{node_name}_{vm_id}",
|
||||
update_method=async_update_data,
|
||||
update_interval=timedelta(seconds=UPDATE_INTERVAL),
|
||||
|
@@ -16,7 +16,6 @@ ATTR_HTML: Final = "html"
|
||||
ATTR_CALLBACK_URL: Final = "callback_url"
|
||||
ATTR_EXPIRE: Final = "expire"
|
||||
ATTR_TTL: Final = "ttl"
|
||||
ATTR_DATA: Final = "data"
|
||||
ATTR_TIMESTAMP: Final = "timestamp"
|
||||
|
||||
CONF_USER_KEY: Final = "user_key"
|
||||
|
@@ -67,7 +67,7 @@ class PushoverNotificationService(BaseNotificationService):
|
||||
|
||||
# Extract params from data dict
|
||||
title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)
|
||||
data = kwargs.get(ATTR_DATA, {})
|
||||
data = kwargs.get(ATTR_DATA) or {}
|
||||
url = data.get(ATTR_URL)
|
||||
url_title = data.get(ATTR_URL_TITLE)
|
||||
priority = data.get(ATTR_PRIORITY)
|
||||
|
@@ -19,5 +19,5 @@
|
||||
"iot_class": "local_push",
|
||||
"loggers": ["reolink_aio"],
|
||||
"quality_scale": "platinum",
|
||||
"requirements": ["reolink-aio==0.16.0"]
|
||||
"requirements": ["reolink-aio==0.16.1"]
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@
|
||||
"loggers": ["roborock"],
|
||||
"quality_scale": "silver",
|
||||
"requirements": [
|
||||
"python-roborock==2.47.1",
|
||||
"python-roborock==2.49.1",
|
||||
"vacuum-map-parser-roborock==0.1.4"
|
||||
]
|
||||
}
|
||||
|
@@ -377,8 +377,10 @@
|
||||
"max": "Max",
|
||||
"high": "[%key:common::state::high%]",
|
||||
"intense": "Intense",
|
||||
"extreme": "Extreme",
|
||||
"custom": "[%key:component::roborock::entity::select::mop_mode::state::custom%]",
|
||||
"custom_water_flow": "Custom water flow",
|
||||
"vac_followed_by_mop": "Vacuum followed by mop",
|
||||
"smart_mode": "[%key:component::roborock::entity::select::mop_mode::state::smart_mode%]"
|
||||
}
|
||||
},
|
||||
|
@@ -13,8 +13,10 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
|
||||
from .const import (
|
||||
CONF_OUTPUT_NUMBER,
|
||||
CONF_OUTPUTS,
|
||||
CONF_ZONE_NUMBER,
|
||||
CONF_ZONE_TYPE,
|
||||
CONF_ZONES,
|
||||
SIGNAL_OUTPUTS_UPDATED,
|
||||
SIGNAL_ZONES_UPDATED,
|
||||
SUBENTRY_TYPE_OUTPUT,
|
||||
@@ -49,7 +51,7 @@ async def async_setup_entry(
|
||||
zone_num,
|
||||
zone_name,
|
||||
zone_type,
|
||||
SUBENTRY_TYPE_ZONE,
|
||||
CONF_ZONES,
|
||||
SIGNAL_ZONES_UPDATED,
|
||||
)
|
||||
],
|
||||
@@ -73,7 +75,7 @@ async def async_setup_entry(
|
||||
output_num,
|
||||
output_name,
|
||||
ouput_type,
|
||||
SUBENTRY_TYPE_OUTPUT,
|
||||
CONF_OUTPUTS,
|
||||
SIGNAL_OUTPUTS_UPDATED,
|
||||
)
|
||||
],
|
||||
|
@@ -5,14 +5,14 @@
|
||||
"description": "Refer to the documentation on getting your Slack API key.",
|
||||
"data": {
|
||||
"api_key": "[%key:common::config_flow::data::api_key%]",
|
||||
"default_channel": "Default Channel",
|
||||
"default_channel": "Default channel",
|
||||
"icon": "Icon",
|
||||
"username": "[%key:common::config_flow::data::username%]"
|
||||
},
|
||||
"data_description": {
|
||||
"api_key": "The Slack API token to use for sending Slack messages.",
|
||||
"default_channel": "The channel to post to if no channel is specified when sending a message.",
|
||||
"icon": "Use one of the Slack emojis as an Icon for the supplied username.",
|
||||
"icon": "Use one of the Slack emojis as an icon for the supplied username.",
|
||||
"username": "Home Assistant will post to Slack using the username specified."
|
||||
}
|
||||
}
|
||||
|
@@ -31,6 +31,17 @@
|
||||
"default": "mdi:stop"
|
||||
}
|
||||
},
|
||||
"climate": {
|
||||
"air_conditioner": {
|
||||
"state_attributes": {
|
||||
"fan_mode": {
|
||||
"state": {
|
||||
"turbo": "mdi:wind-power"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"number": {
|
||||
"washer_rinse_cycles": {
|
||||
"default": "mdi:waves-arrow-up"
|
||||
|
@@ -1151,8 +1151,11 @@ async def async_setup_entry(
|
||||
)
|
||||
and (
|
||||
not description.exists_fn
|
||||
or description.exists_fn(
|
||||
device.status[MAIN][capability][attribute]
|
||||
or (
|
||||
component == MAIN
|
||||
and description.exists_fn(
|
||||
device.status[MAIN][capability][attribute]
|
||||
)
|
||||
)
|
||||
)
|
||||
and (
|
||||
|
@@ -89,6 +89,11 @@
|
||||
"long_wind": "Long wind",
|
||||
"smart": "Smart"
|
||||
}
|
||||
},
|
||||
"fan_mode": {
|
||||
"state": {
|
||||
"turbo": "Turbo"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -7,5 +7,5 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/tibber",
|
||||
"iot_class": "cloud_polling",
|
||||
"loggers": ["tibber"],
|
||||
"requirements": ["pyTibber==0.32.1"]
|
||||
"requirements": ["pyTibber==0.32.2"]
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from collections.abc import Callable
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
@@ -149,8 +150,9 @@ class ToGrillCoordinator(DataUpdateCoordinator[dict[tuple[int, int | None], Pack
|
||||
raise DeviceNotFound("Unable to connect to device") from exc
|
||||
|
||||
try:
|
||||
packet_a0 = await client.read(PacketA0Notify)
|
||||
except (BleakError, DecodeError) as exc:
|
||||
async with asyncio.timeout(10):
|
||||
packet_a0 = await client.read(PacketA0Notify)
|
||||
except (BleakError, DecodeError, TimeoutError) as exc:
|
||||
await client.disconnect()
|
||||
raise DeviceFailed(f"Device failed {exc}") from exc
|
||||
|
||||
@@ -215,9 +217,19 @@ class ToGrillCoordinator(DataUpdateCoordinator[dict[tuple[int, int | None], Pack
|
||||
|
||||
@callback
|
||||
def _async_request_refresh_soon(self) -> None:
|
||||
self.config_entry.async_create_task(
|
||||
self.hass, self.async_request_refresh(), eager_start=False
|
||||
)
|
||||
"""Request a refresh in the near future.
|
||||
|
||||
This way have been called during an update and
|
||||
would be ignored by debounce logic, so we delay
|
||||
it by a slight amount to hopefully let the current
|
||||
update finish first.
|
||||
"""
|
||||
|
||||
async def _delayed_refresh() -> None:
|
||||
await asyncio.sleep(0.5)
|
||||
await self.async_request_refresh()
|
||||
|
||||
self.config_entry.async_create_task(self.hass, _delayed_refresh())
|
||||
|
||||
@callback
|
||||
def _disconnected_callback(self) -> None:
|
||||
|
@@ -100,8 +100,9 @@ class VeSyncFanHA(VeSyncBaseEntity, FanEntity):
|
||||
"""Return the currently set speed."""
|
||||
|
||||
current_level = self.device.state.fan_level
|
||||
|
||||
if self.device.state.mode == VS_FAN_MODE_MANUAL and current_level is not None:
|
||||
if current_level == 0:
|
||||
return 0
|
||||
return ordered_list_item_to_percentage(
|
||||
self.device.fan_levels, current_level
|
||||
)
|
||||
|
@@ -10,6 +10,7 @@ from homeassistant.components.calendar import CalendarEntity, CalendarEvent
|
||||
from homeassistant.const import CONF_NAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
from . import WorkdayConfigEntry
|
||||
from .const import CONF_EXCLUDES, CONF_OFFSET, CONF_WORKDAYS
|
||||
@@ -87,11 +88,12 @@ class WorkdayCalendarEntity(BaseWorkdayEntity, CalendarEntity):
|
||||
@property
|
||||
def event(self) -> CalendarEvent | None:
|
||||
"""Return the next upcoming event."""
|
||||
return (
|
||||
sorted(self.event_list, key=lambda e: e.start)[0]
|
||||
if self.event_list
|
||||
else None
|
||||
sorted_list: list[CalendarEvent] | None = (
|
||||
sorted(self.event_list, key=lambda e: e.start) if self.event_list else None
|
||||
)
|
||||
if not sorted_list:
|
||||
return None
|
||||
return [d for d in sorted_list if d.start >= dt_util.utcnow().date()][0]
|
||||
|
||||
async def async_get_events(
|
||||
self, hass: HomeAssistant, start_date: datetime, end_date: datetime
|
||||
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
||||
from abc import abstractmethod
|
||||
import collections
|
||||
from contextlib import suppress
|
||||
from enum import StrEnum
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
@@ -82,9 +83,6 @@ FORMATION_UPLOAD_MANUAL_BACKUP = "upload_manual_backup"
|
||||
CHOOSE_AUTOMATIC_BACKUP = "choose_automatic_backup"
|
||||
OVERWRITE_COORDINATOR_IEEE = "overwrite_coordinator_ieee"
|
||||
|
||||
OPTIONS_INTENT_MIGRATE = "intent_migrate"
|
||||
OPTIONS_INTENT_RECONFIGURE = "intent_reconfigure"
|
||||
|
||||
UPLOADED_BACKUP_FILE = "uploaded_backup_file"
|
||||
|
||||
REPAIR_MY_URL = "https://my.home-assistant.io/redirect/repairs/"
|
||||
@@ -102,6 +100,13 @@ ZEROCONF_PROPERTIES_SCHEMA = vol.Schema(
|
||||
)
|
||||
|
||||
|
||||
class OptionsMigrationIntent(StrEnum):
|
||||
"""Zigbee options flow intents."""
|
||||
|
||||
MIGRATE = "intent_migrate"
|
||||
RECONFIGURE = "intent_reconfigure"
|
||||
|
||||
|
||||
def _format_backup_choice(
|
||||
backup: zigpy.backups.NetworkBackup, *, pan_ids: bool = True
|
||||
) -> str:
|
||||
@@ -930,6 +935,8 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN):
|
||||
class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow):
|
||||
"""Handle an options flow."""
|
||||
|
||||
_migration_intent: OptionsMigrationIntent
|
||||
|
||||
def __init__(self, config_entry: ConfigEntry) -> None:
|
||||
"""Initialize options flow."""
|
||||
super().__init__()
|
||||
@@ -971,8 +978,8 @@ class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow):
|
||||
return self.async_show_menu(
|
||||
step_id="prompt_migrate_or_reconfigure",
|
||||
menu_options=[
|
||||
OPTIONS_INTENT_RECONFIGURE,
|
||||
OPTIONS_INTENT_MIGRATE,
|
||||
OptionsMigrationIntent.RECONFIGURE,
|
||||
OptionsMigrationIntent.MIGRATE,
|
||||
],
|
||||
)
|
||||
|
||||
@@ -980,30 +987,26 @@ class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow):
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> ConfigFlowResult:
|
||||
"""Virtual step for when the user is reconfiguring the integration."""
|
||||
self._migration_intent = OptionsMigrationIntent.RECONFIGURE
|
||||
return await self.async_step_choose_serial_port()
|
||||
|
||||
async def async_step_intent_migrate(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> ConfigFlowResult:
|
||||
"""Confirm the user wants to reset their current radio."""
|
||||
self._migration_intent = OptionsMigrationIntent.MIGRATE
|
||||
return await self.async_step_choose_serial_port()
|
||||
|
||||
if user_input is not None:
|
||||
await self._radio_mgr.async_reset_adapter()
|
||||
|
||||
return await self.async_step_instruct_unplug()
|
||||
|
||||
return self.async_show_form(step_id="intent_migrate")
|
||||
|
||||
async def async_step_instruct_unplug(
|
||||
async def async_step_maybe_reset_old_radio(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> ConfigFlowResult:
|
||||
"""Instruct the user to unplug the current radio, if possible."""
|
||||
"""Erase the old radio's network settings before migration."""
|
||||
|
||||
if user_input is not None:
|
||||
# Now that the old radio is gone, we can scan for serial ports again
|
||||
return await self.async_step_choose_serial_port()
|
||||
# If we are reconfiguring, the old radio will not be available
|
||||
if self._migration_intent is OptionsMigrationIntent.RECONFIGURE:
|
||||
return await self.async_step_maybe_confirm_ezsp_restore()
|
||||
|
||||
return self.async_show_form(step_id="instruct_unplug")
|
||||
return await super().async_step_maybe_reset_old_radio(user_input)
|
||||
|
||||
async def _async_create_radio_entry(self):
|
||||
"""Re-implementation of the base flow's final step to update the config."""
|
||||
@@ -1018,8 +1021,7 @@ class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow):
|
||||
# Reload ZHA after we finish
|
||||
await self.hass.config_entries.async_setup(self.config_entry.entry_id)
|
||||
|
||||
# Intentionally do not set `data` to avoid creating `options`, we set it above
|
||||
return self.async_create_entry(title=self._title, data={})
|
||||
return self.async_abort(reason="reconfigure_successful")
|
||||
|
||||
def async_remove(self):
|
||||
"""Maybe reload ZHA if the flow is aborted."""
|
||||
|
@@ -147,10 +147,6 @@
|
||||
"title": "[%key:component::zha::options::step::prompt_migrate_or_reconfigure::menu_options::intent_migrate%]",
|
||||
"description": "Before plugging in your new adapter, your old adapter needs to be reset. An automatic backup will be performed. If you are using a combined Z-Wave and Zigbee adapter like the HUSBZB-1, this will only reset the Zigbee portion.\n\n*Note: if you are migrating from a **ConBee/RaspBee**, make sure it is running firmware `0x26720700` or newer! Otherwise, some devices may not be controllable after migrating until they are power cycled.*\n\nDo you wish to continue?"
|
||||
},
|
||||
"instruct_unplug": {
|
||||
"title": "Unplug your old adapter",
|
||||
"description": "Your old adapter has been reset. If the hardware is no longer needed, you can now unplug it.\n\nYou can now plug in your new adapter."
|
||||
},
|
||||
"choose_serial_port": {
|
||||
"title": "[%key:component::zha::config::step::choose_serial_port::title%]",
|
||||
"data": {
|
||||
@@ -240,7 +236,8 @@
|
||||
"cannot_resolve_path": "[%key:component::zha::config::abort::cannot_resolve_path%]",
|
||||
"wrong_firmware_installed": "[%key:component::zha::config::abort::wrong_firmware_installed%]",
|
||||
"cannot_restore_backup": "[%key:component::zha::config::abort::cannot_restore_backup%]",
|
||||
"cannot_restore_backup_no_ieee_confirm": "[%key:component::zha::config::abort::cannot_restore_backup_no_ieee_confirm%]"
|
||||
"cannot_restore_backup_no_ieee_confirm": "[%key:component::zha::config::abort::cannot_restore_backup_no_ieee_confirm%]",
|
||||
"reconfigure_successful": "[%key:component::zha::config::abort::reconfigure_successful%]"
|
||||
}
|
||||
},
|
||||
"config_panel": {
|
||||
|
@@ -703,7 +703,15 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
async def async_step_on_supervisor(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> ConfigFlowResult:
|
||||
"""Handle logic when on Supervisor host."""
|
||||
"""Handle logic when on Supervisor host.
|
||||
|
||||
When the add-on is running, we copy over it's settings.
|
||||
We will ignore settings for USB/Socket if those were discovered.
|
||||
|
||||
If add-on is not running, we will configure the add-on.
|
||||
|
||||
When it's not installed, we install it with new config options.
|
||||
"""
|
||||
if user_input is None:
|
||||
return self.async_show_form(
|
||||
step_id="on_supervisor", data_schema=ON_SUPERVISOR_SCHEMA
|
||||
@@ -717,8 +725,11 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
|
||||
if addon_info.state == AddonState.RUNNING:
|
||||
addon_config = addon_info.options
|
||||
self.usb_path = addon_config.get(CONF_ADDON_DEVICE)
|
||||
self.socket_path = addon_config.get(CONF_ADDON_SOCKET)
|
||||
# Use the options set by USB/ESPHome discovery
|
||||
if not self._adapter_discovered:
|
||||
self.usb_path = addon_config.get(CONF_ADDON_DEVICE)
|
||||
self.socket_path = addon_config.get(CONF_ADDON_SOCKET)
|
||||
|
||||
self.s0_legacy_key = addon_config.get(CONF_ADDON_S0_LEGACY_KEY, "")
|
||||
self.s2_access_control_key = addon_config.get(
|
||||
CONF_ADDON_S2_ACCESS_CONTROL_KEY, ""
|
||||
@@ -918,7 +929,7 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
discovery_info = await self._async_get_addon_discovery_info()
|
||||
self.ws_address = f"ws://{discovery_info['host']}:{discovery_info['port']}"
|
||||
|
||||
if not self.unique_id or self.source in (SOURCE_USB, SOURCE_ESPHOME):
|
||||
if not self.unique_id or self.source == SOURCE_USB:
|
||||
if not self.version_info:
|
||||
try:
|
||||
self.version_info = await async_get_version_info(
|
||||
@@ -931,6 +942,21 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
str(self.version_info.home_id), raise_on_progress=False
|
||||
)
|
||||
|
||||
# When we came from discovery, make sure we update the add-on
|
||||
if self._adapter_discovered and self.use_addon:
|
||||
await self._async_set_addon_config(
|
||||
{
|
||||
CONF_ADDON_DEVICE: self.usb_path,
|
||||
CONF_ADDON_SOCKET: self.socket_path,
|
||||
CONF_ADDON_S0_LEGACY_KEY: self.s0_legacy_key,
|
||||
CONF_ADDON_S2_ACCESS_CONTROL_KEY: self.s2_access_control_key,
|
||||
CONF_ADDON_S2_AUTHENTICATED_KEY: self.s2_authenticated_key,
|
||||
CONF_ADDON_S2_UNAUTHENTICATED_KEY: self.s2_unauthenticated_key,
|
||||
CONF_ADDON_LR_S2_ACCESS_CONTROL_KEY: self.lr_s2_access_control_key,
|
||||
CONF_ADDON_LR_S2_AUTHENTICATED_KEY: self.lr_s2_authenticated_key,
|
||||
}
|
||||
)
|
||||
|
||||
self._abort_if_unique_id_configured(
|
||||
updates={
|
||||
CONF_URL: self.ws_address,
|
||||
@@ -942,7 +968,12 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
CONF_S2_UNAUTHENTICATED_KEY: self.s2_unauthenticated_key,
|
||||
CONF_LR_S2_ACCESS_CONTROL_KEY: self.lr_s2_access_control_key,
|
||||
CONF_LR_S2_AUTHENTICATED_KEY: self.lr_s2_authenticated_key,
|
||||
}
|
||||
},
|
||||
error=(
|
||||
"migration_successful"
|
||||
if self.source in (SOURCE_USB, SOURCE_ESPHOME)
|
||||
else "already_configured"
|
||||
),
|
||||
)
|
||||
return self._async_create_entry_from_vars()
|
||||
|
||||
@@ -1490,6 +1521,8 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
)
|
||||
# Only update existing entries that are configured via sockets
|
||||
and existing_entry.data.get(CONF_SOCKET_PATH)
|
||||
# And use the add-on
|
||||
and existing_entry.data.get(CONF_USE_ADDON)
|
||||
):
|
||||
await self._async_set_addon_config(
|
||||
{CONF_ADDON_SOCKET: discovery_info.socket_path}
|
||||
@@ -1498,6 +1531,11 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
self.hass.config_entries.async_schedule_reload(existing_entry.entry_id)
|
||||
return self.async_abort(reason="already_configured")
|
||||
|
||||
# We are not aborting if home ID configured here, we just want to make sure that it's set
|
||||
# We will update a USB based config entry automatically in `async_step_finish_addon_setup_user`
|
||||
await self.async_set_unique_id(
|
||||
str(discovery_info.zwave_home_id), raise_on_progress=False
|
||||
)
|
||||
self.socket_path = discovery_info.socket_path
|
||||
self.context["title_placeholders"] = {
|
||||
CONF_NAME: f"{discovery_info.name} via ESPHome"
|
||||
|
@@ -612,10 +612,7 @@ class ZwaveColorOnOffLight(ZwaveLight):
|
||||
# If brightness gets set, preserve the color and mix it with the new brightness
|
||||
if self.color_mode == ColorMode.HS:
|
||||
scale = brightness / 255
|
||||
if (
|
||||
self._last_on_color is not None
|
||||
and None not in self._last_on_color.values()
|
||||
):
|
||||
if self._last_on_color is not None:
|
||||
# Changed brightness from 0 to >0
|
||||
old_brightness = max(self._last_on_color.values())
|
||||
new_scale = brightness / old_brightness
|
||||
@@ -634,8 +631,9 @@ class ZwaveColorOnOffLight(ZwaveLight):
|
||||
elif current_brightness is not None:
|
||||
scale = current_brightness / 255
|
||||
|
||||
# Reset last color until turning off again
|
||||
# Reset last color and brightness until turning off again
|
||||
self._last_on_color = None
|
||||
self._last_brightness = None
|
||||
|
||||
if new_colors is None:
|
||||
new_colors = self._get_new_colors(
|
||||
@@ -651,8 +649,10 @@ class ZwaveColorOnOffLight(ZwaveLight):
|
||||
async def async_turn_off(self, **kwargs: Any) -> None:
|
||||
"""Turn the light off."""
|
||||
|
||||
# Remember last color and brightness to restore it when turning on
|
||||
self._last_brightness = self.brightness
|
||||
# Remember last color and brightness to restore it when turning on,
|
||||
# only if we're sure the light is turned on to avoid overwriting good values
|
||||
if self._last_brightness is None:
|
||||
self._last_brightness = self.brightness
|
||||
if self._current_color and isinstance(self._current_color.value, dict):
|
||||
red = self._current_color.value.get(COLOR_SWITCH_COMBINED_RED)
|
||||
green = self._current_color.value.get(COLOR_SWITCH_COMBINED_GREEN)
|
||||
@@ -666,7 +666,8 @@ class ZwaveColorOnOffLight(ZwaveLight):
|
||||
if blue is not None:
|
||||
last_color[ColorComponent.BLUE] = blue
|
||||
|
||||
if last_color:
|
||||
# Only store the last color if we're aware of it, i.e. ignore off light
|
||||
if last_color and max(last_color.values()) > 0:
|
||||
self._last_on_color = last_color
|
||||
|
||||
if self._target_brightness:
|
||||
|
@@ -26,7 +26,7 @@ if TYPE_CHECKING:
|
||||
APPLICATION_NAME: Final = "HomeAssistant"
|
||||
MAJOR_VERSION: Final = 2025
|
||||
MINOR_VERSION: Final = 10
|
||||
PATCH_VERSION: Final = "0"
|
||||
PATCH_VERSION: Final = "1"
|
||||
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
||||
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
|
||||
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 13, 2)
|
||||
|
@@ -3,7 +3,7 @@
|
||||
aiodhcpwatcher==1.2.1
|
||||
aiodiscover==2.7.1
|
||||
aiodns==3.5.0
|
||||
aiohasupervisor==0.3.3b0
|
||||
aiohasupervisor==0.3.3
|
||||
aiohttp-asyncmdnsresolver==0.1.1
|
||||
aiohttp-fast-zlib==0.3.0
|
||||
aiohttp==3.12.15
|
||||
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "homeassistant"
|
||||
version = "2025.10.0"
|
||||
version = "2025.10.1"
|
||||
license = "Apache-2.0"
|
||||
license-files = ["LICENSE*", "homeassistant/backports/LICENSE*"]
|
||||
description = "Open-source home automation platform running on Python 3."
|
||||
@@ -27,7 +27,7 @@ dependencies = [
|
||||
# Integrations may depend on hassio integration without listing it to
|
||||
# change behavior based on presence of supervisor. Deprecated with #127228
|
||||
# Lib can be removed with 2025.11
|
||||
"aiohasupervisor==0.3.3b0",
|
||||
"aiohasupervisor==0.3.3",
|
||||
"aiohttp==3.12.15",
|
||||
"aiohttp_cors==0.8.1",
|
||||
"aiohttp-fast-zlib==0.3.0",
|
||||
|
2
requirements.txt
generated
2
requirements.txt
generated
@@ -4,7 +4,7 @@
|
||||
|
||||
# Home Assistant Core
|
||||
aiodns==3.5.0
|
||||
aiohasupervisor==0.3.3b0
|
||||
aiohasupervisor==0.3.3
|
||||
aiohttp==3.12.15
|
||||
aiohttp_cors==0.8.1
|
||||
aiohttp-fast-zlib==0.3.0
|
||||
|
18
requirements_all.txt
generated
18
requirements_all.txt
generated
@@ -265,13 +265,13 @@ aioguardian==2022.07.0
|
||||
aioharmony==0.5.3
|
||||
|
||||
# homeassistant.components.hassio
|
||||
aiohasupervisor==0.3.3b0
|
||||
aiohasupervisor==0.3.3
|
||||
|
||||
# homeassistant.components.home_connect
|
||||
aiohomeconnect==0.19.0
|
||||
|
||||
# homeassistant.components.homekit_controller
|
||||
aiohomekit==3.2.18
|
||||
aiohomekit==3.2.19
|
||||
|
||||
# homeassistant.components.mcp_server
|
||||
aiohttp_sse==2.2.0
|
||||
@@ -453,7 +453,7 @@ airgradient==0.9.2
|
||||
airly==1.1.0
|
||||
|
||||
# homeassistant.components.airos
|
||||
airos==0.5.1
|
||||
airos==0.5.4
|
||||
|
||||
# homeassistant.components.airthings_ble
|
||||
airthings-ble==0.9.2
|
||||
@@ -1664,7 +1664,7 @@ orvibo==1.1.2
|
||||
ourgroceries==1.5.4
|
||||
|
||||
# homeassistant.components.ovo_energy
|
||||
ovoenergy==2.0.1
|
||||
ovoenergy==3.0.1
|
||||
|
||||
# homeassistant.components.p1_monitor
|
||||
p1monitor==3.2.0
|
||||
@@ -1839,7 +1839,7 @@ pyRFXtrx==0.31.1
|
||||
pySDCP==1
|
||||
|
||||
# homeassistant.components.tibber
|
||||
pyTibber==0.32.1
|
||||
pyTibber==0.32.2
|
||||
|
||||
# homeassistant.components.dlink
|
||||
pyW215==0.8.0
|
||||
@@ -2287,7 +2287,7 @@ pyplaato==0.0.19
|
||||
pypoint==3.0.0
|
||||
|
||||
# homeassistant.components.portainer
|
||||
pyportainer==0.1.7
|
||||
pyportainer==1.0.3
|
||||
|
||||
# homeassistant.components.probe_plus
|
||||
pyprobeplus==1.0.1
|
||||
@@ -2541,7 +2541,7 @@ python-rabbitair==0.0.8
|
||||
python-ripple-api==0.0.3
|
||||
|
||||
# homeassistant.components.roborock
|
||||
python-roborock==2.47.1
|
||||
python-roborock==2.49.1
|
||||
|
||||
# homeassistant.components.smarttub
|
||||
python-smarttub==0.0.44
|
||||
@@ -2701,7 +2701,7 @@ renault-api==0.4.1
|
||||
renson-endura-delta==1.7.2
|
||||
|
||||
# homeassistant.components.reolink
|
||||
reolink-aio==0.16.0
|
||||
reolink-aio==0.16.1
|
||||
|
||||
# homeassistant.components.idteck_prox
|
||||
rfk101py==0.0.1
|
||||
@@ -3054,7 +3054,7 @@ unifi_ap==0.0.2
|
||||
unifiled==0.11
|
||||
|
||||
# homeassistant.components.homeassistant_hardware
|
||||
universal-silabs-flasher==0.0.34
|
||||
universal-silabs-flasher==0.0.35
|
||||
|
||||
# homeassistant.components.upb
|
||||
upb-lib==0.6.1
|
||||
|
18
requirements_test_all.txt
generated
18
requirements_test_all.txt
generated
@@ -250,13 +250,13 @@ aioguardian==2022.07.0
|
||||
aioharmony==0.5.3
|
||||
|
||||
# homeassistant.components.hassio
|
||||
aiohasupervisor==0.3.3b0
|
||||
aiohasupervisor==0.3.3
|
||||
|
||||
# homeassistant.components.home_connect
|
||||
aiohomeconnect==0.19.0
|
||||
|
||||
# homeassistant.components.homekit_controller
|
||||
aiohomekit==3.2.18
|
||||
aiohomekit==3.2.19
|
||||
|
||||
# homeassistant.components.mcp_server
|
||||
aiohttp_sse==2.2.0
|
||||
@@ -435,7 +435,7 @@ airgradient==0.9.2
|
||||
airly==1.1.0
|
||||
|
||||
# homeassistant.components.airos
|
||||
airos==0.5.1
|
||||
airos==0.5.4
|
||||
|
||||
# homeassistant.components.airthings_ble
|
||||
airthings-ble==0.9.2
|
||||
@@ -1414,7 +1414,7 @@ oralb-ble==0.17.6
|
||||
ourgroceries==1.5.4
|
||||
|
||||
# homeassistant.components.ovo_energy
|
||||
ovoenergy==2.0.1
|
||||
ovoenergy==3.0.1
|
||||
|
||||
# homeassistant.components.p1_monitor
|
||||
p1monitor==3.2.0
|
||||
@@ -1550,7 +1550,7 @@ pyHomee==1.3.8
|
||||
pyRFXtrx==0.31.1
|
||||
|
||||
# homeassistant.components.tibber
|
||||
pyTibber==0.32.1
|
||||
pyTibber==0.32.2
|
||||
|
||||
# homeassistant.components.dlink
|
||||
pyW215==0.8.0
|
||||
@@ -1911,7 +1911,7 @@ pyplaato==0.0.19
|
||||
pypoint==3.0.0
|
||||
|
||||
# homeassistant.components.portainer
|
||||
pyportainer==0.1.7
|
||||
pyportainer==1.0.3
|
||||
|
||||
# homeassistant.components.probe_plus
|
||||
pyprobeplus==1.0.1
|
||||
@@ -2111,7 +2111,7 @@ python-pooldose==0.5.0
|
||||
python-rabbitair==0.0.8
|
||||
|
||||
# homeassistant.components.roborock
|
||||
python-roborock==2.47.1
|
||||
python-roborock==2.49.1
|
||||
|
||||
# homeassistant.components.smarttub
|
||||
python-smarttub==0.0.44
|
||||
@@ -2247,7 +2247,7 @@ renault-api==0.4.1
|
||||
renson-endura-delta==1.7.2
|
||||
|
||||
# homeassistant.components.reolink
|
||||
reolink-aio==0.16.0
|
||||
reolink-aio==0.16.1
|
||||
|
||||
# homeassistant.components.rflink
|
||||
rflink==0.0.67
|
||||
@@ -2525,7 +2525,7 @@ ultraheat-api==0.5.7
|
||||
unifi-discovery==1.2.0
|
||||
|
||||
# homeassistant.components.homeassistant_hardware
|
||||
universal-silabs-flasher==0.0.34
|
||||
universal-silabs-flasher==0.0.35
|
||||
|
||||
# homeassistant.components.upb
|
||||
upb-lib==0.6.1
|
||||
|
@@ -208,7 +208,7 @@ async def test_tts_service_speak(
|
||||
threshold=RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
),
|
||||
],
|
||||
thinking_config=types.ThinkingConfig(include_thoughts=True),
|
||||
thinking_config=None,
|
||||
),
|
||||
)
|
||||
|
||||
@@ -277,6 +277,6 @@ async def test_tts_service_speak_error(
|
||||
threshold=RECOMMENDED_HARM_BLOCK_THRESHOLD,
|
||||
),
|
||||
],
|
||||
thinking_config=types.ThinkingConfig(include_thoughts=True),
|
||||
thinking_config=None,
|
||||
),
|
||||
)
|
||||
|
@@ -328,10 +328,7 @@ async def test_options_flow(
|
||||
|
||||
# Verify async_flash_silabs_firmware was called with ZBT-2's reset methods
|
||||
assert flash_mock.call_count == 1
|
||||
assert flash_mock.mock_calls[0].kwargs["bootloader_reset_methods"] == [
|
||||
"rts_dtr",
|
||||
"baudrate",
|
||||
]
|
||||
assert flash_mock.mock_calls[0].kwargs["bootloader_reset_methods"] == ["rts_dtr"]
|
||||
|
||||
|
||||
async def test_duplicate_discovery(hass: HomeAssistant) -> None:
|
||||
|
@@ -38,6 +38,8 @@ NOT_IDASEN_DISCOVERY_INFO = BluetoothServiceInfoBleak(
|
||||
tx_power=-127,
|
||||
)
|
||||
|
||||
UPDATE_DEBOUNCE_TIME = 0.2
|
||||
|
||||
|
||||
async def init_integration(hass: HomeAssistant) -> MockConfigEntry:
|
||||
"""Set up the IKEA Idasen Desk integration in Home Assistant."""
|
||||
|
@@ -4,6 +4,7 @@ from typing import Any
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
from bleak.exc import BleakError
|
||||
from freezegun.api import FrozenDateTimeFactory
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.cover import (
|
||||
@@ -22,12 +23,13 @@ from homeassistant.const import (
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
|
||||
from . import init_integration
|
||||
from . import UPDATE_DEBOUNCE_TIME, init_integration
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
|
||||
|
||||
async def test_cover_available(
|
||||
hass: HomeAssistant,
|
||||
mock_desk_api: MagicMock,
|
||||
hass: HomeAssistant, mock_desk_api: MagicMock, freezer: FrozenDateTimeFactory
|
||||
) -> None:
|
||||
"""Test cover available property."""
|
||||
entity_id = "cover.test"
|
||||
@@ -42,6 +44,9 @@ async def test_cover_available(
|
||||
mock_desk_api.is_connected = False
|
||||
mock_desk_api.trigger_update_callback(None)
|
||||
|
||||
freezer.tick(UPDATE_DEBOUNCE_TIME)
|
||||
async_fire_time_changed(hass)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == STATE_UNAVAILABLE
|
||||
@@ -64,6 +69,7 @@ async def test_cover_services(
|
||||
service_data: dict[str, Any],
|
||||
expected_state: str,
|
||||
expected_position: int,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test cover services."""
|
||||
entity_id = "cover.test"
|
||||
@@ -78,7 +84,9 @@ async def test_cover_services(
|
||||
{"entity_id": entity_id, **service_data},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
freezer.tick(UPDATE_DEBOUNCE_TIME)
|
||||
async_fire_time_changed(hass)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == expected_state
|
||||
@@ -113,4 +121,3 @@ async def test_cover_services_exception(
|
||||
{"entity_id": entity_id, **service_data},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
@@ -2,18 +2,23 @@
|
||||
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from freezegun.api import FrozenDateTimeFactory
|
||||
import pytest
|
||||
|
||||
from homeassistant.const import STATE_UNAVAILABLE
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import init_integration
|
||||
from . import UPDATE_DEBOUNCE_TIME, init_integration
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
|
||||
EXPECTED_INITIAL_HEIGHT = "1"
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
async def test_height_sensor(hass: HomeAssistant, mock_desk_api: MagicMock) -> None:
|
||||
async def test_height_sensor(
|
||||
hass: HomeAssistant, mock_desk_api: MagicMock, freezer: FrozenDateTimeFactory
|
||||
) -> None:
|
||||
"""Test height sensor."""
|
||||
await init_integration(hass)
|
||||
|
||||
@@ -24,6 +29,15 @@ async def test_height_sensor(hass: HomeAssistant, mock_desk_api: MagicMock) -> N
|
||||
|
||||
mock_desk_api.height = 1.2
|
||||
mock_desk_api.trigger_update_callback(None)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# State should still be the same due to the debouncer
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == EXPECTED_INITIAL_HEIGHT
|
||||
|
||||
freezer.tick(UPDATE_DEBOUNCE_TIME)
|
||||
async_fire_time_changed(hass)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
@@ -34,6 +48,7 @@ async def test_height_sensor(hass: HomeAssistant, mock_desk_api: MagicMock) -> N
|
||||
async def test_sensor_available(
|
||||
hass: HomeAssistant,
|
||||
mock_desk_api: MagicMock,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test sensor available property."""
|
||||
await init_integration(hass)
|
||||
@@ -46,6 +61,9 @@ async def test_sensor_available(
|
||||
mock_desk_api.is_connected = False
|
||||
mock_desk_api.trigger_update_callback(None)
|
||||
|
||||
freezer.tick(UPDATE_DEBOUNCE_TIME)
|
||||
async_fire_time_changed(hass)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == STATE_UNAVAILABLE
|
||||
|
@@ -47,7 +47,7 @@ async def get_data_from_library(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-05",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -58,7 +58,7 @@ async def get_data_from_library(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-05",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3",
|
||||
"currency": "EUR",
|
||||
@@ -69,7 +69,7 @@ async def get_data_from_library(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-04",
|
||||
"date": "2025-09-30",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -80,7 +80,7 @@ async def get_data_from_library(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-06",
|
||||
"date": "2025-10-02",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
|
@@ -1,213 +1,717 @@
|
||||
{
|
||||
"deliveryDateCET": "2024-11-05",
|
||||
"deliveryDateCET": "2025-10-01",
|
||||
"version": 2,
|
||||
"updatedAt": "2024-11-04T11:58:10.7711584Z",
|
||||
"updatedAt": "2025-09-30T11:08:13.1885499Z",
|
||||
"deliveryAreas": ["NL"],
|
||||
"market": "DayAhead",
|
||||
"multiAreaEntries": [
|
||||
{
|
||||
"deliveryStart": "2024-11-04T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T00:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 83.63
|
||||
"NL": 102.55
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T00:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T01:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:15:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 94.0
|
||||
"NL": 92.17
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T01:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T02:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:30:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 90.68
|
||||
"NL": 82.69
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T02:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T03:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:45:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 91.3
|
||||
"NL": 81.86
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T03:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T04:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 94.0
|
||||
"NL": 89.54
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T04:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T05:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:15:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 96.09
|
||||
"NL": 84.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T05:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T06:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:30:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 106.0
|
||||
"NL": 83.56
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T06:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T07:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 135.99
|
||||
"NL": 81.69
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T08:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 136.21
|
||||
"NL": 81.87
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T08:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T09:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 118.23
|
||||
"NL": 81.51
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T09:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T10:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 105.87
|
||||
"NL": 77.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T10:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T11:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 95.28
|
||||
"NL": 76.45
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T11:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T12:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 94.92
|
||||
"NL": 79.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T12:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T13:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 99.25
|
||||
"NL": 79.24
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T13:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T14:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 107.98
|
||||
"NL": 80.05
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T14:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T15:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 149.86
|
||||
"NL": 79.52
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T15:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T16:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 303.24
|
||||
"NL": 79.94
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T16:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T17:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 472.99
|
||||
"NL": 85.02
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T17:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T18:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 431.02
|
||||
"NL": 83.89
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T18:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T19:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 320.33
|
||||
"NL": 75.83
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T20:00:00Z",
|
||||
"deliveryStart": "2025-10-01T03:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 169.7
|
||||
"NL": 75.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T20:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T21:00:00Z",
|
||||
"deliveryStart": "2025-10-01T03:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 129.9
|
||||
"NL": 80.88
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T21:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T22:00:00Z",
|
||||
"deliveryStart": "2025-10-01T03:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 117.77
|
||||
"NL": 88.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T22:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T23:00:00Z",
|
||||
"deliveryStart": "2025-10-01T03:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 110.03
|
||||
"NL": 97.34
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 87.65
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 107.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 123.95
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 143.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 150.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 171.48
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 172.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 163.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 198.33
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 142.86
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 117.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 95.25
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 139.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 105.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 93.48
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 79.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 102.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 89.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 78.16
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 63.7
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 79.97
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 68.06
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 61.13
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 56.19
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 61.69
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 57.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 57.86
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 57.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 57.09
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 58.78
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 60.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 61.14
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 54.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 60.62
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 64.4
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 71.9
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 57.55
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 66.28
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 77.91
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 88.62
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 55.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 80.77
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 95.16
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 109.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 76.45
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 106.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 139.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 190.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 141.68
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 192.84
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 285.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 381.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 408.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 376.39
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 321.94
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 253.14
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 217.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T18:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 154.56
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T18:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 123.11
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T18:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 104.83
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 125.76
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 115.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 97.54
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 87.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 106.69
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 98.76
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 95.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 88.02
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:15:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 93.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:30:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 88.75
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:45:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 90.62
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:00:00Z",
|
||||
"entryPerArea": {
|
||||
"NL": 82.6
|
||||
}
|
||||
}
|
||||
],
|
||||
"blockPriceAggregates": [
|
||||
{
|
||||
"blockName": "Off-peak 1",
|
||||
"deliveryStart": "2024-11-04T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T07:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"NL": {
|
||||
"average": 98.96,
|
||||
"min": 83.63,
|
||||
"max": 135.99
|
||||
"average": 97.54,
|
||||
"min": 75.01,
|
||||
"max": 172.01
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Peak",
|
||||
"deliveryStart": "2024-11-05T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T19:00:00Z",
|
||||
"deliveryStart": "2025-10-01T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"NL": {
|
||||
"average": 202.93,
|
||||
"min": 94.92,
|
||||
"max": 472.99
|
||||
"average": 120.76,
|
||||
"min": 54.35,
|
||||
"max": 408.5
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Off-peak 2",
|
||||
"deliveryStart": "2024-11-05T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T23:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"NL": {
|
||||
"average": 131.85,
|
||||
"min": 110.03,
|
||||
"max": 169.7
|
||||
"average": 110.71,
|
||||
"min": 82.6,
|
||||
"max": 217.5
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -223,7 +727,7 @@
|
||||
"areaAverages": [
|
||||
{
|
||||
"areaCode": "NL",
|
||||
"price": 156.43
|
||||
"price": 111.34
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -1,258 +1,834 @@
|
||||
{
|
||||
"deliveryDateCET": "2024-11-05",
|
||||
"deliveryDateCET": "2025-10-01",
|
||||
"version": 3,
|
||||
"updatedAt": "2024-11-04T12:15:03.9456464Z",
|
||||
"updatedAt": "2025-09-30T12:08:16.4448023Z",
|
||||
"deliveryAreas": ["SE3", "SE4"],
|
||||
"market": "DayAhead",
|
||||
"multiAreaEntries": [
|
||||
{
|
||||
"deliveryStart": "2024-11-04T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T00:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 250.73,
|
||||
"SE4": 283.79
|
||||
"SE3": 556.68,
|
||||
"SE4": 642.22
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T00:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T01:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:15:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 76.36,
|
||||
"SE4": 81.36
|
||||
"SE3": 519.88,
|
||||
"SE4": 600.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T01:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T02:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:30:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 73.92,
|
||||
"SE4": 79.15
|
||||
"SE3": 508.28,
|
||||
"SE4": 586.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T02:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T03:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:45:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 61.69,
|
||||
"SE4": 65.19
|
||||
"SE3": 509.93,
|
||||
"SE4": 589.62
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T03:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T04:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 64.6,
|
||||
"SE4": 68.44
|
||||
"SE3": 501.64,
|
||||
"SE4": 577.24
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T04:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T05:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:15:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 453.27,
|
||||
"SE4": 516.71
|
||||
"SE3": 509.05,
|
||||
"SE4": 585.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T05:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T06:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:30:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 996.28,
|
||||
"SE4": 1240.85
|
||||
"SE3": 491.03,
|
||||
"SE4": 567.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T06:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T07:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1406.14,
|
||||
"SE4": 1648.25
|
||||
"SE3": 442.07,
|
||||
"SE4": 517.45
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T08:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1346.54,
|
||||
"SE4": 1570.5
|
||||
"SE3": 504.08,
|
||||
"SE4": 580.55
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T08:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T09:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1150.28,
|
||||
"SE4": 1345.37
|
||||
"SE3": 504.85,
|
||||
"SE4": 581.55
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T09:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T10:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1031.32,
|
||||
"SE4": 1206.51
|
||||
"SE3": 504.3,
|
||||
"SE4": 580.78
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T10:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T11:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 927.37,
|
||||
"SE4": 1085.8
|
||||
"SE3": 506.29,
|
||||
"SE4": 583.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T11:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T12:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 925.05,
|
||||
"SE4": 1081.72
|
||||
"SE3": 442.07,
|
||||
"SE4": 515.46
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T12:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T13:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 949.49,
|
||||
"SE4": 1130.38
|
||||
"SE3": 441.96,
|
||||
"SE4": 517.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T13:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T14:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1042.03,
|
||||
"SE4": 1256.91
|
||||
"SE3": 442.07,
|
||||
"SE4": 516.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T14:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T15:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1258.89,
|
||||
"SE4": 1765.82
|
||||
"SE3": 442.07,
|
||||
"SE4": 516.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T15:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T16:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1816.45,
|
||||
"SE4": 2522.55
|
||||
"SE3": 441.96,
|
||||
"SE4": 517.34
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T16:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T17:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2512.65,
|
||||
"SE4": 3533.03
|
||||
"SE3": 483.3,
|
||||
"SE4": 559.11
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T17:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T18:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1819.83,
|
||||
"SE4": 2524.06
|
||||
"SE3": 484.29,
|
||||
"SE4": 559.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T18:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T19:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1011.77,
|
||||
"SE3": 574.7,
|
||||
"SE4": 659.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T03:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 543.31,
|
||||
"SE4": 631.95
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T03:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 578.01,
|
||||
"SE4": 671.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T03:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 774.96,
|
||||
"SE4": 893.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T03:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 787.0,
|
||||
"SE4": 909.79
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 902.38,
|
||||
"SE4": 1041.86
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1079.32,
|
||||
"SE4": 1254.17
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1222.67,
|
||||
"SE4": 1421.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T04:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1394.63,
|
||||
"SE4": 1623.08
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1529.36,
|
||||
"SE4": 1787.86
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1724.53,
|
||||
"SE4": 2015.75
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1809.96,
|
||||
"SE4": 2029.34
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T05:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1713.04,
|
||||
"SE4": 1920.15
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1925.9,
|
||||
"SE4": 2162.63
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1440.06,
|
||||
"SE4": 1614.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1183.32,
|
||||
"SE4": 1319.37
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T06:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 962.95,
|
||||
"SE4": 1068.71
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1402.04,
|
||||
"SE4": 1569.92
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1060.65,
|
||||
"SE4": 1178.46
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 949.13,
|
||||
"SE4": 1050.59
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T07:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 841.82,
|
||||
"SE4": 938.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1037.44,
|
||||
"SE4": 1141.44
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 950.13,
|
||||
"SE4": 1041.64
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 826.13,
|
||||
"SE4": 905.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T08:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 684.55,
|
||||
"SE4": 754.62
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 861.6,
|
||||
"SE4": 936.09
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 722.79,
|
||||
"SE4": 799.6
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 640.57,
|
||||
"SE4": 718.59
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T09:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 607.74,
|
||||
"SE4": 683.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 674.05,
|
||||
"SE4": 752.41
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 638.58,
|
||||
"SE4": 717.49
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 638.47,
|
||||
"SE4": 719.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T10:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 634.82,
|
||||
"SE4": 717.16
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 637.36,
|
||||
"SE4": 721.58
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 660.68,
|
||||
"SE4": 746.33
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 679.14,
|
||||
"SE4": 766.45
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T11:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 694.61,
|
||||
"SE4": 782.91
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 622.33,
|
||||
"SE4": 708.87
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 685.44,
|
||||
"SE4": 775.84
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 732.85,
|
||||
"SE4": 826.57
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T12:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 801.92,
|
||||
"SE4": 901.28
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 629.4,
|
||||
"SE4": 717.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 729.53,
|
||||
"SE4": 825.46
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 884.81,
|
||||
"SE4": 983.95
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T13:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 984.94,
|
||||
"SE4": 1089.71
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 615.26,
|
||||
"SE4": 703.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 902.94,
|
||||
"SE4": 1002.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1043.85,
|
||||
"SE4": 1158.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T14:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1075.12,
|
||||
"SE4": 1194.15
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 980.52,
|
||||
"SE4": 1089.38
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1162.66,
|
||||
"SE4": 1300.14
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1453.87,
|
||||
"SE4": 1628.6
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T15:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1955.96,
|
||||
"SE4": 2193.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1423.48,
|
||||
"SE4": 1623.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1900.04,
|
||||
"SE4": 2199.98
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2611.11,
|
||||
"SE4": 3031.08
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T16:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 3467.41,
|
||||
"SE4": 4029.51
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 3828.03,
|
||||
"SE4": 4442.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 3429.83,
|
||||
"SE4": 3982.21
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2934.38,
|
||||
"SE4": 3405.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T17:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2308.07,
|
||||
"SE4": 2677.64
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1997.96,
|
||||
"SE4": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T20:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 835.53,
|
||||
"SE4": 1112.57
|
||||
"SE3": 1424.03,
|
||||
"SE4": 1646.17
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T20:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T21:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 796.19,
|
||||
"SE4": 1051.69
|
||||
"SE3": 1216.81,
|
||||
"SE4": 1388.11
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T21:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T22:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 522.3,
|
||||
"SE4": 662.44
|
||||
"SE3": 1070.15,
|
||||
"SE4": 1204.65
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-05T22:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T23:00:00Z",
|
||||
"deliveryStart": "2025-10-01T19:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 289.14,
|
||||
"SE4": 349.21
|
||||
"SE3": 1218.14,
|
||||
"SE4": 1405.02
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1135.8,
|
||||
"SE4": 1309.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 959.96,
|
||||
"SE4": 1115.69
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T19:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 913.66,
|
||||
"SE4": 1064.52
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1001.63,
|
||||
"SE4": 1161.22
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 933.0,
|
||||
"SE4": 1083.08
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 874.53,
|
||||
"SE4": 1017.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T20:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 821.71,
|
||||
"SE4": 955.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 860.5,
|
||||
"SE4": 997.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 840.16,
|
||||
"SE4": 977.87
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 820.05,
|
||||
"SE4": 954.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-01T21:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 785.68,
|
||||
"SE4": 912.22
|
||||
}
|
||||
}
|
||||
],
|
||||
"blockPriceAggregates": [
|
||||
{
|
||||
"blockName": "Off-peak 1",
|
||||
"deliveryStart": "2024-11-04T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T07:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 422.87,
|
||||
"min": 61.69,
|
||||
"max": 1406.14
|
||||
"average": 745.93,
|
||||
"min": 441.96,
|
||||
"max": 1809.96
|
||||
},
|
||||
"SE4": {
|
||||
"average": 497.97,
|
||||
"min": 65.19,
|
||||
"max": 1648.25
|
||||
"average": 860.99,
|
||||
"min": 515.46,
|
||||
"max": 2029.34
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Peak",
|
||||
"deliveryStart": "2024-11-05T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T19:00:00Z",
|
||||
"deliveryStart": "2025-10-01T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 1315.97,
|
||||
"min": 925.05,
|
||||
"max": 2512.65
|
||||
"average": 1219.13,
|
||||
"min": 607.74,
|
||||
"max": 3828.03
|
||||
},
|
||||
"SE4": {
|
||||
"average": 1735.59,
|
||||
"min": 1081.72,
|
||||
"max": 3533.03
|
||||
"average": 1381.22,
|
||||
"min": 683.12,
|
||||
"max": 4442.74
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Off-peak 2",
|
||||
"deliveryStart": "2024-11-05T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-05T23:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 610.79,
|
||||
"min": 289.14,
|
||||
"max": 835.53
|
||||
"average": 1054.61,
|
||||
"min": 785.68,
|
||||
"max": 1997.96
|
||||
},
|
||||
"SE4": {
|
||||
"average": 793.98,
|
||||
"min": 349.21,
|
||||
"max": 1112.57
|
||||
"average": 1219.07,
|
||||
"min": 912.22,
|
||||
"max": 2312.16
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currency": "SEK",
|
||||
"exchangeRate": 11.6402,
|
||||
"exchangeRate": 11.05186,
|
||||
"areaStates": [
|
||||
{
|
||||
"state": "Final",
|
||||
@@ -262,11 +838,11 @@
|
||||
"areaAverages": [
|
||||
{
|
||||
"areaCode": "SE3",
|
||||
"price": 900.74
|
||||
"price": 1033.98
|
||||
},
|
||||
{
|
||||
"areaCode": "SE4",
|
||||
"price": 1166.12
|
||||
"price": 1180.78
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -1,258 +1,834 @@
|
||||
{
|
||||
"deliveryDateCET": "2024-11-06",
|
||||
"deliveryDateCET": "2025-10-02",
|
||||
"version": 3,
|
||||
"updatedAt": "2024-11-05T12:12:51.9853434Z",
|
||||
"updatedAt": "2025-10-01T11:25:06.1484362Z",
|
||||
"deliveryAreas": ["SE3", "SE4"],
|
||||
"market": "DayAhead",
|
||||
"multiAreaEntries": [
|
||||
{
|
||||
"deliveryStart": "2024-11-05T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T00:00:00Z",
|
||||
"deliveryStart": "2025-10-01T22:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 126.66,
|
||||
"SE4": 275.6
|
||||
"SE3": 933.22,
|
||||
"SE4": 1062.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T00:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T01:00:00Z",
|
||||
"deliveryStart": "2025-10-01T22:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 74.06,
|
||||
"SE4": 157.34
|
||||
"SE3": 854.22,
|
||||
"SE4": 971.95
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T01:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T02:00:00Z",
|
||||
"deliveryStart": "2025-10-01T22:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 78.38,
|
||||
"SE4": 165.62
|
||||
"SE3": 809.54,
|
||||
"SE4": 919.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T02:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T03:00:00Z",
|
||||
"deliveryStart": "2025-10-01T22:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T23:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 92.37,
|
||||
"SE4": 196.17
|
||||
"SE3": 811.74,
|
||||
"SE4": 922.63
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T03:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T04:00:00Z",
|
||||
"deliveryStart": "2025-10-01T23:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T23:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 99.14,
|
||||
"SE4": 190.58
|
||||
"SE3": 835.13,
|
||||
"SE4": 950.99
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T04:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T05:00:00Z",
|
||||
"deliveryStart": "2025-10-01T23:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T23:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 447.51,
|
||||
"SE4": 932.93
|
||||
"SE3": 828.85,
|
||||
"SE4": 942.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T05:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T06:00:00Z",
|
||||
"deliveryStart": "2025-10-01T23:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T23:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 641.47,
|
||||
"SE4": 1284.69
|
||||
"SE3": 796.63,
|
||||
"SE4": 903.54
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T06:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T07:00:00Z",
|
||||
"deliveryStart": "2025-10-01T23:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T00:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1820.5,
|
||||
"SE4": 2449.96
|
||||
"SE3": 706.7,
|
||||
"SE4": 799.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T08:00:00Z",
|
||||
"deliveryStart": "2025-10-02T00:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T00:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1723.0,
|
||||
"SE4": 2244.22
|
||||
"SE3": 695.23,
|
||||
"SE4": 786.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T08:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T09:00:00Z",
|
||||
"deliveryStart": "2025-10-02T00:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T00:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1298.57,
|
||||
"SE4": 1643.45
|
||||
"SE3": 695.12,
|
||||
"SE4": 783.83
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T09:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T10:00:00Z",
|
||||
"deliveryStart": "2025-10-02T00:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T00:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1099.25,
|
||||
"SE4": 1507.23
|
||||
"SE3": 684.86,
|
||||
"SE4": 771.8
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T10:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T11:00:00Z",
|
||||
"deliveryStart": "2025-10-02T00:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T01:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 903.31,
|
||||
"SE4": 1362.84
|
||||
"SE3": 673.05,
|
||||
"SE4": 758.78
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T11:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T12:00:00Z",
|
||||
"deliveryStart": "2025-10-02T01:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T01:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 959.99,
|
||||
"SE4": 1376.13
|
||||
"SE3": 695.01,
|
||||
"SE4": 791.22
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T12:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T13:00:00Z",
|
||||
"deliveryStart": "2025-10-02T01:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T01:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1186.61,
|
||||
"SE4": 1449.96
|
||||
"SE3": 693.35,
|
||||
"SE4": 789.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T13:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T14:00:00Z",
|
||||
"deliveryStart": "2025-10-02T01:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T01:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1307.67,
|
||||
"SE4": 1608.35
|
||||
"SE3": 702.4,
|
||||
"SE4": 799.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T14:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T15:00:00Z",
|
||||
"deliveryStart": "2025-10-02T01:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T02:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1385.46,
|
||||
"SE4": 2110.8
|
||||
"SE3": 749.4,
|
||||
"SE4": 853.45
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T15:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T16:00:00Z",
|
||||
"deliveryStart": "2025-10-02T02:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T02:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1366.8,
|
||||
"SE4": 3031.25
|
||||
"SE3": 796.85,
|
||||
"SE4": 907.4
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T16:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T17:00:00Z",
|
||||
"deliveryStart": "2025-10-02T02:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T02:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2366.57,
|
||||
"SE4": 5511.77
|
||||
"SE3": 811.19,
|
||||
"SE4": 924.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T17:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T18:00:00Z",
|
||||
"deliveryStart": "2025-10-02T02:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T02:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1481.92,
|
||||
"SE4": 3351.64
|
||||
"SE3": 803.8,
|
||||
"SE4": 916.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T18:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T19:00:00Z",
|
||||
"deliveryStart": "2025-10-02T02:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T03:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1082.69,
|
||||
"SE4": 2484.95
|
||||
"SE3": 839.11,
|
||||
"SE4": 953.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T20:00:00Z",
|
||||
"deliveryStart": "2025-10-02T03:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T03:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 716.82,
|
||||
"SE4": 1624.33
|
||||
"SE3": 825.2,
|
||||
"SE4": 943.15
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T20:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T21:00:00Z",
|
||||
"deliveryStart": "2025-10-02T03:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T03:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 583.16,
|
||||
"SE4": 1306.27
|
||||
"SE3": 838.78,
|
||||
"SE4": 958.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T21:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T22:00:00Z",
|
||||
"deliveryStart": "2025-10-02T03:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T03:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 523.09,
|
||||
"SE4": 1142.99
|
||||
"SE3": 906.19,
|
||||
"SE4": 1030.65
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-06T22:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T23:00:00Z",
|
||||
"deliveryStart": "2025-10-02T03:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T04:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 250.64,
|
||||
"SE4": 539.42
|
||||
"SE3": 1057.79,
|
||||
"SE4": 1195.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T04:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T04:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 912.15,
|
||||
"SE4": 1040.8
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T04:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T04:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1131.28,
|
||||
"SE4": 1283.43
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T04:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T04:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1294.68,
|
||||
"SE4": 1468.91
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T04:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T05:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1625.8,
|
||||
"SE4": 1845.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T05:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T05:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1649.31,
|
||||
"SE4": 1946.77
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T05:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T05:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1831.25,
|
||||
"SE4": 2182.34
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T05:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T05:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1743.31,
|
||||
"SE4": 2063.4
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T05:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T06:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1545.04,
|
||||
"SE4": 1803.33
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T06:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1783.47,
|
||||
"SE4": 2080.72
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T06:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T06:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1470.89,
|
||||
"SE4": 1675.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T06:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T06:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1191.08,
|
||||
"SE4": 1288.06
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T06:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T07:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1012.22,
|
||||
"SE4": 1112.19
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T07:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T07:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1278.69,
|
||||
"SE4": 1375.67
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T07:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T07:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1170.12,
|
||||
"SE4": 1258.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T07:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T07:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 937.09,
|
||||
"SE4": 1021.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T07:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T08:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 815.94,
|
||||
"SE4": 900.67
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T08:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T08:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1044.66,
|
||||
"SE4": 1135.25
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T08:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T08:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1020.61,
|
||||
"SE4": 1112.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T08:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T08:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 866.14,
|
||||
"SE4": 953.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T08:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T09:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 774.34,
|
||||
"SE4": 860.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T09:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T09:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 928.26,
|
||||
"SE4": 1020.39
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T09:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T09:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 834.47,
|
||||
"SE4": 922.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T09:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T09:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 712.33,
|
||||
"SE4": 794.64
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T09:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T10:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 646.46,
|
||||
"SE4": 725.9
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T10:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T10:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 692.91,
|
||||
"SE4": 773.9
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T10:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T10:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 627.59,
|
||||
"SE4": 706.59
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T10:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T10:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 630.02,
|
||||
"SE4": 708.14
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T10:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T11:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 625.94,
|
||||
"SE4": 703.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T11:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T11:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 563.38,
|
||||
"SE4": 635.76
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T11:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T11:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 588.42,
|
||||
"SE4": 663.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T11:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T11:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 597.03,
|
||||
"SE4": 672.83
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T11:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T12:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 608.61,
|
||||
"SE4": 685.19
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T12:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T12:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 599.24,
|
||||
"SE4": 676.91
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T12:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T12:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 649.77,
|
||||
"SE4": 729.54
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T12:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T12:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 728.22,
|
||||
"SE4": 821.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T12:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T13:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 803.91,
|
||||
"SE4": 909.06
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T13:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T13:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 594.38,
|
||||
"SE4": 679.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T13:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T13:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 738.48,
|
||||
"SE4": 825.09
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T13:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T13:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 873.53,
|
||||
"SE4": 962.02
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T13:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T14:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 994.57,
|
||||
"SE4": 1083.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T14:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T14:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 733.52,
|
||||
"SE4": 813.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T14:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T14:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 864.59,
|
||||
"SE4": 944.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T14:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T14:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1032.08,
|
||||
"SE4": 1113.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T14:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T15:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1153.01,
|
||||
"SE4": 1241.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T15:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T15:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1271.18,
|
||||
"SE4": 1017.41
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T15:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T15:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1375.23,
|
||||
"SE4": 1093.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T15:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T15:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1544.82,
|
||||
"SE4": 1244.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T15:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T16:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2412.17,
|
||||
"SE4": 1960.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T16:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T16:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1677.66,
|
||||
"SE4": 1334.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T16:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T16:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2010.55,
|
||||
"SE4": 1606.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T16:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T16:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2524.38,
|
||||
"SE4": 2013.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T16:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T17:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 3288.35,
|
||||
"SE4": 2617.73
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T17:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T17:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 3065.69,
|
||||
"SE4": 2472.19
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T17:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T17:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2824.72,
|
||||
"SE4": 2276.46
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T17:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T17:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2279.66,
|
||||
"SE4": 1835.44
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T17:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T18:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1723.78,
|
||||
"SE4": 1385.38
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T18:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1935.08,
|
||||
"SE4": 1532.57
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T18:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T18:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1568.54,
|
||||
"SE4": 1240.18
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T18:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T18:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1430.51,
|
||||
"SE4": 1115.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T18:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T19:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1377.66,
|
||||
"SE4": 1075.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T19:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T19:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1408.44,
|
||||
"SE4": 1108.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T19:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T19:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1326.79,
|
||||
"SE4": 1049.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T19:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T19:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1210.94,
|
||||
"SE4": 951.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T19:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T20:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1293.58,
|
||||
"SE4": 1026.79
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T20:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T20:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1385.71,
|
||||
"SE4": 1091.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T20:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T20:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1341.47,
|
||||
"SE4": 1104.13
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T20:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T20:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1284.98,
|
||||
"SE4": 1024.36
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T20:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T21:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1071.47,
|
||||
"SE4": 892.51
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T21:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T21:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1218.0,
|
||||
"SE4": 1123.99
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T21:15:00Z",
|
||||
"deliveryEnd": "2025-10-02T21:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1112.3,
|
||||
"SE4": 1001.63
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T21:30:00Z",
|
||||
"deliveryEnd": "2025-10-02T21:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 873.64,
|
||||
"SE4": 806.67
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-10-02T21:45:00Z",
|
||||
"deliveryEnd": "2025-10-02T22:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 646.9,
|
||||
"SE4": 591.84
|
||||
}
|
||||
}
|
||||
],
|
||||
"blockPriceAggregates": [
|
||||
{
|
||||
"blockName": "Off-peak 1",
|
||||
"deliveryStart": "2024-11-05T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T07:00:00Z",
|
||||
"deliveryStart": "2025-10-01T22:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T06:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 422.51,
|
||||
"min": 74.06,
|
||||
"max": 1820.5
|
||||
"average": 961.76,
|
||||
"min": 673.05,
|
||||
"max": 1831.25
|
||||
},
|
||||
"SE4": {
|
||||
"average": 706.61,
|
||||
"min": 157.34,
|
||||
"max": 2449.96
|
||||
"average": 1102.25,
|
||||
"min": 758.78,
|
||||
"max": 2182.34
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Peak",
|
||||
"deliveryStart": "2024-11-06T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T19:00:00Z",
|
||||
"deliveryStart": "2025-10-02T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T18:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 1346.82,
|
||||
"min": 903.31,
|
||||
"max": 2366.57
|
||||
"average": 1191.34,
|
||||
"min": 563.38,
|
||||
"max": 3288.35
|
||||
},
|
||||
"SE4": {
|
||||
"average": 2306.88,
|
||||
"min": 1362.84,
|
||||
"max": 5511.77
|
||||
"average": 1155.07,
|
||||
"min": 635.76,
|
||||
"max": 2617.73
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Off-peak 2",
|
||||
"deliveryStart": "2024-11-06T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-06T23:00:00Z",
|
||||
"deliveryStart": "2025-10-02T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-02T22:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 518.43,
|
||||
"min": 250.64,
|
||||
"max": 716.82
|
||||
"average": 1280.38,
|
||||
"min": 646.9,
|
||||
"max": 1935.08
|
||||
},
|
||||
"SE4": {
|
||||
"average": 1153.25,
|
||||
"min": 539.42,
|
||||
"max": 1624.33
|
||||
"average": 1045.99,
|
||||
"min": 591.84,
|
||||
"max": 1532.57
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currency": "SEK",
|
||||
"exchangeRate": 11.66314,
|
||||
"exchangeRate": 11.03362,
|
||||
"areaStates": [
|
||||
{
|
||||
"state": "Final",
|
||||
@@ -262,11 +838,11 @@
|
||||
"areaAverages": [
|
||||
{
|
||||
"areaCode": "SE3",
|
||||
"price": 900.65
|
||||
"price": 1129.65
|
||||
},
|
||||
{
|
||||
"areaCode": "SE4",
|
||||
"price": 1581.19
|
||||
"price": 1119.28
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -1,258 +1,258 @@
|
||||
{
|
||||
"deliveryDateCET": "2024-11-04",
|
||||
"deliveryDateCET": "2025-09-30",
|
||||
"version": 3,
|
||||
"updatedAt": "2024-11-04T08:09:11.1931991Z",
|
||||
"updatedAt": "2025-09-29T11:17:12.3019385Z",
|
||||
"deliveryAreas": ["SE3", "SE4"],
|
||||
"market": "DayAhead",
|
||||
"multiAreaEntries": [
|
||||
{
|
||||
"deliveryStart": "2024-11-03T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T00:00:00Z",
|
||||
"deliveryStart": "2025-09-29T22:00:00Z",
|
||||
"deliveryEnd": "2025-09-29T23:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 66.13,
|
||||
"SE4": 78.59
|
||||
"SE3": 278.63,
|
||||
"SE4": 354.65
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T00:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T01:00:00Z",
|
||||
"deliveryStart": "2025-09-29T23:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T00:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 72.54,
|
||||
"SE4": 86.51
|
||||
"SE3": 261.85,
|
||||
"SE4": 336.89
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T01:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T02:00:00Z",
|
||||
"deliveryStart": "2025-09-30T00:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T01:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 73.12,
|
||||
"SE4": 84.88
|
||||
"SE3": 242.43,
|
||||
"SE4": 313.16
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T02:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T03:00:00Z",
|
||||
"deliveryStart": "2025-09-30T01:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T02:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 171.97,
|
||||
"SE4": 217.26
|
||||
"SE3": 322.65,
|
||||
"SE4": 401.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T03:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T04:00:00Z",
|
||||
"deliveryStart": "2025-09-30T02:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T03:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 181.05,
|
||||
"SE4": 227.74
|
||||
"SE3": 243.2,
|
||||
"SE4": 311.51
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T04:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T05:00:00Z",
|
||||
"deliveryStart": "2025-09-30T03:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T04:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 360.71,
|
||||
"SE4": 414.61
|
||||
"SE3": 596.53,
|
||||
"SE4": 695.52
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T05:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T06:00:00Z",
|
||||
"deliveryStart": "2025-09-30T04:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T05:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 917.83,
|
||||
"SE4": 1439.33
|
||||
"SE3": 899.77,
|
||||
"SE4": 1047.52
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T06:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T07:00:00Z",
|
||||
"deliveryStart": "2025-09-30T05:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T06:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1426.17,
|
||||
"SE4": 1695.95
|
||||
"SE3": 1909.0,
|
||||
"SE4": 2247.98
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T08:00:00Z",
|
||||
"deliveryStart": "2025-09-30T06:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T07:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1350.96,
|
||||
"SE4": 1605.13
|
||||
"SE3": 1432.52,
|
||||
"SE4": 1681.24
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T08:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T09:00:00Z",
|
||||
"deliveryStart": "2025-09-30T07:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T08:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1195.06,
|
||||
"SE4": 1393.46
|
||||
"SE3": 1127.52,
|
||||
"SE4": 1304.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T09:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T10:00:00Z",
|
||||
"deliveryStart": "2025-09-30T08:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T09:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 992.35,
|
||||
"SE4": 1126.71
|
||||
"SE3": 966.75,
|
||||
"SE4": 1073.34
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T10:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T11:00:00Z",
|
||||
"deliveryStart": "2025-09-30T09:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T10:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 976.63,
|
||||
"SE4": 1107.97
|
||||
"SE3": 882.55,
|
||||
"SE4": 1003.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T11:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T12:00:00Z",
|
||||
"deliveryStart": "2025-09-30T10:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T11:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 952.76,
|
||||
"SE4": 1085.73
|
||||
"SE3": 841.72,
|
||||
"SE4": 947.44
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T12:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T13:00:00Z",
|
||||
"deliveryStart": "2025-09-30T11:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T12:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1029.37,
|
||||
"SE4": 1177.71
|
||||
"SE3": 821.53,
|
||||
"SE4": 927.24
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T13:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T14:00:00Z",
|
||||
"deliveryStart": "2025-09-30T12:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T13:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1043.35,
|
||||
"SE4": 1194.59
|
||||
"SE3": 864.35,
|
||||
"SE4": 970.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T14:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T15:00:00Z",
|
||||
"deliveryStart": "2025-09-30T13:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T14:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1359.57,
|
||||
"SE4": 1561.12
|
||||
"SE3": 931.88,
|
||||
"SE4": 1046.64
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T15:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T16:00:00Z",
|
||||
"deliveryStart": "2025-09-30T14:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T15:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1848.35,
|
||||
"SE4": 2145.84
|
||||
"SE3": 1039.13,
|
||||
"SE4": 1165.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T16:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T17:00:00Z",
|
||||
"deliveryStart": "2025-09-30T15:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T16:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2812.53,
|
||||
"SE4": 3313.53
|
||||
"SE3": 1296.57,
|
||||
"SE4": 1520.91
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T17:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T18:00:00Z",
|
||||
"deliveryStart": "2025-09-30T16:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T17:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 2351.69,
|
||||
"SE4": 2751.87
|
||||
"SE3": 2652.18,
|
||||
"SE4": 3083.2
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T18:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T19:00:00Z",
|
||||
"deliveryStart": "2025-09-30T17:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T18:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1553.08,
|
||||
"SE4": 1842.77
|
||||
"SE3": 2135.98,
|
||||
"SE4": 2552.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T20:00:00Z",
|
||||
"deliveryStart": "2025-09-30T18:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T19:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1165.02,
|
||||
"SE4": 1398.35
|
||||
"SE3": 1109.76,
|
||||
"SE4": 1305.73
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T20:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T21:00:00Z",
|
||||
"deliveryStart": "2025-09-30T19:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T20:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 1007.48,
|
||||
"SE4": 1172.35
|
||||
"SE3": 973.81,
|
||||
"SE4": 1130.83
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T21:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T22:00:00Z",
|
||||
"deliveryStart": "2025-09-30T20:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T21:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 792.09,
|
||||
"SE4": 920.28
|
||||
"SE3": 872.18,
|
||||
"SE4": 1019.05
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2024-11-04T22:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T23:00:00Z",
|
||||
"deliveryStart": "2025-09-30T21:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 465.38,
|
||||
"SE4": 528.83
|
||||
"SE3": 697.17,
|
||||
"SE4": 812.37
|
||||
}
|
||||
}
|
||||
],
|
||||
"blockPriceAggregates": [
|
||||
{
|
||||
"blockName": "Off-peak 1",
|
||||
"deliveryStart": "2024-11-03T23:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T07:00:00Z",
|
||||
"deliveryStart": "2025-09-29T22:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T06:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 408.69,
|
||||
"min": 66.13,
|
||||
"max": 1426.17
|
||||
"average": 594.26,
|
||||
"min": 242.43,
|
||||
"max": 1909.0
|
||||
},
|
||||
"SE4": {
|
||||
"average": 530.61,
|
||||
"min": 78.59,
|
||||
"max": 1695.95
|
||||
"average": 713.53,
|
||||
"min": 311.51,
|
||||
"max": 2247.98
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Peak",
|
||||
"deliveryStart": "2024-11-04T07:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T19:00:00Z",
|
||||
"deliveryStart": "2025-09-30T06:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T18:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 1455.48,
|
||||
"min": 952.76,
|
||||
"max": 2812.53
|
||||
"average": 1249.39,
|
||||
"min": 821.53,
|
||||
"max": 2652.18
|
||||
},
|
||||
"SE4": {
|
||||
"average": 1692.2,
|
||||
"min": 1085.73,
|
||||
"max": 3313.53
|
||||
"average": 1439.73,
|
||||
"min": 927.24,
|
||||
"max": 3083.2
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"blockName": "Off-peak 2",
|
||||
"deliveryStart": "2024-11-04T19:00:00Z",
|
||||
"deliveryEnd": "2024-11-04T23:00:00Z",
|
||||
"deliveryStart": "2025-09-30T18:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:00:00Z",
|
||||
"averagePricePerArea": {
|
||||
"SE3": {
|
||||
"average": 857.49,
|
||||
"min": 465.38,
|
||||
"max": 1165.02
|
||||
"average": 913.23,
|
||||
"min": 697.17,
|
||||
"max": 1109.76
|
||||
},
|
||||
"SE4": {
|
||||
"average": 1004.95,
|
||||
"min": 528.83,
|
||||
"max": 1398.35
|
||||
"average": 1067.0,
|
||||
"min": 812.37,
|
||||
"max": 1305.73
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currency": "SEK",
|
||||
"exchangeRate": 11.64318,
|
||||
"exchangeRate": 11.03467,
|
||||
"areaStates": [
|
||||
{
|
||||
"state": "Final",
|
||||
@@ -262,11 +262,11 @@
|
||||
"areaAverages": [
|
||||
{
|
||||
"areaCode": "SE3",
|
||||
"price": 1006.88
|
||||
"price": 974.99
|
||||
},
|
||||
{
|
||||
"areaCode": "SE4",
|
||||
"price": 1190.46
|
||||
"price": 1135.54
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -1,688 +1,688 @@
|
||||
{
|
||||
"deliveryDateCET": "2025-07-06",
|
||||
"version": 2,
|
||||
"updatedAt": "2025-07-05T10:56:42.3755929Z",
|
||||
"deliveryDateCET": "2025-10-01",
|
||||
"version": 3,
|
||||
"updatedAt": "2025-09-30T12:08:18.4894194Z",
|
||||
"market": "DayAhead",
|
||||
"indexNames": ["SE3"],
|
||||
"currency": "SEK",
|
||||
"resolutionInMinutes": 15,
|
||||
"areaStates": [
|
||||
{
|
||||
"state": "Preliminary",
|
||||
"state": "Final",
|
||||
"areas": ["SE3"]
|
||||
}
|
||||
],
|
||||
"multiIndexEntries": [
|
||||
{
|
||||
"deliveryStart": "2025-07-05T22:00:00Z",
|
||||
"deliveryEnd": "2025-07-05T22:15:00Z",
|
||||
"deliveryStart": "2025-09-30T22:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 43.57
|
||||
"SE3": 556.68
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T22:15:00Z",
|
||||
"deliveryEnd": "2025-07-05T22:30:00Z",
|
||||
"deliveryStart": "2025-09-30T22:15:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 43.57
|
||||
"SE3": 519.88
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T22:30:00Z",
|
||||
"deliveryEnd": "2025-07-05T22:45:00Z",
|
||||
"deliveryStart": "2025-09-30T22:30:00Z",
|
||||
"deliveryEnd": "2025-09-30T22:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 43.57
|
||||
"SE3": 508.28
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T22:45:00Z",
|
||||
"deliveryEnd": "2025-07-05T23:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:45:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 43.57
|
||||
"SE3": 509.93
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T23:00:00Z",
|
||||
"deliveryEnd": "2025-07-05T23:15:00Z",
|
||||
"deliveryStart": "2025-09-30T23:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 36.47
|
||||
"SE3": 501.64
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T23:15:00Z",
|
||||
"deliveryEnd": "2025-07-05T23:30:00Z",
|
||||
"deliveryStart": "2025-09-30T23:15:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 36.47
|
||||
"SE3": 509.05
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T23:30:00Z",
|
||||
"deliveryEnd": "2025-07-05T23:45:00Z",
|
||||
"deliveryStart": "2025-09-30T23:30:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 36.47
|
||||
"SE3": 491.03
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T23:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T00:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 36.47
|
||||
"SE3": 442.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T00:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T00:15:00Z",
|
||||
"deliveryStart": "2025-10-01T00:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 35.57
|
||||
"SE3": 504.08
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T00:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T00:30:00Z",
|
||||
"deliveryStart": "2025-10-01T00:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 35.57
|
||||
"SE3": 504.85
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T00:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T00:45:00Z",
|
||||
"deliveryStart": "2025-10-01T00:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 35.57
|
||||
"SE3": 504.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T00:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T01:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 35.57
|
||||
"SE3": 506.29
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T01:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T01:15:00Z",
|
||||
"deliveryStart": "2025-10-01T01:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 30.73
|
||||
"SE3": 442.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T01:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T01:30:00Z",
|
||||
"deliveryStart": "2025-10-01T01:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 30.73
|
||||
"SE3": 441.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T01:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T01:45:00Z",
|
||||
"deliveryStart": "2025-10-01T01:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 30.73
|
||||
"SE3": 442.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T01:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T02:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 30.73
|
||||
"SE3": 442.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T02:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T02:15:00Z",
|
||||
"deliveryStart": "2025-10-01T02:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 32.42
|
||||
"SE3": 441.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T02:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T02:30:00Z",
|
||||
"deliveryStart": "2025-10-01T02:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 32.42
|
||||
"SE3": 483.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T02:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T02:45:00Z",
|
||||
"deliveryStart": "2025-10-01T02:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 32.42
|
||||
"SE3": 484.29
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T02:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T03:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 32.42
|
||||
"SE3": 574.7
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T03:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T03:15:00Z",
|
||||
"deliveryStart": "2025-10-01T03:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 38.73
|
||||
"SE3": 543.31
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T03:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T03:30:00Z",
|
||||
"deliveryStart": "2025-10-01T03:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 38.73
|
||||
"SE3": 578.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T03:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T03:45:00Z",
|
||||
"deliveryStart": "2025-10-01T03:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 38.73
|
||||
"SE3": 774.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T03:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T04:00:00Z",
|
||||
"deliveryStart": "2025-10-01T03:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 38.73
|
||||
"SE3": 787.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T04:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T04:15:00Z",
|
||||
"deliveryStart": "2025-10-01T04:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 42.78
|
||||
"SE3": 902.38
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T04:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T04:30:00Z",
|
||||
"deliveryStart": "2025-10-01T04:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 42.78
|
||||
"SE3": 1079.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T04:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T04:45:00Z",
|
||||
"deliveryStart": "2025-10-01T04:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 42.78
|
||||
"SE3": 1222.67
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T04:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T05:00:00Z",
|
||||
"deliveryStart": "2025-10-01T04:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 42.78
|
||||
"SE3": 1394.63
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T05:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T05:15:00Z",
|
||||
"deliveryStart": "2025-10-01T05:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 54.71
|
||||
"SE3": 1529.36
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T05:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T05:30:00Z",
|
||||
"deliveryStart": "2025-10-01T05:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 54.71
|
||||
"SE3": 1724.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T05:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T05:45:00Z",
|
||||
"deliveryStart": "2025-10-01T05:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 54.71
|
||||
"SE3": 1809.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T05:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T06:00:00Z",
|
||||
"deliveryStart": "2025-10-01T05:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 54.71
|
||||
"SE3": 1713.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T06:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T06:15:00Z",
|
||||
"deliveryStart": "2025-10-01T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 83.87
|
||||
"SE3": 1925.9
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T06:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T06:30:00Z",
|
||||
"deliveryStart": "2025-10-01T06:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 83.87
|
||||
"SE3": 1440.06
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T06:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T06:45:00Z",
|
||||
"deliveryStart": "2025-10-01T06:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 83.87
|
||||
"SE3": 1183.32
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T06:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T07:00:00Z",
|
||||
"deliveryStart": "2025-10-01T06:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 83.87
|
||||
"SE3": 962.95
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T07:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T07:15:00Z",
|
||||
"deliveryStart": "2025-10-01T07:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 78.8
|
||||
"SE3": 1402.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T07:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T07:30:00Z",
|
||||
"deliveryStart": "2025-10-01T07:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 78.8
|
||||
"SE3": 1060.65
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T07:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T07:45:00Z",
|
||||
"deliveryStart": "2025-10-01T07:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 78.8
|
||||
"SE3": 949.13
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T07:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T08:00:00Z",
|
||||
"deliveryStart": "2025-10-01T07:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 78.8
|
||||
"SE3": 841.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T08:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T08:15:00Z",
|
||||
"deliveryStart": "2025-10-01T08:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 92.09
|
||||
"SE3": 1037.44
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T08:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T08:30:00Z",
|
||||
"deliveryStart": "2025-10-01T08:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 92.09
|
||||
"SE3": 950.13
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T08:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T08:45:00Z",
|
||||
"deliveryStart": "2025-10-01T08:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 92.09
|
||||
"SE3": 826.13
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T08:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T09:00:00Z",
|
||||
"deliveryStart": "2025-10-01T08:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 92.09
|
||||
"SE3": 684.55
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T09:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T09:15:00Z",
|
||||
"deliveryStart": "2025-10-01T09:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 104.92
|
||||
"SE3": 861.6
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T09:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T09:30:00Z",
|
||||
"deliveryStart": "2025-10-01T09:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 104.92
|
||||
"SE3": 722.79
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T09:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T09:45:00Z",
|
||||
"deliveryStart": "2025-10-01T09:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 104.92
|
||||
"SE3": 640.57
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T09:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T10:00:00Z",
|
||||
"deliveryStart": "2025-10-01T09:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 104.92
|
||||
"SE3": 607.74
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T10:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T10:15:00Z",
|
||||
"deliveryStart": "2025-10-01T10:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 72.5
|
||||
"SE3": 674.05
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T10:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T10:30:00Z",
|
||||
"deliveryStart": "2025-10-01T10:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 72.5
|
||||
"SE3": 638.58
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T10:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T10:45:00Z",
|
||||
"deliveryStart": "2025-10-01T10:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 72.5
|
||||
"SE3": 638.47
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T10:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T11:00:00Z",
|
||||
"deliveryStart": "2025-10-01T10:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 72.5
|
||||
"SE3": 634.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T11:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T11:15:00Z",
|
||||
"deliveryStart": "2025-10-01T11:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 63.49
|
||||
"SE3": 637.36
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T11:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T11:30:00Z",
|
||||
"deliveryStart": "2025-10-01T11:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 63.49
|
||||
"SE3": 660.68
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T11:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T11:45:00Z",
|
||||
"deliveryStart": "2025-10-01T11:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 63.49
|
||||
"SE3": 679.14
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T11:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T12:00:00Z",
|
||||
"deliveryStart": "2025-10-01T11:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 63.49
|
||||
"SE3": 694.61
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T12:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T12:15:00Z",
|
||||
"deliveryStart": "2025-10-01T12:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 91.64
|
||||
"SE3": 622.33
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T12:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T12:30:00Z",
|
||||
"deliveryStart": "2025-10-01T12:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 91.64
|
||||
"SE3": 685.44
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T12:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T12:45:00Z",
|
||||
"deliveryStart": "2025-10-01T12:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 91.64
|
||||
"SE3": 732.85
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T12:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T13:00:00Z",
|
||||
"deliveryStart": "2025-10-01T12:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 91.64
|
||||
"SE3": 801.92
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T13:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T13:15:00Z",
|
||||
"deliveryStart": "2025-10-01T13:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 111.79
|
||||
"SE3": 629.4
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T13:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T13:30:00Z",
|
||||
"deliveryStart": "2025-10-01T13:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 111.79
|
||||
"SE3": 729.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T13:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T13:45:00Z",
|
||||
"deliveryStart": "2025-10-01T13:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 111.79
|
||||
"SE3": 884.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T13:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T14:00:00Z",
|
||||
"deliveryStart": "2025-10-01T13:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 111.79
|
||||
"SE3": 984.94
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T14:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T14:15:00Z",
|
||||
"deliveryStart": "2025-10-01T14:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 234.04
|
||||
"SE3": 615.26
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T14:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T14:30:00Z",
|
||||
"deliveryStart": "2025-10-01T14:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 234.04
|
||||
"SE3": 902.94
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T14:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T14:45:00Z",
|
||||
"deliveryStart": "2025-10-01T14:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 234.04
|
||||
"SE3": 1043.85
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T14:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T15:00:00Z",
|
||||
"deliveryStart": "2025-10-01T14:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 234.04
|
||||
"SE3": 1075.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T15:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T15:15:00Z",
|
||||
"deliveryStart": "2025-10-01T15:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 435.33
|
||||
"SE3": 980.52
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T15:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T15:30:00Z",
|
||||
"deliveryStart": "2025-10-01T15:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 435.33
|
||||
"SE3": 1162.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T15:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T15:45:00Z",
|
||||
"deliveryStart": "2025-10-01T15:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 435.33
|
||||
"SE3": 1453.87
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T15:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T16:00:00Z",
|
||||
"deliveryStart": "2025-10-01T15:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 435.33
|
||||
"SE3": 1955.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T16:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T16:15:00Z",
|
||||
"deliveryStart": "2025-10-01T16:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 431.84
|
||||
"SE3": 1423.48
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T16:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T16:30:00Z",
|
||||
"deliveryStart": "2025-10-01T16:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 431.84
|
||||
"SE3": 1900.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T16:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T16:45:00Z",
|
||||
"deliveryStart": "2025-10-01T16:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 431.84
|
||||
"SE3": 2611.11
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T16:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T17:00:00Z",
|
||||
"deliveryStart": "2025-10-01T16:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 431.84
|
||||
"SE3": 3467.41
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T17:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T17:15:00Z",
|
||||
"deliveryStart": "2025-10-01T17:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 423.73
|
||||
"SE3": 3828.03
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T17:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T17:30:00Z",
|
||||
"deliveryStart": "2025-10-01T17:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 423.73
|
||||
"SE3": 3429.83
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T17:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T17:45:00Z",
|
||||
"deliveryStart": "2025-10-01T17:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 423.73
|
||||
"SE3": 2934.38
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T17:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T18:00:00Z",
|
||||
"deliveryStart": "2025-10-01T17:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 423.73
|
||||
"SE3": 2308.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T18:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T18:15:00Z",
|
||||
"deliveryStart": "2025-10-01T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 437.92
|
||||
"SE3": 1997.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T18:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T18:30:00Z",
|
||||
"deliveryStart": "2025-10-01T18:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 437.92
|
||||
"SE3": 1424.03
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T18:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T18:45:00Z",
|
||||
"deliveryStart": "2025-10-01T18:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 437.92
|
||||
"SE3": 1216.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T18:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T19:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 437.92
|
||||
"SE3": 1070.15
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T19:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T19:15:00Z",
|
||||
"deliveryStart": "2025-10-01T19:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 416.42
|
||||
"SE3": 1218.14
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T19:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T19:30:00Z",
|
||||
"deliveryStart": "2025-10-01T19:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 416.42
|
||||
"SE3": 1135.8
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T19:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T19:45:00Z",
|
||||
"deliveryStart": "2025-10-01T19:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 416.42
|
||||
"SE3": 959.96
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T19:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T20:00:00Z",
|
||||
"deliveryStart": "2025-10-01T19:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 416.42
|
||||
"SE3": 913.66
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T20:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T20:15:00Z",
|
||||
"deliveryStart": "2025-10-01T20:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 414.39
|
||||
"SE3": 1001.63
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T20:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T20:30:00Z",
|
||||
"deliveryStart": "2025-10-01T20:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 414.39
|
||||
"SE3": 933.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T20:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T20:45:00Z",
|
||||
"deliveryStart": "2025-10-01T20:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 414.39
|
||||
"SE3": 874.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T20:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T21:00:00Z",
|
||||
"deliveryStart": "2025-10-01T20:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 414.39
|
||||
"SE3": 821.71
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T21:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T21:15:00Z",
|
||||
"deliveryStart": "2025-10-01T21:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:15:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 396.38
|
||||
"SE3": 860.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T21:15:00Z",
|
||||
"deliveryEnd": "2025-07-06T21:30:00Z",
|
||||
"deliveryStart": "2025-10-01T21:15:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:30:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 396.38
|
||||
"SE3": 840.16
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T21:30:00Z",
|
||||
"deliveryEnd": "2025-07-06T21:45:00Z",
|
||||
"deliveryStart": "2025-10-01T21:30:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:45:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 396.38
|
||||
"SE3": 820.05
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T21:45:00Z",
|
||||
"deliveryEnd": "2025-07-06T22:00:00Z",
|
||||
"deliveryStart": "2025-10-01T21:45:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 396.38
|
||||
"SE3": 785.68
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@@ -1,184 +1,184 @@
|
||||
{
|
||||
"deliveryDateCET": "2025-07-06",
|
||||
"version": 2,
|
||||
"updatedAt": "2025-07-05T10:56:44.6936838Z",
|
||||
"deliveryDateCET": "2025-10-01",
|
||||
"version": 3,
|
||||
"updatedAt": "2025-09-30T12:08:22.6180024Z",
|
||||
"market": "DayAhead",
|
||||
"indexNames": ["SE3"],
|
||||
"currency": "SEK",
|
||||
"resolutionInMinutes": 60,
|
||||
"areaStates": [
|
||||
{
|
||||
"state": "Preliminary",
|
||||
"state": "Final",
|
||||
"areas": ["SE3"]
|
||||
}
|
||||
],
|
||||
"multiIndexEntries": [
|
||||
{
|
||||
"deliveryStart": "2025-07-05T22:00:00Z",
|
||||
"deliveryEnd": "2025-07-05T23:00:00Z",
|
||||
"deliveryStart": "2025-09-30T22:00:00Z",
|
||||
"deliveryEnd": "2025-09-30T23:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 43.57
|
||||
"SE3": 523.75
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-05T23:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T00:00:00Z",
|
||||
"deliveryStart": "2025-09-30T23:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T00:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 36.47
|
||||
"SE3": 485.95
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T00:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T01:00:00Z",
|
||||
"deliveryStart": "2025-10-01T00:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T01:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 35.57
|
||||
"SE3": 504.85
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T01:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T02:00:00Z",
|
||||
"deliveryStart": "2025-10-01T01:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T02:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 30.73
|
||||
"SE3": 442.07
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T02:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T03:00:00Z",
|
||||
"deliveryStart": "2025-10-01T02:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T03:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 32.42
|
||||
"SE3": 496.12
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T03:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T04:00:00Z",
|
||||
"deliveryStart": "2025-10-01T03:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T04:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 38.73
|
||||
"SE3": 670.85
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T04:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T05:00:00Z",
|
||||
"deliveryStart": "2025-10-01T04:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T05:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 42.78
|
||||
"SE3": 1149.72
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T05:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T06:00:00Z",
|
||||
"deliveryStart": "2025-10-01T05:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T06:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 54.71
|
||||
"SE3": 1694.25
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T06:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T07:00:00Z",
|
||||
"deliveryStart": "2025-10-01T06:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T07:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 83.87
|
||||
"SE3": 1378.06
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T07:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T08:00:00Z",
|
||||
"deliveryStart": "2025-10-01T07:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T08:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 78.8
|
||||
"SE3": 1063.41
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T08:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T09:00:00Z",
|
||||
"deliveryStart": "2025-10-01T08:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T09:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 92.09
|
||||
"SE3": 874.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T09:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T10:00:00Z",
|
||||
"deliveryStart": "2025-10-01T09:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T10:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 104.92
|
||||
"SE3": 708.2
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T10:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T11:00:00Z",
|
||||
"deliveryStart": "2025-10-01T10:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T11:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 72.5
|
||||
"SE3": 646.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T11:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T12:00:00Z",
|
||||
"deliveryStart": "2025-10-01T11:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T12:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 63.49
|
||||
"SE3": 667.97
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T12:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T13:00:00Z",
|
||||
"deliveryStart": "2025-10-01T12:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T13:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 91.64
|
||||
"SE3": 710.63
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T13:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T14:00:00Z",
|
||||
"deliveryStart": "2025-10-01T13:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T14:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 111.79
|
||||
"SE3": 807.23
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T14:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T15:00:00Z",
|
||||
"deliveryStart": "2025-10-01T14:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T15:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 234.04
|
||||
"SE3": 909.35
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T15:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T16:00:00Z",
|
||||
"deliveryStart": "2025-10-01T15:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T16:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 435.33
|
||||
"SE3": 1388.22
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T16:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T17:00:00Z",
|
||||
"deliveryStart": "2025-10-01T16:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T17:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 431.84
|
||||
"SE3": 2350.51
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T17:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T18:00:00Z",
|
||||
"deliveryStart": "2025-10-01T17:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T18:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 423.73
|
||||
"SE3": 3125.13
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T18:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T19:00:00Z",
|
||||
"deliveryStart": "2025-10-01T18:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T19:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 437.92
|
||||
"SE3": 1427.24
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T19:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T20:00:00Z",
|
||||
"deliveryStart": "2025-10-01T19:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T20:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 416.42
|
||||
"SE3": 1056.89
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T20:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T21:00:00Z",
|
||||
"deliveryStart": "2025-10-01T20:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T21:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 414.39
|
||||
"SE3": 907.69
|
||||
}
|
||||
},
|
||||
{
|
||||
"deliveryStart": "2025-07-06T21:00:00Z",
|
||||
"deliveryEnd": "2025-07-06T22:00:00Z",
|
||||
"deliveryStart": "2025-10-01T21:00:00Z",
|
||||
"deliveryEnd": "2025-10-01T22:00:00Z",
|
||||
"entryPerArea": {
|
||||
"SE3": 396.38
|
||||
"SE3": 826.57
|
||||
}
|
||||
}
|
||||
]
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -99,7 +99,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.01177',
|
||||
'state': '1.99796',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_daily_average-entry]
|
||||
@@ -154,7 +154,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.90074',
|
||||
'state': '1.03398',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_exchange_rate-entry]
|
||||
@@ -205,7 +205,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '11.6402',
|
||||
'state': '11.05186',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_highest_price-entry]
|
||||
@@ -249,9 +249,9 @@
|
||||
# name: test_sensor[sensor.nord_pool_se3_highest_price-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'end': '2024-11-05T17:00:00+00:00',
|
||||
'end': '2025-10-01T17:15:00+00:00',
|
||||
'friendly_name': 'Nord Pool SE3 Highest price',
|
||||
'start': '2024-11-05T16:00:00+00:00',
|
||||
'start': '2025-10-01T17:00:00+00:00',
|
||||
'unit_of_measurement': 'SEK/kWh',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
@@ -259,7 +259,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2.51265',
|
||||
'state': '3.82803',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_last_updated-entry]
|
||||
@@ -308,7 +308,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-04T12:15:03+00:00',
|
||||
'state': '2025-09-30T12:08:16+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_lowest_price-entry]
|
||||
@@ -352,9 +352,9 @@
|
||||
# name: test_sensor[sensor.nord_pool_se3_lowest_price-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'end': '2024-11-05T03:00:00+00:00',
|
||||
'end': '2025-10-01T02:15:00+00:00',
|
||||
'friendly_name': 'Nord Pool SE3 Lowest price',
|
||||
'start': '2024-11-05T02:00:00+00:00',
|
||||
'start': '2025-10-01T02:00:00+00:00',
|
||||
'unit_of_measurement': 'SEK/kWh',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
@@ -362,7 +362,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.06169',
|
||||
'state': '0.44196',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_next_price-entry]
|
||||
@@ -414,7 +414,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.83553',
|
||||
'state': '1.21814',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_1_average-entry]
|
||||
@@ -469,7 +469,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.42287',
|
||||
'state': '0.74593',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_1_highest_price-entry]
|
||||
@@ -524,7 +524,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.40614',
|
||||
'state': '1.80996',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_1_lowest_price-entry]
|
||||
@@ -579,7 +579,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.06169',
|
||||
'state': '0.44196',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_1_time_from-entry]
|
||||
@@ -628,7 +628,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-04T23:00:00+00:00',
|
||||
'state': '2025-09-30T22:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_1_time_until-entry]
|
||||
@@ -677,7 +677,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T07:00:00+00:00',
|
||||
'state': '2025-10-01T06:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_2_average-entry]
|
||||
@@ -732,7 +732,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.61079',
|
||||
'state': '1.05461',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_2_highest_price-entry]
|
||||
@@ -787,7 +787,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.83553',
|
||||
'state': '1.99796',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_2_lowest_price-entry]
|
||||
@@ -842,7 +842,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.28914',
|
||||
'state': '0.78568',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_2_time_from-entry]
|
||||
@@ -891,7 +891,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T19:00:00+00:00',
|
||||
'state': '2025-10-01T18:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_off_peak_2_time_until-entry]
|
||||
@@ -940,7 +940,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T23:00:00+00:00',
|
||||
'state': '2025-10-01T22:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_peak_average-entry]
|
||||
@@ -995,7 +995,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.31597',
|
||||
'state': '1.21913',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_peak_highest_price-entry]
|
||||
@@ -1050,7 +1050,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2.51265',
|
||||
'state': '3.82803',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_peak_lowest_price-entry]
|
||||
@@ -1105,7 +1105,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.92505',
|
||||
'state': '0.60774',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_peak_time_from-entry]
|
||||
@@ -1154,7 +1154,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T07:00:00+00:00',
|
||||
'state': '2025-10-01T06:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_peak_time_until-entry]
|
||||
@@ -1203,7 +1203,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T19:00:00+00:00',
|
||||
'state': '2025-10-01T18:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se3_previous_price-entry]
|
||||
@@ -1255,7 +1255,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.81983',
|
||||
'state': '3.82803',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_currency-entry]
|
||||
@@ -1413,7 +1413,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.16612',
|
||||
'state': '1.18078',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_exchange_rate-entry]
|
||||
@@ -1464,7 +1464,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '11.6402',
|
||||
'state': '11.05186',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_highest_price-entry]
|
||||
@@ -1508,9 +1508,9 @@
|
||||
# name: test_sensor[sensor.nord_pool_se4_highest_price-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'end': '2024-11-05T17:00:00+00:00',
|
||||
'end': '2025-10-01T17:15:00+00:00',
|
||||
'friendly_name': 'Nord Pool SE4 Highest price',
|
||||
'start': '2024-11-05T16:00:00+00:00',
|
||||
'start': '2025-10-01T17:00:00+00:00',
|
||||
'unit_of_measurement': 'SEK/kWh',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
@@ -1518,7 +1518,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '3.53303',
|
||||
'state': '4.44274',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_last_updated-entry]
|
||||
@@ -1567,7 +1567,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-04T12:15:03+00:00',
|
||||
'state': '2025-09-30T12:08:16+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_lowest_price-entry]
|
||||
@@ -1611,9 +1611,9 @@
|
||||
# name: test_sensor[sensor.nord_pool_se4_lowest_price-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'end': '2024-11-05T19:00:00+00:00',
|
||||
'end': '2025-10-01T18:15:00+00:00',
|
||||
'friendly_name': 'Nord Pool SE4 Lowest price',
|
||||
'start': '2024-11-05T18:00:00+00:00',
|
||||
'start': '2025-10-01T18:00:00+00:00',
|
||||
'unit_of_measurement': 'SEK/kWh',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
@@ -1673,7 +1673,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.11257',
|
||||
'state': '1.40502',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_1_average-entry]
|
||||
@@ -1728,7 +1728,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.49797',
|
||||
'state': '0.86099',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_1_highest_price-entry]
|
||||
@@ -1783,7 +1783,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.64825',
|
||||
'state': '2.02934',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_1_lowest_price-entry]
|
||||
@@ -1838,7 +1838,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.06519',
|
||||
'state': '0.51546',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_1_time_from-entry]
|
||||
@@ -1887,7 +1887,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-04T23:00:00+00:00',
|
||||
'state': '2025-09-30T22:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_1_time_until-entry]
|
||||
@@ -1936,7 +1936,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T07:00:00+00:00',
|
||||
'state': '2025-10-01T06:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_2_average-entry]
|
||||
@@ -1991,7 +1991,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.79398',
|
||||
'state': '1.21907',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_2_highest_price-entry]
|
||||
@@ -2046,7 +2046,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.11257',
|
||||
'state': '2.31216',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_2_lowest_price-entry]
|
||||
@@ -2101,7 +2101,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.34921',
|
||||
'state': '0.91222',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_2_time_from-entry]
|
||||
@@ -2150,7 +2150,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T19:00:00+00:00',
|
||||
'state': '2025-10-01T18:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_off_peak_2_time_until-entry]
|
||||
@@ -2199,7 +2199,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T23:00:00+00:00',
|
||||
'state': '2025-10-01T22:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_peak_average-entry]
|
||||
@@ -2254,7 +2254,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.73559',
|
||||
'state': '1.38122',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_peak_highest_price-entry]
|
||||
@@ -2309,7 +2309,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '3.53303',
|
||||
'state': '4.44274',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_peak_lowest_price-entry]
|
||||
@@ -2364,7 +2364,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '1.08172',
|
||||
'state': '0.68312',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_peak_time_from-entry]
|
||||
@@ -2413,7 +2413,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T07:00:00+00:00',
|
||||
'state': '2025-10-01T06:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_peak_time_until-entry]
|
||||
@@ -2462,7 +2462,7 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2024-11-05T19:00:00+00:00',
|
||||
'state': '2025-10-01T18:00:00+00:00',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensor[sensor.nord_pool_se4_previous_price-entry]
|
||||
@@ -2514,6 +2514,6 @@
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '2.52406',
|
||||
'state': '4.44274',
|
||||
})
|
||||
# ---
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -26,7 +26,7 @@ from tests.common import MockConfigEntry
|
||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_form(hass: HomeAssistant, get_client: NordPoolClient) -> None:
|
||||
"""Test we get the form."""
|
||||
|
||||
@@ -48,7 +48,7 @@ async def test_form(hass: HomeAssistant, get_client: NordPoolClient) -> None:
|
||||
assert result["data"] == {"areas": ["SE3", "SE4"], "currency": "SEK"}
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_single_config_entry(
|
||||
hass: HomeAssistant, load_int: None, get_client: NordPoolClient
|
||||
) -> None:
|
||||
@@ -61,7 +61,7 @@ async def test_single_config_entry(
|
||||
assert result["reason"] == "single_instance_allowed"
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
@pytest.mark.parametrize(
|
||||
("error_message", "p_error"),
|
||||
[
|
||||
@@ -107,7 +107,7 @@ async def test_cannot_connect(
|
||||
assert result["data"] == {"areas": ["SE3", "SE4"], "currency": "SEK"}
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_reconfigure(
|
||||
hass: HomeAssistant,
|
||||
load_int: MockConfigEntry,
|
||||
@@ -134,7 +134,7 @@ async def test_reconfigure(
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
@pytest.mark.parametrize(
|
||||
("error_message", "p_error"),
|
||||
[
|
||||
|
@@ -31,7 +31,7 @@ from . import ENTRY_CONFIG
|
||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T10:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T10:00:00+00:00")
|
||||
async def test_coordinator(
|
||||
hass: HomeAssistant,
|
||||
get_client: NordPoolClient,
|
||||
@@ -50,7 +50,26 @@ async def test_coordinator(
|
||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "0.92737"
|
||||
assert state.state == "0.67405"
|
||||
|
||||
assert "Next data update at 2025-10-01 11:00:00+00:00" in caplog.text
|
||||
assert "Next listener update at 2025-10-01 10:15:00+00:00" in caplog.text
|
||||
|
||||
with (
|
||||
patch(
|
||||
"homeassistant.components.nordpool.coordinator.NordPoolClient.async_get_delivery_period",
|
||||
wraps=get_client.async_get_delivery_period,
|
||||
) as mock_data,
|
||||
):
|
||||
freezer.tick(timedelta(minutes=17))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert mock_data.call_count == 0
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "0.63858"
|
||||
|
||||
assert "Next data update at 2025-10-01 11:00:00+00:00" in caplog.text
|
||||
assert "Next listener update at 2025-10-01 10:30:00+00:00" in caplog.text
|
||||
|
||||
with (
|
||||
patch(
|
||||
@@ -63,7 +82,7 @@ async def test_coordinator(
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert mock_data.call_count == 1
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "0.92505"
|
||||
assert state.state == "0.66068"
|
||||
|
||||
with (
|
||||
patch(
|
||||
@@ -77,7 +96,7 @@ async def test_coordinator(
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert mock_data.call_count == 1
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "0.94949"
|
||||
assert state.state == "0.68544"
|
||||
assert "Authentication error" in caplog.text
|
||||
|
||||
with (
|
||||
@@ -93,7 +112,7 @@ async def test_coordinator(
|
||||
# Empty responses does not raise
|
||||
assert mock_data.call_count == 3
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "1.04203"
|
||||
assert state.state == "0.72953"
|
||||
assert "Empty response" in caplog.text
|
||||
|
||||
with (
|
||||
@@ -108,7 +127,7 @@ async def test_coordinator(
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert mock_data.call_count == 1
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "1.25889"
|
||||
assert state.state == "0.90294"
|
||||
assert "error" in caplog.text
|
||||
|
||||
with (
|
||||
@@ -123,7 +142,7 @@ async def test_coordinator(
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert mock_data.call_count == 1
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "1.81645"
|
||||
assert state.state == "1.16266"
|
||||
assert "error" in caplog.text
|
||||
|
||||
with (
|
||||
@@ -138,14 +157,14 @@ async def test_coordinator(
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert mock_data.call_count == 1
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "2.51265"
|
||||
assert state.state == "1.90004"
|
||||
assert "Response error" in caplog.text
|
||||
|
||||
freezer.tick(timedelta(hours=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "1.81983"
|
||||
assert state.state == "3.42983"
|
||||
|
||||
# Test manual polling
|
||||
hass.config_entries.async_update_entry(
|
||||
@@ -156,14 +175,14 @@ async def test_coordinator(
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "1.01177"
|
||||
assert state.state == "1.42403"
|
||||
|
||||
# Prices should update without any polling made (read from cache)
|
||||
freezer.tick(timedelta(hours=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "0.83553"
|
||||
assert state.state == "1.1358"
|
||||
|
||||
# Test manually updating the data
|
||||
with (
|
||||
@@ -184,7 +203,7 @@ async def test_coordinator(
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.nord_pool_se3_current_price")
|
||||
assert state.state == "0.79619"
|
||||
assert state.state == "0.933"
|
||||
|
||||
hass.config_entries.async_update_entry(
|
||||
entry=config_entry, pref_disable_polling=False
|
||||
|
@@ -12,7 +12,7 @@ from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||
from tests.typing import ClientSessionGenerator
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T10:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T10:00:00+00:00")
|
||||
async def test_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSessionGenerator,
|
||||
|
@@ -28,7 +28,7 @@ from tests.common import MockConfigEntry, async_load_fixture
|
||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T10:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T10:00:00+00:00")
|
||||
async def test_unload_entry(hass: HomeAssistant, get_client: NordPoolClient) -> None:
|
||||
"""Test load and unload an entry."""
|
||||
entry = MockConfigEntry(
|
||||
@@ -79,7 +79,7 @@ async def test_initial_startup_fails(
|
||||
assert entry.state is ConfigEntryState.SETUP_RETRY
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T10:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T10:00:00+00:00")
|
||||
async def test_reconfigure_cleans_up_device(
|
||||
hass: HomeAssistant,
|
||||
aioclient_mock: AiohttpClientMocker,
|
||||
@@ -115,7 +115,7 @@ async def test_reconfigure_cleans_up_device(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-04",
|
||||
"date": "2025-09-30",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "NL",
|
||||
"currency": "EUR",
|
||||
@@ -126,7 +126,7 @@ async def test_reconfigure_cleans_up_device(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-05",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "NL",
|
||||
"currency": "EUR",
|
||||
@@ -137,7 +137,7 @@ async def test_reconfigure_cleans_up_device(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-06",
|
||||
"date": "2025-10-02",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "NL",
|
||||
"currency": "EUR",
|
||||
|
@@ -20,7 +20,7 @@ from tests.common import async_fire_time_changed, snapshot_platform
|
||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
async def test_sensor(
|
||||
hass: HomeAssistant,
|
||||
@@ -33,7 +33,7 @@ async def test_sensor(
|
||||
await snapshot_platform(hass, entity_registry, snapshot, load_int.entry_id)
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
async def test_sensor_current_price_is_0(
|
||||
hass: HomeAssistant, load_int: ConfigEntry
|
||||
@@ -43,10 +43,10 @@ async def test_sensor_current_price_is_0(
|
||||
current_price = hass.states.get("sensor.nord_pool_se4_current_price")
|
||||
|
||||
assert current_price is not None
|
||||
assert current_price.state == "0.0" # SE4 2024-11-05T18:00:00Z
|
||||
assert current_price.state == "0.0" # SE4 2025-10-01T18:00:00Z
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T23:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T21:45:00+00:00")
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
async def test_sensor_no_next_price(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
||||
"""Test the Nord Pool sensor."""
|
||||
@@ -58,12 +58,12 @@ async def test_sensor_no_next_price(hass: HomeAssistant, load_int: ConfigEntry)
|
||||
assert current_price is not None
|
||||
assert last_price is not None
|
||||
assert next_price is not None
|
||||
assert current_price.state == "0.12666" # SE3 2024-11-05T23:00:00Z
|
||||
assert last_price.state == "0.28914" # SE3 2024-11-05T22:00:00Z
|
||||
assert next_price.state == "0.07406" # SE3 2024-11-06T00:00:00Z"
|
||||
assert current_price.state == "0.78568" # SE3 2025-10-01T21:45:00Z
|
||||
assert last_price.state == "0.82171" # SE3 2025-10-01T21:30:00Z
|
||||
assert next_price.state == "0.81174" # SE3 2025-10-01T22:00:00Z
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-06T00:00:00+01:00")
|
||||
@pytest.mark.freeze_time("2025-10-02T00:00:00+02:00")
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
async def test_sensor_no_previous_price(
|
||||
hass: HomeAssistant, load_int: ConfigEntry
|
||||
@@ -77,12 +77,12 @@ async def test_sensor_no_previous_price(
|
||||
assert current_price is not None
|
||||
assert last_price is not None
|
||||
assert next_price is not None
|
||||
assert current_price.state == "0.12666" # SE3 2024-11-05T23:00:00Z
|
||||
assert last_price.state == "0.28914" # SE3 2024-11-05T22:00:00Z
|
||||
assert next_price.state == "0.07406" # SE3 2024-11-06T00:00:00Z
|
||||
assert current_price.state == "0.93322" # SE3 2025-10-01T22:00:00Z
|
||||
assert last_price.state == "0.8605" # SE3 2025-10-01T21:45:00Z
|
||||
assert next_price.state == "0.83513" # SE3 2025-10-01T22:15:00Z
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T11:00:01+01:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T11:00:01+01:00")
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
async def test_sensor_empty_response(
|
||||
hass: HomeAssistant,
|
||||
@@ -101,16 +101,16 @@ async def test_sensor_empty_response(
|
||||
assert current_price is not None
|
||||
assert last_price is not None
|
||||
assert next_price is not None
|
||||
assert current_price.state == "0.92737"
|
||||
assert last_price.state == "1.03132"
|
||||
assert next_price.state == "0.92505"
|
||||
assert current_price.state == "0.67405"
|
||||
assert last_price.state == "0.8616"
|
||||
assert next_price.state == "0.63736"
|
||||
|
||||
aioclient_mock.clear_requests()
|
||||
aioclient_mock.request(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-04",
|
||||
"date": "2025-09-30",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -121,7 +121,7 @@ async def test_sensor_empty_response(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-05",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -133,7 +133,7 @@ async def test_sensor_empty_response(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-06",
|
||||
"date": "2025-10-02",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -153,16 +153,16 @@ async def test_sensor_empty_response(
|
||||
assert current_price is not None
|
||||
assert last_price is not None
|
||||
assert next_price is not None
|
||||
assert current_price.state == "0.92505"
|
||||
assert last_price.state == "0.92737"
|
||||
assert next_price.state == "0.94949"
|
||||
assert current_price.state == "0.63736"
|
||||
assert last_price.state == "0.67405"
|
||||
assert next_price.state == "0.62233"
|
||||
|
||||
aioclient_mock.clear_requests()
|
||||
aioclient_mock.request(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-04",
|
||||
"date": "2025-09-30",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -173,7 +173,7 @@ async def test_sensor_empty_response(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-05",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -185,7 +185,7 @@ async def test_sensor_empty_response(
|
||||
"GET",
|
||||
url=API + "/DayAheadPrices",
|
||||
params={
|
||||
"date": "2024-11-06",
|
||||
"date": "2025-10-02",
|
||||
"market": "DayAhead",
|
||||
"deliveryArea": "SE3,SE4",
|
||||
"currency": "SEK",
|
||||
@@ -193,7 +193,7 @@ async def test_sensor_empty_response(
|
||||
status=HTTPStatus.NO_CONTENT,
|
||||
)
|
||||
|
||||
freezer.move_to("2024-11-05T22:00:01+00:00")
|
||||
freezer.move_to("2025-10-01T21:45:01+00:00")
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
|
||||
@@ -206,6 +206,6 @@ async def test_sensor_empty_response(
|
||||
assert current_price is not None
|
||||
assert last_price is not None
|
||||
assert next_price is not None
|
||||
assert current_price.state == "0.28914"
|
||||
assert last_price.state == "0.5223"
|
||||
assert current_price.state == "0.78568"
|
||||
assert last_price.state == "0.82171"
|
||||
assert next_price.state == STATE_UNKNOWN
|
||||
|
@@ -30,31 +30,31 @@ from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
TEST_SERVICE_DATA = {
|
||||
ATTR_CONFIG_ENTRY: "to_replace",
|
||||
ATTR_DATE: "2024-11-05",
|
||||
ATTR_DATE: "2025-10-01",
|
||||
ATTR_AREAS: "SE3",
|
||||
ATTR_CURRENCY: "EUR",
|
||||
}
|
||||
TEST_SERVICE_DATA_USE_DEFAULTS = {
|
||||
ATTR_CONFIG_ENTRY: "to_replace",
|
||||
ATTR_DATE: "2024-11-05",
|
||||
ATTR_DATE: "2025-10-01",
|
||||
}
|
||||
TEST_SERVICE_INDICES_DATA_60 = {
|
||||
ATTR_CONFIG_ENTRY: "to_replace",
|
||||
ATTR_DATE: "2025-07-06",
|
||||
ATTR_DATE: "2025-10-01",
|
||||
ATTR_AREAS: "SE3",
|
||||
ATTR_CURRENCY: "SEK",
|
||||
ATTR_RESOLUTION: 60,
|
||||
}
|
||||
TEST_SERVICE_INDICES_DATA_15 = {
|
||||
ATTR_CONFIG_ENTRY: "to_replace",
|
||||
ATTR_DATE: "2025-07-06",
|
||||
ATTR_DATE: "2025-10-01",
|
||||
ATTR_AREAS: "SE3",
|
||||
ATTR_CURRENCY: "SEK",
|
||||
ATTR_RESOLUTION: 15,
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_service_call(
|
||||
hass: HomeAssistant,
|
||||
load_int: MockConfigEntry,
|
||||
@@ -96,7 +96,7 @@ async def test_service_call(
|
||||
(NordPoolError, "connection_error"),
|
||||
],
|
||||
)
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_service_call_failures(
|
||||
hass: HomeAssistant,
|
||||
load_int: MockConfigEntry,
|
||||
@@ -124,7 +124,7 @@ async def test_service_call_failures(
|
||||
assert err.value.translation_key == key
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_empty_response_returns_empty_list(
|
||||
hass: HomeAssistant,
|
||||
load_int: MockConfigEntry,
|
||||
@@ -151,7 +151,7 @@ async def test_empty_response_returns_empty_list(
|
||||
assert response == snapshot
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_service_call_config_entry_bad_state(
|
||||
hass: HomeAssistant,
|
||||
load_int: MockConfigEntry,
|
||||
@@ -184,7 +184,7 @@ async def test_service_call_config_entry_bad_state(
|
||||
assert err.value.translation_key == "entry_not_loaded"
|
||||
|
||||
|
||||
@pytest.mark.freeze_time("2024-11-05T18:00:00+00:00")
|
||||
@pytest.mark.freeze_time("2025-10-01T18:00:00+00:00")
|
||||
async def test_service_call_for_price_indices(
|
||||
hass: HomeAssistant,
|
||||
load_int: MockConfigEntry,
|
||||
@@ -200,7 +200,7 @@ async def test_service_call_for_price_indices(
|
||||
"GET",
|
||||
url=API + "/DayAheadPriceIndices",
|
||||
params={
|
||||
"date": "2025-07-06",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"indexNames": "SE3",
|
||||
"currency": "SEK",
|
||||
@@ -213,7 +213,7 @@ async def test_service_call_for_price_indices(
|
||||
"GET",
|
||||
url=API + "/DayAheadPriceIndices",
|
||||
params={
|
||||
"date": "2025-07-06",
|
||||
"date": "2025-10-01",
|
||||
"market": "DayAhead",
|
||||
"indexNames": "SE3",
|
||||
"currency": "SEK",
|
||||
|
@@ -166,6 +166,7 @@ def mock_smartthings() -> Generator[AsyncMock]:
|
||||
"hw_q80r_soundbar",
|
||||
"gas_meter",
|
||||
"lumi",
|
||||
"tesla_powerwall",
|
||||
]
|
||||
)
|
||||
def device_fixture(
|
||||
|
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"components": {
|
||||
"charge": {
|
||||
"powerMeter": {
|
||||
"power": {
|
||||
"value": 0,
|
||||
"unit": "W",
|
||||
"timestamp": "2025-10-02T12:21:29.196Z"
|
||||
}
|
||||
},
|
||||
"powerConsumptionReport": {
|
||||
"powerConsumption": {
|
||||
"value": {
|
||||
"start": "2025-10-02T12:20:00Z",
|
||||
"end": "2025-10-02T12:25:00Z",
|
||||
"energy": 29765947,
|
||||
"deltaEnergy": 0
|
||||
},
|
||||
"timestamp": "2025-10-02T12:26:24.729Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
"discharge": {
|
||||
"powerMeter": {
|
||||
"power": {
|
||||
"value": 0,
|
||||
"unit": "W",
|
||||
"timestamp": "2025-10-02T11:41:20.556Z"
|
||||
}
|
||||
},
|
||||
"powerConsumptionReport": {
|
||||
"powerConsumption": {
|
||||
"value": {
|
||||
"start": "2025-10-02T12:20:00Z",
|
||||
"end": "2025-10-02T12:25:00Z",
|
||||
"energy": 27827062,
|
||||
"deltaEnergy": 0
|
||||
},
|
||||
"timestamp": "2025-10-02T12:26:24.729Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
"main": {
|
||||
"healthCheck": {
|
||||
"checkInterval": {
|
||||
"value": 60,
|
||||
"unit": "s",
|
||||
"data": {
|
||||
"deviceScheme": "UNTRACKED",
|
||||
"protocol": "cloud"
|
||||
},
|
||||
"timestamp": "2025-10-02T11:56:25.223Z"
|
||||
},
|
||||
"healthStatus": {
|
||||
"value": null
|
||||
},
|
||||
"DeviceWatch-Enroll": {
|
||||
"value": null
|
||||
},
|
||||
"DeviceWatch-DeviceStatus": {
|
||||
"value": "online",
|
||||
"data": {},
|
||||
"timestamp": "2025-10-02T11:56:25.223Z"
|
||||
}
|
||||
},
|
||||
"rivertalent14263.adaptiveEnergyUsageState": {
|
||||
"stormWatchEnabled": {
|
||||
"value": true,
|
||||
"timestamp": "2024-07-16T12:40:19.190Z"
|
||||
},
|
||||
"stormWatchActive": {
|
||||
"value": false,
|
||||
"timestamp": "2024-07-16T12:40:19.190Z"
|
||||
},
|
||||
"gridStatusSupport": {
|
||||
"value": true,
|
||||
"timestamp": "2024-07-16T12:40:19.190Z"
|
||||
},
|
||||
"stormWatchSupport": {
|
||||
"value": true,
|
||||
"timestamp": "2025-09-17T18:31:31.669Z"
|
||||
},
|
||||
"energyUsageState": {
|
||||
"value": null
|
||||
},
|
||||
"gridStatusStatus": {
|
||||
"value": "on-grid",
|
||||
"timestamp": "2025-09-17T18:31:31.669Z"
|
||||
}
|
||||
},
|
||||
"refresh": {},
|
||||
"battery": {
|
||||
"quantity": {
|
||||
"value": null
|
||||
},
|
||||
"battery": {
|
||||
"value": 35,
|
||||
"unit": "%",
|
||||
"timestamp": "2025-10-02T11:41:20.556Z"
|
||||
},
|
||||
"type": {
|
||||
"value": null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"deviceId": "d2595c45-df6e-41ac-a7af-8e275071c19b",
|
||||
"name": "UDHN-TESLA-ENERGY-BATTERY",
|
||||
"label": "Powerwall",
|
||||
"manufacturerName": "0AHI",
|
||||
"presentationId": "STES-1-PV-TESLA-ENERGY-BATTERY",
|
||||
"locationId": "d22d6401-6070-4928-8e7b-b724e2dbf425",
|
||||
"ownerId": "35445a41-3ae2-4bc0-6f51-31705de6b96f",
|
||||
"components": [
|
||||
{
|
||||
"id": "main",
|
||||
"label": "main",
|
||||
"capabilities": [
|
||||
{
|
||||
"id": "healthCheck",
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"id": "refresh",
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"id": "rivertalent14263.adaptiveEnergyUsageState",
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"id": "battery",
|
||||
"version": 1
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"name": "Battery",
|
||||
"categoryType": "manufacturer"
|
||||
}
|
||||
],
|
||||
"optional": false
|
||||
},
|
||||
{
|
||||
"id": "discharge",
|
||||
"label": "discharge",
|
||||
"capabilities": [
|
||||
{
|
||||
"id": "powerConsumptionReport",
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"id": "powerMeter",
|
||||
"version": 1
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"name": "Other",
|
||||
"categoryType": "manufacturer"
|
||||
}
|
||||
],
|
||||
"optional": false
|
||||
},
|
||||
{
|
||||
"id": "charge",
|
||||
"label": "charge",
|
||||
"capabilities": [
|
||||
{
|
||||
"id": "powerConsumptionReport",
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"id": "powerMeter",
|
||||
"version": 1
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"name": "Other",
|
||||
"categoryType": "manufacturer"
|
||||
}
|
||||
],
|
||||
"optional": false
|
||||
}
|
||||
],
|
||||
"createTime": "2024-07-16T12:40:18.632Z",
|
||||
"profile": {
|
||||
"id": "4f9998dc-e672-4baf-8521-5e9b853fc978"
|
||||
},
|
||||
"app": {
|
||||
"installedAppId": "e798c0a6-3e3b-4299-8463-438fc3f1e6b3",
|
||||
"externalId": "TESLABATTERY_1689188152863574",
|
||||
"profile": {
|
||||
"id": "4f9998dc-e672-4baf-8521-5e9b853fc978"
|
||||
}
|
||||
},
|
||||
"type": "ENDPOINT_APP",
|
||||
"restrictionTier": 0,
|
||||
"allowed": null,
|
||||
"executionContext": "CLOUD",
|
||||
"relationships": []
|
||||
}
|
||||
],
|
||||
"_links": {}
|
||||
}
|
@@ -1893,6 +1893,37 @@
|
||||
'via_device_id': None,
|
||||
})
|
||||
# ---
|
||||
# name: test_devices[tesla_powerwall]
|
||||
DeviceRegistryEntrySnapshot({
|
||||
'area_id': None,
|
||||
'config_entries': <ANY>,
|
||||
'config_entries_subentries': <ANY>,
|
||||
'configuration_url': 'https://account.smartthings.com',
|
||||
'connections': set({
|
||||
}),
|
||||
'disabled_by': None,
|
||||
'entry_type': None,
|
||||
'hw_version': None,
|
||||
'id': <ANY>,
|
||||
'identifiers': set({
|
||||
tuple(
|
||||
'smartthings',
|
||||
'd2595c45-df6e-41ac-a7af-8e275071c19b',
|
||||
),
|
||||
}),
|
||||
'labels': set({
|
||||
}),
|
||||
'manufacturer': None,
|
||||
'model': None,
|
||||
'model_id': None,
|
||||
'name': 'Powerwall',
|
||||
'name_by_user': None,
|
||||
'primary_config_entry': <ANY>,
|
||||
'serial_number': None,
|
||||
'sw_version': None,
|
||||
'via_device_id': None,
|
||||
})
|
||||
# ---
|
||||
# name: test_devices[tplink_p110]
|
||||
DeviceRegistryEntrySnapshot({
|
||||
'area_id': None,
|
||||
|
@@ -13969,6 +13969,56 @@
|
||||
'state': '20',
|
||||
})
|
||||
# ---
|
||||
# name: test_all_entities[tesla_powerwall][sensor.powerwall_battery-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': None,
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
|
||||
'entity_id': 'sensor.powerwall_battery',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
|
||||
'original_icon': None,
|
||||
'original_name': 'Battery',
|
||||
'platform': 'smartthings',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': None,
|
||||
'unique_id': 'd2595c45-df6e-41ac-a7af-8e275071c19b_main_battery_battery_battery',
|
||||
'unit_of_measurement': '%',
|
||||
})
|
||||
# ---
|
||||
# name: test_all_entities[tesla_powerwall][sensor.powerwall_battery-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'battery',
|
||||
'friendly_name': 'Powerwall Battery',
|
||||
'unit_of_measurement': '%',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.powerwall_battery',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '35',
|
||||
})
|
||||
# ---
|
||||
# name: test_all_entities[tplink_p110][sensor.spulmaschine_energy-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
|
@@ -147,17 +147,6 @@ def mock_multiple_device_responses(
|
||||
)
|
||||
|
||||
|
||||
def mock_air_purifier_400s_update_response(aioclient_mock: AiohttpClientMocker) -> None:
|
||||
"""Build a response for the Helpers.call_api method for air_purifier_400s with updated data."""
|
||||
|
||||
device_name = "Air Purifier 400s"
|
||||
for fixture in DEVICE_FIXTURES[device_name]:
|
||||
getattr(aioclient_mock, fixture[0])(
|
||||
f"https://smartapi.vesync.com{fixture[1]}",
|
||||
json=load_json_object_fixture("air-purifier-detail-updated.json", DOMAIN),
|
||||
)
|
||||
|
||||
|
||||
def mock_device_response(
|
||||
aioclient_mock: AiohttpClientMocker, device_name: str, override: Any
|
||||
) -> None:
|
||||
|
@@ -1,97 +0,0 @@
|
||||
"""Tests for the coordinator."""
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from freezegun.api import FrozenDateTimeFactory
|
||||
|
||||
from homeassistant.components.vesync.const import DOMAIN, UPDATE_INTERVAL
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, STATE_UNAVAILABLE
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .common import (
|
||||
mock_air_purifier_400s_update_response,
|
||||
mock_device_response,
|
||||
mock_multiple_device_responses,
|
||||
mock_outlet_energy_response,
|
||||
)
|
||||
|
||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
|
||||
async def test_entity_update(
|
||||
hass: HomeAssistant,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
aioclient_mock: AiohttpClientMocker,
|
||||
) -> None:
|
||||
"""Test Vesync coordinator data update.
|
||||
|
||||
This test sets up a single device `Air Purifier 400s` and then updates it via the coordinator.
|
||||
"""
|
||||
|
||||
config_data = {CONF_PASSWORD: "username", CONF_USERNAME: "password"}
|
||||
config_entry = MockConfigEntry(
|
||||
data=config_data,
|
||||
domain=DOMAIN,
|
||||
unique_id="vesync_unique_id_1",
|
||||
entry_id="1",
|
||||
)
|
||||
|
||||
mock_multiple_device_responses(aioclient_mock, ["Air Purifier 400s", "Outlet"])
|
||||
mock_outlet_energy_response(aioclient_mock, "Outlet")
|
||||
|
||||
expected_entities = [
|
||||
# From "Air Purifier 400s"
|
||||
"fan.air_purifier_400s",
|
||||
"sensor.air_purifier_400s_filter_lifetime",
|
||||
"sensor.air_purifier_400s_air_quality",
|
||||
"sensor.air_purifier_400s_pm2_5",
|
||||
# From Outlet
|
||||
"switch.outlet",
|
||||
"sensor.outlet_current_power",
|
||||
"sensor.outlet_energy_use_today",
|
||||
"sensor.outlet_energy_use_weekly",
|
||||
"sensor.outlet_energy_use_monthly",
|
||||
"sensor.outlet_energy_use_yearly",
|
||||
"sensor.outlet_current_voltage",
|
||||
]
|
||||
|
||||
config_entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert config_entry.state is ConfigEntryState.LOADED
|
||||
|
||||
for entity_id in expected_entities:
|
||||
assert hass.states.get(entity_id).state != STATE_UNAVAILABLE
|
||||
|
||||
assert hass.states.get("sensor.air_purifier_400s_pm2_5").state == "5"
|
||||
assert hass.states.get("sensor.air_purifier_400s_air_quality").state == "excellent"
|
||||
assert hass.states.get("sensor.outlet_current_voltage").state == "120.0"
|
||||
assert hass.states.get("sensor.outlet_energy_use_weekly").state == "0.0"
|
||||
|
||||
# Update the mock responses
|
||||
aioclient_mock.clear_requests()
|
||||
mock_air_purifier_400s_update_response(aioclient_mock)
|
||||
mock_device_response(aioclient_mock, "Outlet", {"voltage": 129})
|
||||
mock_outlet_energy_response(aioclient_mock, "Outlet", {"totalEnergy": 2.2})
|
||||
|
||||
freezer.tick(timedelta(seconds=UPDATE_INTERVAL))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done(True)
|
||||
|
||||
assert hass.states.get("sensor.air_purifier_400s_pm2_5").state == "15"
|
||||
assert hass.states.get("sensor.air_purifier_400s_air_quality").state == "good"
|
||||
assert hass.states.get("sensor.outlet_current_voltage").state == "129.0"
|
||||
assert hass.states.get("sensor.outlet_energy_use_weekly").state == "0.0"
|
||||
|
||||
# energy history only updates once every 6 hours.
|
||||
freezer.tick(timedelta(hours=6))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done(True)
|
||||
|
||||
assert hass.states.get("sensor.air_purifier_400s_pm2_5").state == "15"
|
||||
assert hass.states.get("sensor.air_purifier_400s_air_quality").state == "good"
|
||||
assert hass.states.get("sensor.outlet_current_voltage").state == "129.0"
|
||||
assert hass.states.get("sensor.outlet_energy_use_weekly").state == "2.2"
|
@@ -70,6 +70,11 @@ async def test_holiday_calendar_entity(
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# Binary sensor added to ensure same state for both entities
|
||||
state = hass.states.get("binary_sensor.workday_sensor")
|
||||
assert state is not None
|
||||
assert state.state == "on"
|
||||
|
||||
state = hass.states.get("calendar.workday_sensor_calendar")
|
||||
assert state is not None
|
||||
assert state.state == "on"
|
||||
@@ -78,6 +83,10 @@ async def test_holiday_calendar_entity(
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get("binary_sensor.workday_sensor")
|
||||
assert state is not None
|
||||
assert state.state == "off"
|
||||
|
||||
state = hass.states.get("calendar.workday_sensor_calendar")
|
||||
assert state is not None
|
||||
assert state.state == "off"
|
||||
|
@@ -160,7 +160,7 @@ def mock_detect_radio_type(
|
||||
|
||||
def com_port(device="/dev/ttyUSB1234") -> ListPortInfo:
|
||||
"""Mock of a serial port."""
|
||||
port = ListPortInfo("/dev/ttyUSB1234")
|
||||
port = ListPortInfo(device)
|
||||
port.serial_number = "1234"
|
||||
port.manufacturer = "Virtual serial port"
|
||||
port.device = device
|
||||
@@ -2102,7 +2102,7 @@ async def test_options_flow_defaults(
|
||||
assert result1["step_id"] == "prompt_migrate_or_reconfigure"
|
||||
result2 = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={"next_step_id": config_flow.OPTIONS_INTENT_RECONFIGURE},
|
||||
user_input={"next_step_id": config_flow.OptionsMigrationIntent.RECONFIGURE},
|
||||
)
|
||||
|
||||
# Current path is the default
|
||||
@@ -2180,8 +2180,8 @@ async def test_options_flow_defaults(
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result7["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result7["data"] == {}
|
||||
assert result7["type"] is FlowResultType.ABORT
|
||||
assert result7["reason"] == "reconfigure_successful"
|
||||
|
||||
# The updated entry contains correct settings
|
||||
assert entry.data == {
|
||||
@@ -2240,7 +2240,7 @@ async def test_options_flow_defaults_socket(hass: HomeAssistant) -> None:
|
||||
assert result1["step_id"] == "prompt_migrate_or_reconfigure"
|
||||
result2 = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={"next_step_id": config_flow.OPTIONS_INTENT_RECONFIGURE},
|
||||
user_input={"next_step_id": config_flow.OptionsMigrationIntent.RECONFIGURE},
|
||||
)
|
||||
|
||||
# Radio path must be manually entered
|
||||
@@ -2320,7 +2320,7 @@ async def test_options_flow_restarts_running_zha_if_cancelled(
|
||||
assert result1["step_id"] == "prompt_migrate_or_reconfigure"
|
||||
result2 = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={"next_step_id": config_flow.OPTIONS_INTENT_RECONFIGURE},
|
||||
user_input={"next_step_id": config_flow.OptionsMigrationIntent.RECONFIGURE},
|
||||
)
|
||||
|
||||
# Radio path must be manually entered
|
||||
@@ -2336,19 +2336,18 @@ async def test_options_flow_restarts_running_zha_if_cancelled(
|
||||
async_setup_entry.assert_called_once_with(hass, entry)
|
||||
|
||||
|
||||
@patch("serial.tools.list_ports.comports", MagicMock(return_value=[com_port()]))
|
||||
@patch("homeassistant.components.zha.async_setup_entry", AsyncMock(return_value=True))
|
||||
async def test_options_flow_migration_reset_old_adapter(
|
||||
hass: HomeAssistant, mock_app
|
||||
hass: HomeAssistant, backup, mock_app
|
||||
) -> None:
|
||||
"""Test options flow for migrating from an old radio."""
|
||||
"""Test options flow for migrating resets the old radio, not the new one."""
|
||||
|
||||
entry = MockConfigEntry(
|
||||
version=config_flow.ZhaConfigFlowHandler.VERSION,
|
||||
domain=DOMAIN,
|
||||
data={
|
||||
CONF_DEVICE: {
|
||||
CONF_DEVICE_PATH: "/dev/serial/by-id/old_radio",
|
||||
CONF_DEVICE_PATH: "/dev/ttyUSB_old",
|
||||
CONF_BAUDRATE: 12345,
|
||||
CONF_FLOW_CONTROL: None,
|
||||
},
|
||||
@@ -2366,39 +2365,158 @@ async def test_options_flow_migration_reset_old_adapter(
|
||||
with patch(
|
||||
"homeassistant.config_entries.ConfigEntries.async_unload", return_value=True
|
||||
):
|
||||
result1 = await hass.config_entries.options.async_configure(
|
||||
result_init = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"], user_input={}
|
||||
)
|
||||
|
||||
entry.mock_state(hass, ConfigEntryState.NOT_LOADED)
|
||||
|
||||
assert result1["step_id"] == "prompt_migrate_or_reconfigure"
|
||||
result2 = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={"next_step_id": config_flow.OPTIONS_INTENT_MIGRATE},
|
||||
assert result_init["step_id"] == "prompt_migrate_or_reconfigure"
|
||||
|
||||
with (
|
||||
patch(
|
||||
"homeassistant.components.zha.radio_manager.ZhaRadioManager.detect_radio_type",
|
||||
return_value=ProbeResult.RADIO_TYPE_DETECTED,
|
||||
),
|
||||
patch(
|
||||
"serial.tools.list_ports.comports",
|
||||
MagicMock(return_value=[com_port("/dev/ttyUSB_new")]),
|
||||
),
|
||||
patch(
|
||||
"homeassistant.components.zha.radio_manager.ZhaRadioManager._async_read_backups_from_database",
|
||||
return_value=[backup],
|
||||
),
|
||||
):
|
||||
result_migrate = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={"next_step_id": config_flow.OptionsMigrationIntent.MIGRATE},
|
||||
)
|
||||
|
||||
# Now we choose the new radio
|
||||
assert result_migrate["step_id"] == "choose_serial_port"
|
||||
|
||||
result_port = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={
|
||||
CONF_DEVICE_PATH: "/dev/ttyUSB_new - Some serial port, s/n: 1234 - Virtual serial port"
|
||||
},
|
||||
)
|
||||
|
||||
assert result_port["step_id"] == "choose_migration_strategy"
|
||||
|
||||
# A temporary radio manager is created to reset the old adapter
|
||||
mock_radio_manager = AsyncMock()
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.zha.config_flow.ZhaRadioManager",
|
||||
spec=ZhaRadioManager,
|
||||
side_effect=[mock_radio_manager],
|
||||
):
|
||||
result_strategy = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={
|
||||
"next_step_id": config_flow.MIGRATION_STRATEGY_RECOMMENDED,
|
||||
},
|
||||
)
|
||||
|
||||
# The old adapter is reset, not the new one
|
||||
assert mock_radio_manager.device_path == "/dev/ttyUSB_old"
|
||||
assert mock_radio_manager.async_reset_adapter.call_count == 1
|
||||
|
||||
assert result_strategy["type"] is FlowResultType.ABORT
|
||||
assert result_strategy["reason"] == "reconfigure_successful"
|
||||
|
||||
# The entry is updated
|
||||
assert entry.data["device"]["path"] == "/dev/ttyUSB_new"
|
||||
|
||||
|
||||
@patch("serial.tools.list_ports.comports", MagicMock(return_value=[com_port()]))
|
||||
@patch("homeassistant.components.zha.async_setup_entry", AsyncMock(return_value=True))
|
||||
async def test_options_flow_reconfigure_no_reset(
|
||||
hass: HomeAssistant, backup, mock_app
|
||||
) -> None:
|
||||
"""Test options flow for reconfiguring does not require the old adapter."""
|
||||
|
||||
entry = MockConfigEntry(
|
||||
version=config_flow.ZhaConfigFlowHandler.VERSION,
|
||||
domain=DOMAIN,
|
||||
data={
|
||||
CONF_DEVICE: {
|
||||
CONF_DEVICE_PATH: "/dev/ttyUSB_old",
|
||||
CONF_BAUDRATE: 12345,
|
||||
CONF_FLOW_CONTROL: None,
|
||||
},
|
||||
CONF_RADIO_TYPE: "znp",
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
# User must explicitly approve radio reset
|
||||
assert result2["step_id"] == "intent_migrate"
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
mock_app.reset_network_info = AsyncMock()
|
||||
flow = await hass.config_entries.options.async_init(entry.entry_id)
|
||||
|
||||
result3 = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={},
|
||||
)
|
||||
# ZHA gets unloaded
|
||||
with patch(
|
||||
"homeassistant.config_entries.ConfigEntries.async_unload", return_value=True
|
||||
):
|
||||
result_init = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"], user_input={}
|
||||
)
|
||||
|
||||
mock_app.reset_network_info.assert_awaited_once()
|
||||
entry.mock_state(hass, ConfigEntryState.NOT_LOADED)
|
||||
|
||||
# Now we can unplug the old radio
|
||||
assert result3["step_id"] == "instruct_unplug"
|
||||
assert result_init["step_id"] == "prompt_migrate_or_reconfigure"
|
||||
|
||||
# And move on to choosing the new radio
|
||||
result4 = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={},
|
||||
)
|
||||
assert result4["step_id"] == "choose_serial_port"
|
||||
with (
|
||||
patch(
|
||||
"homeassistant.components.zha.radio_manager.ZhaRadioManager.detect_radio_type",
|
||||
return_value=ProbeResult.RADIO_TYPE_DETECTED,
|
||||
),
|
||||
patch(
|
||||
"serial.tools.list_ports.comports",
|
||||
MagicMock(return_value=[com_port("/dev/ttyUSB_new")]),
|
||||
),
|
||||
patch(
|
||||
"homeassistant.components.zha.radio_manager.ZhaRadioManager._async_read_backups_from_database",
|
||||
return_value=[backup],
|
||||
),
|
||||
):
|
||||
result_reconfigure = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={"next_step_id": config_flow.OptionsMigrationIntent.RECONFIGURE},
|
||||
)
|
||||
|
||||
# Now we choose the new radio
|
||||
assert result_reconfigure["step_id"] == "choose_serial_port"
|
||||
|
||||
result_port = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={
|
||||
CONF_DEVICE_PATH: "/dev/ttyUSB_new - Some serial port, s/n: 1234 - Virtual serial port"
|
||||
},
|
||||
)
|
||||
|
||||
assert result_port["step_id"] == "choose_migration_strategy"
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.zha.config_flow.ZhaRadioManager"
|
||||
) as mock_radio_manager:
|
||||
result_strategy = await hass.config_entries.options.async_configure(
|
||||
flow["flow_id"],
|
||||
user_input={
|
||||
"next_step_id": config_flow.MIGRATION_STRATEGY_RECOMMENDED,
|
||||
},
|
||||
)
|
||||
|
||||
# A temp radio manager is never created
|
||||
assert mock_radio_manager.call_count == 0
|
||||
|
||||
assert result_strategy["type"] is FlowResultType.ABORT
|
||||
assert result_strategy["reason"] == "reconfigure_successful"
|
||||
|
||||
# The entry is updated
|
||||
assert entry.data["device"]["path"] == "/dev/ttyUSB_new"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
@@ -1168,7 +1168,7 @@ async def test_usb_discovery_migration_restore_driver_ready_timeout(
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("supervisor", "addon_not_installed", "addon_info")
|
||||
async def test_esphome_discovery(
|
||||
async def test_esphome_discovery_intent_custom(
|
||||
hass: HomeAssistant,
|
||||
install_addon: AsyncMock,
|
||||
set_addon_options: AsyncMock,
|
||||
@@ -1290,6 +1290,82 @@ async def test_esphome_discovery(
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("supervisor", "addon_installed", "addon_running", "addon_info")
|
||||
async def test_esphome_discovery_intent_recommended(
|
||||
hass: HomeAssistant,
|
||||
set_addon_options: AsyncMock,
|
||||
addon_options: dict,
|
||||
) -> None:
|
||||
"""Test ESPHome discovery success path."""
|
||||
addon_options.update(
|
||||
{
|
||||
CONF_ADDON_DEVICE: "/dev/ttyUSB0",
|
||||
CONF_ADDON_SOCKET: None,
|
||||
"s0_legacy_key": "new123",
|
||||
"s2_access_control_key": "new456",
|
||||
"s2_authenticated_key": "new789",
|
||||
"s2_unauthenticated_key": "new987",
|
||||
"lr_s2_access_control_key": "new654",
|
||||
"lr_s2_authenticated_key": "new321",
|
||||
}
|
||||
)
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_ESPHOME},
|
||||
data=ESPHOME_DISCOVERY_INFO,
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.MENU
|
||||
assert result["step_id"] == "installation_type"
|
||||
assert result["menu_options"] == ["intent_recommended", "intent_custom"]
|
||||
|
||||
with (
|
||||
patch(
|
||||
"homeassistant.components.zwave_js.async_setup", return_value=True
|
||||
) as mock_setup,
|
||||
patch(
|
||||
"homeassistant.components.zwave_js.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry,
|
||||
):
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"], {"next_step_id": "intent_recommended"}
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result["title"] == TITLE
|
||||
assert result["result"].unique_id == str(ESPHOME_DISCOVERY_INFO.zwave_home_id)
|
||||
assert result["data"] == {
|
||||
"url": "ws://host1:3001",
|
||||
"usb_path": None,
|
||||
"socket_path": "esphome://192.168.1.100:6053",
|
||||
"s0_legacy_key": "new123",
|
||||
"s2_access_control_key": "new456",
|
||||
"s2_authenticated_key": "new789",
|
||||
"s2_unauthenticated_key": "new987",
|
||||
"lr_s2_access_control_key": "new654",
|
||||
"lr_s2_authenticated_key": "new321",
|
||||
"use_addon": True,
|
||||
"integration_created_addon": False,
|
||||
}
|
||||
assert set_addon_options.call_args == call(
|
||||
"core_zwave_js",
|
||||
AddonsOptions(
|
||||
config={
|
||||
"socket": "esphome://192.168.1.100:6053",
|
||||
"s0_legacy_key": "new123",
|
||||
"s2_access_control_key": "new456",
|
||||
"s2_authenticated_key": "new789",
|
||||
"s2_unauthenticated_key": "new987",
|
||||
"lr_s2_access_control_key": "new654",
|
||||
"lr_s2_authenticated_key": "new321",
|
||||
}
|
||||
),
|
||||
)
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("supervisor", "addon_installed", "addon_info")
|
||||
async def test_esphome_discovery_already_configured(
|
||||
hass: HomeAssistant,
|
||||
@@ -1303,7 +1379,11 @@ async def test_esphome_discovery_already_configured(
|
||||
entry = MockConfigEntry(
|
||||
entry_id="mock-entry-id",
|
||||
domain=DOMAIN,
|
||||
data={CONF_SOCKET_PATH: "esphome://existing-device:6053"},
|
||||
data={
|
||||
CONF_SOCKET_PATH: "esphome://existing-device:6053",
|
||||
"use_addon": True,
|
||||
"integration_created_addon": True,
|
||||
},
|
||||
title=TITLE,
|
||||
unique_id="1234",
|
||||
)
|
||||
@@ -1333,6 +1413,117 @@ async def test_esphome_discovery_already_configured(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("supervisor", "addon_not_installed", "addon_info")
|
||||
async def test_esphome_discovery_usb_same_home_id(
|
||||
hass: HomeAssistant,
|
||||
install_addon: AsyncMock,
|
||||
set_addon_options: AsyncMock,
|
||||
start_addon: AsyncMock,
|
||||
) -> None:
|
||||
"""Test ESPHome discovery works if USB stick with same home ID is configured."""
|
||||
entry = MockConfigEntry(
|
||||
entry_id="mock-entry-id",
|
||||
domain=DOMAIN,
|
||||
data={
|
||||
CONF_USB_PATH: "/dev/ttyUSB0",
|
||||
"use_addon": True,
|
||||
"integration_created_addon": True,
|
||||
},
|
||||
title=TITLE,
|
||||
unique_id="1234",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_ESPHOME},
|
||||
data=ESPHOME_DISCOVERY_INFO,
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.MENU
|
||||
assert result["step_id"] == "installation_type"
|
||||
assert result["menu_options"] == ["intent_recommended", "intent_custom"]
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"], {"next_step_id": "intent_custom"}
|
||||
)
|
||||
|
||||
assert result["step_id"] == "install_addon"
|
||||
assert result["type"] is FlowResultType.SHOW_PROGRESS
|
||||
|
||||
# Make sure the flow continues when the progress task is done.
|
||||
await hass.async_block_till_done()
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(result["flow_id"])
|
||||
|
||||
assert install_addon.call_args == call("core_zwave_js")
|
||||
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "network_type"
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{
|
||||
"network_type": "existing",
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "configure_security_keys"
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{
|
||||
"s0_legacy_key": "new123",
|
||||
"s2_access_control_key": "new456",
|
||||
"s2_authenticated_key": "new789",
|
||||
"s2_unauthenticated_key": "new987",
|
||||
"lr_s2_access_control_key": "new654",
|
||||
"lr_s2_authenticated_key": "new321",
|
||||
},
|
||||
)
|
||||
|
||||
assert set_addon_options.call_args == call(
|
||||
"core_zwave_js",
|
||||
AddonsOptions(
|
||||
config={
|
||||
"socket": "esphome://192.168.1.100:6053",
|
||||
"s0_legacy_key": "new123",
|
||||
"s2_access_control_key": "new456",
|
||||
"s2_authenticated_key": "new789",
|
||||
"s2_unauthenticated_key": "new987",
|
||||
"lr_s2_access_control_key": "new654",
|
||||
"lr_s2_authenticated_key": "new321",
|
||||
}
|
||||
),
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.SHOW_PROGRESS
|
||||
assert result["step_id"] == "start_addon"
|
||||
|
||||
await hass.async_block_till_done()
|
||||
result = await hass.config_entries.flow.async_configure(result["flow_id"])
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert start_addon.call_args == call("core_zwave_js")
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "migration_successful"
|
||||
assert entry.data == {
|
||||
"url": "ws://host1:3001",
|
||||
"usb_path": None,
|
||||
"socket_path": "esphome://192.168.1.100:6053",
|
||||
"s0_legacy_key": "new123",
|
||||
"s2_access_control_key": "new456",
|
||||
"s2_authenticated_key": "new789",
|
||||
"s2_unauthenticated_key": "new987",
|
||||
"lr_s2_access_control_key": "new654",
|
||||
"lr_s2_authenticated_key": "new321",
|
||||
"use_addon": True,
|
||||
"integration_created_addon": True,
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("supervisor", "addon_installed")
|
||||
async def test_discovery_addon_not_running(
|
||||
hass: HomeAssistant,
|
||||
|
@@ -1073,6 +1073,16 @@ async def test_light_color_only(
|
||||
)
|
||||
await update_color(0, 0, 0)
|
||||
|
||||
# Turn off again and make sure last color/brightness is still preserved
|
||||
# when turning on light again in the next step
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: HSM200_V1_ENTITY},
|
||||
blocking=True,
|
||||
)
|
||||
await update_color(0, 0, 0)
|
||||
|
||||
client.async_send_command.reset_mock()
|
||||
|
||||
# Assert that the brightness is preserved when turning on with color
|
||||
@@ -1095,6 +1105,92 @@ async def test_light_color_only(
|
||||
|
||||
client.async_send_command.reset_mock()
|
||||
|
||||
await update_color(0, 0, 123)
|
||||
|
||||
# Turn off twice
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: HSM200_V1_ENTITY},
|
||||
blocking=True,
|
||||
)
|
||||
await update_color(0, 0, 0)
|
||||
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: HSM200_V1_ENTITY},
|
||||
blocking=True,
|
||||
)
|
||||
await update_color(0, 0, 0)
|
||||
|
||||
state = hass.states.get(HSM200_V1_ENTITY)
|
||||
assert state.state == STATE_OFF
|
||||
|
||||
client.async_send_command.reset_mock()
|
||||
|
||||
# Assert that turning on after successive off calls works and keeps the last color
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
SERVICE_TURN_ON,
|
||||
{ATTR_ENTITY_ID: HSM200_V1_ENTITY, ATTR_BRIGHTNESS: 150},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(client.async_send_command.call_args_list) == 1
|
||||
args = client.async_send_command.call_args_list[0][0][0]
|
||||
assert args["command"] == "node.set_value"
|
||||
assert args["nodeId"] == node.node_id
|
||||
assert args["valueId"] == {
|
||||
"commandClass": 51,
|
||||
"endpoint": 0,
|
||||
"property": "targetColor",
|
||||
}
|
||||
assert args["value"] == {"red": 0, "green": 0, "blue": 150}
|
||||
|
||||
client.async_send_command.reset_mock()
|
||||
|
||||
await update_color(0, 0, 150)
|
||||
|
||||
# Force the light to turn off
|
||||
await update_color(0, 0, 0)
|
||||
|
||||
# Turn off already off light, we won't be aware of last color and brightness
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: HSM200_V1_ENTITY},
|
||||
blocking=True,
|
||||
)
|
||||
await update_color(0, 0, 0)
|
||||
|
||||
state = hass.states.get(HSM200_V1_ENTITY)
|
||||
assert state.state == STATE_OFF
|
||||
|
||||
client.async_send_command.reset_mock()
|
||||
|
||||
# Assert that turning on light after off call with unknown off color/brightness state
|
||||
# works and that light turns on to white with specified brightness
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
SERVICE_TURN_ON,
|
||||
{ATTR_ENTITY_ID: HSM200_V1_ENTITY, ATTR_BRIGHTNESS: 160},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(client.async_send_command.call_args_list) == 1
|
||||
args = client.async_send_command.call_args_list[0][0][0]
|
||||
assert args["command"] == "node.set_value"
|
||||
assert args["nodeId"] == node.node_id
|
||||
assert args["valueId"] == {
|
||||
"commandClass": 51,
|
||||
"endpoint": 0,
|
||||
"property": "targetColor",
|
||||
}
|
||||
assert args["value"] == {"red": 160, "green": 160, "blue": 160}
|
||||
|
||||
client.async_send_command.reset_mock()
|
||||
|
||||
await update_color(160, 160, 160)
|
||||
|
||||
# Clear the color value to trigger an unknown state
|
||||
event = Event(
|
||||
type="value updated",
|
||||
|
Reference in New Issue
Block a user