diff --git a/.mega-linter.yml b/.mega-linter.yml index a89e987..207bcae 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -1,10 +1,13 @@ --- +FLAVOR_SUGGESTIONS: false ENABLE: - PYTHON - JSON - YAML - MARKDOWN - ACTION + - REPOSITORY + - SPELL DISABLE_LINTERS: - PYTHON_BLACK @@ -12,3 +15,4 @@ DISABLE_LINTERS: - PYTHON_ISORT - PYTHON_PYLINT - PYTHON_MYPY + - SPELL_CSPELL diff --git a/icons/icon.png b/custom_components/rce_pse/brand/icon.png similarity index 100% rename from icons/icon.png rename to custom_components/rce_pse/brand/icon.png diff --git a/icons/icon@2x.png b/custom_components/rce_pse/brand/icon@2x.png similarity index 100% rename from icons/icon@2x.png rename to custom_components/rce_pse/brand/icon@2x.png diff --git a/icons/logo.png b/custom_components/rce_pse/brand/logo.png similarity index 100% rename from icons/logo.png rename to custom_components/rce_pse/brand/logo.png diff --git a/icons/logo@2x.png b/custom_components/rce_pse/brand/logo@2x.png similarity index 100% rename from icons/logo@2x.png rename to custom_components/rce_pse/brand/logo@2x.png diff --git a/custom_components/rce_pse/sensors/custom_windows.py b/custom_components/rce_pse/sensors/custom_windows.py index ee5ea9a..3f2672b 100644 --- a/custom_components/rce_pse/sensors/custom_windows.py +++ b/custom_components/rce_pse/sensors/custom_windows.py @@ -56,7 +56,7 @@ def get_config_value(self, key: str, default: Any) -> Any: class RCETodayCheapestWindowStartTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "today_cheapest_window_start_timestamp") + super().__init__(coordinator, config_entry, "today_cheapest_window_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -90,7 +90,7 @@ def native_value(self) -> datetime | None: class RCETodayCheapestWindowEndTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "today_cheapest_window_end_timestamp") + super().__init__(coordinator, config_entry, "today_cheapest_window_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" @@ -124,7 +124,7 @@ def native_value(self) -> datetime | None: class RCETodayExpensiveWindowStartTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "today_expensive_window_start_timestamp") + super().__init__(coordinator, config_entry, "today_expensive_window_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -159,7 +159,7 @@ def native_value(self) -> datetime | None: class RCETodayExpensiveWindowEndTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "today_expensive_window_end_timestamp") + super().__init__(coordinator, config_entry, "today_expensive_window_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" @@ -193,7 +193,7 @@ def native_value(self) -> datetime | None: class RCETomorrowCheapestWindowStartTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "tomorrow_cheapest_window_start_timestamp") + super().__init__(coordinator, config_entry, "tomorrow_cheapest_window_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -228,7 +228,7 @@ def native_value(self) -> datetime | None: class RCETomorrowCheapestWindowEndTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "tomorrow_cheapest_window_end_timestamp") + super().__init__(coordinator, config_entry, "tomorrow_cheapest_window_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" @@ -262,7 +262,7 @@ def native_value(self) -> datetime | None: class RCETomorrowExpensiveWindowStartTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "tomorrow_expensive_window_start_timestamp") + super().__init__(coordinator, config_entry, "tomorrow_expensive_window_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -297,7 +297,7 @@ def native_value(self) -> datetime | None: class RCETomorrowExpensiveWindowEndTimestampSensor(RCECustomWindowSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, config_entry: ConfigEntry) -> None: - super().__init__(coordinator, config_entry, "tomorrow_expensive_window_end_timestamp") + super().__init__(coordinator, config_entry, "tomorrow_expensive_window_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" diff --git a/custom_components/rce_pse/sensors/today_hours.py b/custom_components/rce_pse/sensors/today_hours.py index 4ef7144..a967502 100644 --- a/custom_components/rce_pse/sensors/today_hours.py +++ b/custom_components/rce_pse/sensors/today_hours.py @@ -22,7 +22,7 @@ def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, unique_id: str) -> class RCETodayMaxPriceHourStartTimestampSensor(RCETodayHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "today_max_price_hour_start_timestamp") + super().__init__(coordinator, "today_max_price_hour_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -49,7 +49,7 @@ def native_value(self) -> datetime | None: class RCETodayMaxPriceHourEndTimestampSensor(RCETodayHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "today_max_price_hour_end_timestamp") + super().__init__(coordinator, "today_max_price_hour_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" @@ -76,7 +76,7 @@ def native_value(self) -> datetime | None: class RCETodayMinPriceHourStartTimestampSensor(RCETodayHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "today_min_price_hour_start_timestamp") + super().__init__(coordinator, "today_min_price_hour_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -103,7 +103,7 @@ def native_value(self) -> datetime | None: class RCETodayMinPriceHourEndTimestampSensor(RCETodayHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "today_min_price_hour_end_timestamp") + super().__init__(coordinator, "today_min_price_hour_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" diff --git a/custom_components/rce_pse/sensors/tomorrow_hours.py b/custom_components/rce_pse/sensors/tomorrow_hours.py index 437bcfe..22a1725 100644 --- a/custom_components/rce_pse/sensors/tomorrow_hours.py +++ b/custom_components/rce_pse/sensors/tomorrow_hours.py @@ -22,7 +22,7 @@ def __init__(self, coordinator: RCEPSEDataUpdateCoordinator, unique_id: str) -> class RCETomorrowMaxPriceHourStartTimestampSensor(RCETomorrowHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "tomorrow_max_price_hour_start_timestamp") + super().__init__(coordinator, "tomorrow_max_price_hour_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -49,7 +49,7 @@ def native_value(self) -> datetime | None: class RCETomorrowMaxPriceHourEndTimestampSensor(RCETomorrowHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "tomorrow_max_price_hour_end_timestamp") + super().__init__(coordinator, "tomorrow_max_price_hour_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" @@ -76,7 +76,7 @@ def native_value(self) -> datetime | None: class RCETomorrowMinPriceHourStartTimestampSensor(RCETomorrowHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "tomorrow_min_price_hour_start_timestamp") + super().__init__(coordinator, "tomorrow_min_price_hour_start") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-start" @@ -103,7 +103,7 @@ def native_value(self) -> datetime | None: class RCETomorrowMinPriceHourEndTimestampSensor(RCETomorrowHoursSensor): def __init__(self, coordinator: RCEPSEDataUpdateCoordinator) -> None: - super().__init__(coordinator, "tomorrow_min_price_hour_end_timestamp") + super().__init__(coordinator, "tomorrow_min_price_hour_end") self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_icon = "mdi:clock-end" diff --git a/custom_components/rce_pse/translations/en.json b/custom_components/rce_pse/translations/en.json index fbfd00f..fdfd7a2 100644 --- a/custom_components/rce_pse/translations/en.json +++ b/custom_components/rce_pse/translations/en.json @@ -123,52 +123,52 @@ "rce_pse_tomorrow_vs_today_avg": { "name": "Tomorrow vs Today Average" }, - "rce_pse_today_cheapest_window_start_timestamp": { + "rce_pse_today_cheapest_window_start": { "name": "Cheapest Window Start Today" }, - "rce_pse_today_cheapest_window_end_timestamp": { + "rce_pse_today_cheapest_window_end": { "name": "Cheapest Window End Today" }, - "rce_pse_today_expensive_window_start_timestamp": { + "rce_pse_today_expensive_window_start": { "name": "Expensive Window Start Today" }, - "rce_pse_today_expensive_window_end_timestamp": { + "rce_pse_today_expensive_window_end": { "name": "Expensive Window End Today" }, - "rce_pse_tomorrow_cheapest_window_start_timestamp": { + "rce_pse_tomorrow_cheapest_window_start": { "name": "Cheapest Window Start Tomorrow" }, - "rce_pse_tomorrow_cheapest_window_end_timestamp": { + "rce_pse_tomorrow_cheapest_window_end": { "name": "Cheapest Window End Tomorrow" }, - "rce_pse_tomorrow_expensive_window_start_timestamp": { + "rce_pse_tomorrow_expensive_window_start": { "name": "Expensive Window Start Tomorrow" }, - "rce_pse_tomorrow_expensive_window_end_timestamp": { + "rce_pse_tomorrow_expensive_window_end": { "name": "Expensive Window End Tomorrow" }, - "rce_pse_today_max_price_hour_start_timestamp": { + "rce_pse_today_max_price_hour_start": { "name": "Highest Price Start Today" }, - "rce_pse_today_max_price_hour_end_timestamp": { + "rce_pse_today_max_price_hour_end": { "name": "Highest Price End Today" }, - "rce_pse_today_min_price_hour_start_timestamp": { + "rce_pse_today_min_price_hour_start": { "name": "Lowest Price Start Today" }, - "rce_pse_today_min_price_hour_end_timestamp": { + "rce_pse_today_min_price_hour_end": { "name": "Lowest Price End Today" }, - "rce_pse_tomorrow_max_price_hour_start_timestamp": { + "rce_pse_tomorrow_max_price_hour_start": { "name": "Highest Price Start Tomorrow" }, - "rce_pse_tomorrow_max_price_hour_end_timestamp": { + "rce_pse_tomorrow_max_price_hour_end": { "name": "Highest Price End Tomorrow" }, - "rce_pse_tomorrow_min_price_hour_start_timestamp": { + "rce_pse_tomorrow_min_price_hour_start": { "name": "Lowest Price Start Tomorrow" }, - "rce_pse_tomorrow_min_price_hour_end_timestamp": { + "rce_pse_tomorrow_min_price_hour_end": { "name": "Lowest Price End Tomorrow" }, "rce_pse_today_peak_hours": { diff --git a/custom_components/rce_pse/translations/pl.json b/custom_components/rce_pse/translations/pl.json index bf3adee..73ba29f 100644 --- a/custom_components/rce_pse/translations/pl.json +++ b/custom_components/rce_pse/translations/pl.json @@ -123,52 +123,52 @@ "rce_pse_tomorrow_vs_today_avg": { "name": "Jutro vs Dzisiaj Średnia" }, - "rce_pse_today_cheapest_window_start_timestamp": { + "rce_pse_today_cheapest_window_start": { "name": "Początek Najtańszego Okna Dzisiaj" }, - "rce_pse_today_cheapest_window_end_timestamp": { + "rce_pse_today_cheapest_window_end": { "name": "Koniec Najtańszego Okna Dzisiaj" }, - "rce_pse_today_expensive_window_start_timestamp": { + "rce_pse_today_expensive_window_start": { "name": "Początek Najdroższego Okna Dzisiaj" }, - "rce_pse_today_expensive_window_end_timestamp": { + "rce_pse_today_expensive_window_end": { "name": "Koniec Najdroższego Okna Dzisiaj" }, - "rce_pse_tomorrow_cheapest_window_start_timestamp": { + "rce_pse_tomorrow_cheapest_window_start": { "name": "Początek Najtańszego Okna Jutro" }, - "rce_pse_tomorrow_cheapest_window_end_timestamp": { + "rce_pse_tomorrow_cheapest_window_end": { "name": "Koniec Najtańszego Okna Jutro" }, - "rce_pse_tomorrow_expensive_window_start_timestamp": { + "rce_pse_tomorrow_expensive_window_start": { "name": "Początek Najdroższego Okna Jutro" }, - "rce_pse_tomorrow_expensive_window_end_timestamp": { + "rce_pse_tomorrow_expensive_window_end": { "name": "Koniec Najdroższego Okna Jutro" }, - "rce_pse_today_max_price_hour_start_timestamp": { + "rce_pse_today_max_price_hour_start": { "name": "Początek Najwyższej Ceny Dzisiaj" }, - "rce_pse_today_max_price_hour_end_timestamp": { + "rce_pse_today_max_price_hour_end": { "name": "Koniec Najwyższej Ceny Dzisiaj" }, - "rce_pse_today_min_price_hour_start_timestamp": { + "rce_pse_today_min_price_hour_start": { "name": "Początek Najniższej Ceny Dzisiaj" }, - "rce_pse_today_min_price_hour_end_timestamp": { + "rce_pse_today_min_price_hour_end": { "name": "Koniec Najniższej Ceny Dzisiaj" }, - "rce_pse_tomorrow_max_price_hour_start_timestamp": { + "rce_pse_tomorrow_max_price_hour_start": { "name": "Początek Najwyższej Ceny Jutro" }, - "rce_pse_tomorrow_max_price_hour_end_timestamp": { + "rce_pse_tomorrow_max_price_hour_end": { "name": "Koniec Najwyższej Ceny Jutro" }, - "rce_pse_tomorrow_min_price_hour_start_timestamp": { + "rce_pse_tomorrow_min_price_hour_start": { "name": "Początek Najniższej Ceny Jutro" }, - "rce_pse_tomorrow_min_price_hour_end_timestamp": { + "rce_pse_tomorrow_min_price_hour_end": { "name": "Koniec Najniższej Ceny Jutro" }, "rce_pse_today_peak_hours": { diff --git a/docs/MIGRACJA-V2.md b/docs/MIGRACJA-V2.md index 4fc2885..aa37cc8 100644 --- a/docs/MIGRACJA-V2.md +++ b/docs/MIGRACJA-V2.md @@ -17,7 +17,7 @@ Poniżej: co usunięto, co zastąpić i jak zaktualizować automatyzacje oraz sz ## Usunięte sensory -### Sensory zakresów czasowych (zastąpienie: pary sensorów początek + koniec) +### Tekstowe sensory zakresów czasowych (można je zastąpić: pary sensorów początek + koniec) | entity_id | Nazwa EN | Nazwa PL | | ------------------------------------------------- | ------------------------------------ | ---------------------------------------- | @@ -40,24 +40,24 @@ Sensory o nazwach zawierających "Timestamp" zostały usunięte; używaj sensor Poniższe entity_id zwracają **timestamp** (datetime). To one zastępują dawne sensory tekstowe i te z "Timestamp" w nazwie: -| entity_id | Nazwa EN | Nazwa PL | -| ------------------------------------------------- | ---------------------------- | ------------------------------------- | -| `sensor.rce_pse_today_max_price_hour_start` | Highest Price Start Today | Początek Najwyższej Ceny Dzisiaj | -| `sensor.rce_pse_today_max_price_hour_end` | Highest Price End Today | Koniec Najwyższej Ceny Dzisiaj | -| `sensor.rce_pse_today_min_price_hour_start` | Lowest Price Start Today | Początek Najniższej Ceny Dzisiaj | -| `sensor.rce_pse_today_min_price_hour_end` | Lowest Price End Today | Koniec Najniższej Ceny Dzisiaj | -| `sensor.rce_pse_tomorrow_max_price_hour_start` | Highest Price Start Tomorrow | … jutro | -| `sensor.rce_pse_tomorrow_max_price_hour_end` | Highest Price End Tomorrow | … jutro | -| `sensor.rce_pse_tomorrow_min_price_hour_start` | Lowest Price Start Tomorrow | … jutro | -| `sensor.rce_pse_tomorrow_min_price_hour_end` | Lowest Price End Tomorrow | … jutro | -| `sensor.rce_pse_today_cheapest_window_start` | Cheapest Window Start Today | Początek Najtańszego Okna Dzisiaj | -| `sensor.rce_pse_today_cheapest_window_end` | Cheapest Window End Today | Koniec Najtańszego Okna Dzisiaj | -| `sensor.rce_pse_today_expensive_window_start` | Expensive Window Start Today | … | -| `sensor.rce_pse_today_expensive_window_end` | Expensive Window End Today | … | -| `sensor.rce_pse_tomorrow_cheapest_window_start` | … Tomorrow | … | -| `sensor.rce_pse_tomorrow_cheapest_window_end` | … | … | -| `sensor.rce_pse_tomorrow_expensive_window_start` | … | … | -| `sensor.rce_pse_tomorrow_expensive_window_end` | … | … | +| entity_id | Nazwa EN | Nazwa PL | +| ------------------------------------------------- | ------------------------------- | ------------------------------------- | +| `sensor.rce_pse_today_max_price_hour_start` | Highest Price Start Today | Początek Najwyższej Ceny Dzisiaj | +| `sensor.rce_pse_today_max_price_hour_end` | Highest Price End Today | Koniec Najwyższej Ceny Dzisiaj | +| `sensor.rce_pse_today_min_price_hour_start` | Lowest Price Start Today | Początek Najniższej Ceny Dzisiaj | +| `sensor.rce_pse_today_min_price_hour_end` | Lowest Price End Today | Koniec Najniższej Ceny Dzisiaj | +| `sensor.rce_pse_tomorrow_max_price_hour_start` | Highest Price Start Tomorrow | Początek Najwyższej Ceny Jutro | +| `sensor.rce_pse_tomorrow_max_price_hour_end` | Highest Price End Tomorrow | Koniec Najwyższej Ceny Jutro | +| `sensor.rce_pse_tomorrow_min_price_hour_start` | Lowest Price Start Tomorrow | Początek Najniższej Ceny Jutro | +| `sensor.rce_pse_tomorrow_min_price_hour_end` | Lowest Price End Tomorrow | Koniec Najniższej Ceny Jutro | +| `sensor.rce_pse_today_cheapest_window_start` | Cheapest Window Start Today | Początek Najtańszego Okna Dzisiaj | +| `sensor.rce_pse_today_cheapest_window_end` | Cheapest Window End Today | Koniec Najtańszego Okna Dzisiaj | +| `sensor.rce_pse_today_expensive_window_start` | Expensive Window Start Today | Początek Najdroższego Okna Dzisiaj | +| `sensor.rce_pse_today_expensive_window_end` | Expensive Window End Today | Koniec Najdroższego Okna Dzisiaj | +| `sensor.rce_pse_tomorrow_cheapest_window_start` | Cheapest Window Start Tomorrow | Początek Najtańszego Okna Jutro | +| `sensor.rce_pse_tomorrow_cheapest_window_end` | Cheapest Window End Tomorrow | Koniec Najtańszego Okna Jutro | +| `sensor.rce_pse_tomorrow_expensive_window_start` | Expensive Window Start Tomorrow | Początek Najdroższego Okna Jutro | +| `sensor.rce_pse_tomorrow_expensive_window_end` | Expensive Window End Tomorrow | Koniec Najdroższego Okna Jutro | --- @@ -67,15 +67,13 @@ Dla poniższych encji zmieniły się tylko **nazwy w UI** (EN/PL). Entity_id poz | entity_id | EN (stara) | EN (nowa) | PL (stara) | PL (nowa) | | ------------------------------- | ----------------------------------- | -------------------------------- | ------------------------------------------- | -------------------------------------------- | -| sensory najniższej/najwyższej | Today Min/Max Price Hour Start/End | Lowest/Highest Price Start/End | Początek/Koniec Godziny Min./Maks. Ceny | Początek/Koniec Najniższej/Najwyższej Ceny | -| binary PSE | Today Cheapest/Most Expensive | Lowest Price / Highest Price | Aktywne Najtańsze/Najdroższe Okno Dzisiaj | Najniższa Cena / Najwyższa Cena | -| sensory konfigurowalnych okien | Today Custom Cheapest/… Window | Cheapest/Expensive Window Today | Początek/Koniec Konfig. Najtańszego/… Okna | Początek/Koniec Najtańszego/Najdroższego | -| drugie najdroższe okno | Today Second Expensive Window | Second Expensive Window Today | … | … | -| średnie okien | Today Cheapest Window Avg Price itd. | Cheapest Window Avg Today itd. | Średnia cena najtańszego okna dzisiaj | Średnia Najtańszego Okna Dzisiaj | -| okna poniżej progu | Price Below Threshold Start/End | Below-Threshold Window Today | Cena Poniżej Progu Początek/Koniec Dzisiaj | Początek/Koniec Okna Poniżej Progu Dzisiaj | -| binary konfig. i progu | Today Custom Cheapest Window itd. | Cheapest / Expensive / … | Aktywne Konfig. Najtańsze Okno Dzisiaj | Najtańsze Okno / Najdroższe / Cena Poniżej | - -Pełna tabela mapowań nazw (stara → nowa) dla wszystkich encji jest w archiwalnym dokumencie [v2-sensors-changes.md](v2-sensors-changes.md) (wersja angielska). +| sensory najniższej/najwyższej | Today Min/Max Price Hour Start/End | Lowest/Highest Price Start/End | Początek/Koniec Godziny Min./Maks. Ceny | Początek/Koniec Najniższej/Najwyższej Ceny | +| binary PSE | Today Cheapest/Most Expensive | Lowest Price / Highest Price | Aktywne Najtańsze/Najdroższe Okno Dzisiaj | Najniższa Cena / Najwyższa Cena | +| sensory konfigurowalnych okien | Today Custom Cheapest/… Window | Cheapest/Expensive Window Today | Początek/Koniec Konfig. Najtańszego/… Okna | Początek/Koniec Najtańszego/Najdroższego | +| drugie najdroższe okno | Today Second Expensive Window | Second Expensive Window Today | … | … | +| średnie okien | Today Cheapest Window Avg Price | Cheapest Window Avg Today itd. | Średnia cena najtańszego okna dzisiaj | Średnia Najtańszego Okna Dzisiaj | +| okna poniżej progu | Price Below Threshold Start/End | Below-Threshold Window Today | Cena Poniżej Progu Początek/Koniec Dzisiaj | Początek/Koniec Okna Poniżej Progu Dzisiaj | +| sensory binarne | Today Custom Cheapest Window itd. | Cheapest / Expensive / … | Aktywne Najtańsze Okno Dzisiaj | Najtańsze Okno / Najdroższe / Cena Poniżej | --- @@ -94,10 +92,10 @@ W automatyzacjach i dashboardach usuń odwołania do tych entity_id lub zastąp ### Zmiana entity_id i nazwy -| Stary entity_id | Nowy entity_id | EN (stara) | EN (nowa) | PL (stara) | PL (nowa) | -| ------------------------------------ | -------------------------------------- | -------------------- | --------------------- | ----------------------- | --------------------- | -| `sensor.rce_pse_next_hour_price` | `sensor.rce_pse_next_period_price` | Next Hour Price | Next Period Price | Cena Następnej Godziny | Cena Następny Okres | -| `sensor.rce_pse_previous_hour_price` | `sensor.rce_pse_previous_period_price` | Previous Hour Price | Previous Period Price | Cena Poprzedniej Godziny | Cena Poprzedni Okres | +| Stary entity_id | Nowy entity_id | EN (stara) | EN (nowa) | PL (stara) | PL (nowa) | +| ------------------------------------ | -------------------------------------- | -------------------- | --------------------- | ------------------------ | --------------------- | +| `sensor.rce_pse_next_hour_price` | `sensor.rce_pse_next_period_price` | Next Hour Price | Next Period Price | Cena Następnej Godziny | Cena Następny Okres | +| `sensor.rce_pse_previous_hour_price` | `sensor.rce_pse_previous_period_price` | Previous Hour Price | Previous Period Price | Cena Poprzedniej Godziny | Cena Poprzedni Okres | W skryptach, automatyzacjach i kartach zamień stare entity_id na `sensor.rce_pse_next_period_price` i `sensor.rce_pse_previous_period_price`. Jednostka (PLN/MWh) i sens danych bez zmian. @@ -107,8 +105,8 @@ W skryptach, automatyzacjach i kartach zamień stare entity_id na `sensor.rce_ps Dawnej "Cena za kWh" / "Price per kWh" odpowiada teraz sensor **Cena sprzedaży prosument** w PLN/MWh (jak pozostałe ceny). -| Stary entity_id | Nowy entity_id | EN (stara) | EN (nowa) | PL (stara) | PL (nowa) | -| --------------------------------- | ------------------------------------------- | ---------------- | ---------------------- | ------------ | ------------------------- | +| Stary entity_id | Nowy entity_id | EN (stara) | EN (nowa) | PL (stara) | PL (nowa) | +| --------------------------------- | -------------------------------------------- | ---------------- | ---------------------- | ------------ | ------------------------- | | `sensor.rce_pse_today_kwh_price` | `sensor.rce_pse_today_prosumer_selling_price`| Price per kWh | Prosumer Selling Price | Cena za kWh | Cena Sprzedaży Prosument | - **Entity ID:** zamień `sensor.rce_pse_today_kwh_price` na `sensor.rce_pse_today_prosumer_selling_price`. @@ -153,6 +151,3 @@ template: - Dla sensorów **tylko z nową nazwą** (bez zmiany entity_id): nic nie zmieniaj w automatyzacjach. - Stan czasu to teraz datetime (w szablonach często w formacie ISO). Do porównań i formatowania używaj `as_timestamp()` oraz `timestamp_custom()`. ---- - -Dokument techniczny zmian (wersja angielska, tabele wszystkich encji): [v2-sensors-changes.md](v2-sensors-changes.md). diff --git a/tests/test_timestamp_sensors.py b/tests/test_timestamp_sensors.py index a8b34c5..1ce567d 100644 --- a/tests/test_timestamp_sensors.py +++ b/tests/test_timestamp_sensors.py @@ -139,7 +139,7 @@ class TestTodayMaxPriceTimestampSensors: def test_today_max_price_hour_start_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETodayMaxPriceHourStartTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_today_max_price_hour_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_max_price_hour_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -165,7 +165,7 @@ def test_today_max_price_hour_start_timestamp_no_data(self, mock_coordinator): def test_today_max_price_hour_end_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETodayMaxPriceHourEndTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_today_max_price_hour_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_max_price_hour_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -208,7 +208,7 @@ class TestTodayMinPriceTimestampSensors: def test_today_min_price_hour_start_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETodayMinPriceHourStartTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_today_min_price_hour_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_min_price_hour_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -234,7 +234,7 @@ def test_today_min_price_hour_start_timestamp_no_data(self, mock_coordinator): def test_today_min_price_hour_end_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETodayMinPriceHourEndTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_today_min_price_hour_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_min_price_hour_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -263,7 +263,7 @@ class TestTomorrowMaxPriceTimestampSensors: def test_tomorrow_max_price_hour_start_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETomorrowMaxPriceHourStartTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_tomorrow_max_price_hour_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_max_price_hour_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -299,7 +299,7 @@ def test_tomorrow_max_price_hour_start_timestamp_no_data(self, mock_coordinator) def test_tomorrow_max_price_hour_end_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETomorrowMaxPriceHourEndTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_tomorrow_max_price_hour_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_max_price_hour_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -322,7 +322,7 @@ class TestTomorrowMinPriceTimestampSensors: def test_tomorrow_min_price_hour_start_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETomorrowMinPriceHourStartTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_tomorrow_min_price_hour_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_min_price_hour_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -351,7 +351,7 @@ def test_tomorrow_min_price_hour_start_timestamp_no_data(self, mock_coordinator) def test_tomorrow_min_price_hour_end_timestamp_sensor_initialization(self, mock_coordinator): sensor = RCETomorrowMinPriceHourEndTimestampSensor(mock_coordinator) - assert sensor._attr_unique_id == "rce_pse_tomorrow_min_price_hour_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_min_price_hour_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -374,7 +374,7 @@ class TestTodayCustomWindowTimestampSensors: def test_today_cheapest_window_start_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETodayCheapestWindowStartTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_today_cheapest_window_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_cheapest_window_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -400,7 +400,7 @@ def test_today_cheapest_window_start_timestamp_no_optimal_window(self, mock_coor def test_today_cheapest_window_end_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETodayCheapestWindowEndTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_today_cheapest_window_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_cheapest_window_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -417,7 +417,7 @@ def test_today_cheapest_window_end_timestamp_with_data(self, mock_coordinator_ex def test_today_expensive_window_start_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETodayExpensiveWindowStartTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_today_expensive_window_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_expensive_window_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -434,7 +434,7 @@ def test_today_expensive_window_start_timestamp_with_data(self, mock_coordinator def test_today_expensive_window_end_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETodayExpensiveWindowEndTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_today_expensive_window_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_today_expensive_window_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -468,7 +468,7 @@ class TestTomorrowCustomWindowTimestampSensors: def test_tomorrow_cheapest_window_start_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETomorrowCheapestWindowStartTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_tomorrow_cheapest_window_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_cheapest_window_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -488,7 +488,7 @@ def test_tomorrow_cheapest_window_start_timestamp_with_data(self, mock_coordinat def test_tomorrow_cheapest_window_end_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETomorrowCheapestWindowEndTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_tomorrow_cheapest_window_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_cheapest_window_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end" @@ -508,7 +508,7 @@ def test_tomorrow_cheapest_window_end_timestamp_with_data(self, mock_coordinator def test_tomorrow_expensive_window_start_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETomorrowExpensiveWindowStartTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_tomorrow_expensive_window_start_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_expensive_window_start" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-start" @@ -528,7 +528,7 @@ def test_tomorrow_expensive_window_start_timestamp_with_data(self, mock_coordina def test_tomorrow_expensive_window_end_timestamp_sensor_initialization(self, mock_coordinator, mock_config_entry): sensor = RCETomorrowExpensiveWindowEndTimestampSensor(mock_coordinator, mock_config_entry) - assert sensor._attr_unique_id == "rce_pse_tomorrow_expensive_window_end_timestamp" + assert sensor._attr_unique_id == "rce_pse_tomorrow_expensive_window_end" assert sensor._attr_device_class == SensorDeviceClass.TIMESTAMP assert sensor._attr_icon == "mdi:clock-end"