Czas Letni / Zimowy

Witam.

Mam klika urzadzen w ktorych mam wybor czasu letniego / zimowego (“select:”)
aby dopasowac zuzycie energii wg. taryfy, ktore zmieniaja sie wraz ze zmiana czasu.

Chcialbym codziennie powiedzmy o godzinie 5 rano aby automatycznie byl wybierany czas letni / zimowy.
Moglby to byc jakis algorytm ktory oblicza badz pobierac z internetu jaki jest aktualny czas - zimowy czy letni.

Nic nie znalazlem w necie na ten temat.

Spotkal sie ktos z tym albo ma jakis pomysl jak to zrobic ?

Pozdrawiam Wszystkich

Zastanów się po co to robić codziennie ? czas się zmienia 2 razy w roku w ostatnią niedzielę marca (z zimowego na letni) oraz w ostatnią niedzielę października (z letniego na zimowy).

Patrz wyżej co tu chcesz obliczać ?

Jak koniecznie chcesz … to utwórz sobie pomocnika “jaki czas” i automatyzację, która sie uruchomi 2 razy w roku i ustawi jaki jest aktualny czas zimowy czy letni na kolejne pół roku.

Jeśli to urządzenia ESPHome (tak się domyślam po tagu w temacie), to nic nie trezba wymyślać na nowo, wystarczy zajrzeć w dokumentację i tam sprawdzić:

https://esphome.io/components/time/homeassistant/

https://esphome.io/components/time/sntp/

Zawsze zaczynać poszukiwania u źródeł.

Nie ma potrzeby żadnego ustawiania, wystarczy ustawić właściwą strefę czasową i czas automatycznie się sam ustawi na właściwy, we właściwym momencie.

time:
  - platform: sntp
    id: sntp_time
    servers: 
      - 0.pl.pool.ntp.org
      - 1.pl.pool.ntp.org
      - 2.pl.pool.ntp.org
    timezone: "Europe/Warsaw"

źródło czasu może być inne (można pobierać czas z HA lub z GPS) istotna jest tylko strefa czasowa.

1 Like

Nie chodzi mi o pobieranie czasu z internetu, z tym nie mam problemu, aktualizuje sie na biezaco.
Potrzebuje
binary_sensor:

id: czas_letni

jezeli dzis jest czas letni to sensor ma wartosc true, jesli zimowy to false.

mam kilkanascie urzadzen, 7 inwerterow, 2 ladowarki samochodowe, kilka boilerow i wczoraj zapomnialem przestawic we wszystkich czasu na zimowy, zorientowalem sie dzis.
Niby niewielka strata bo pobralo 24kwh w ciagu taryfy dziennej zamiast nocnej ale to zawsze strata ktora mozna wyeliminowac kilkoma linijkami kodu.

I tak zamiast wszystko przestawiac co pol roku wolalbym zeby codziennie w nocy sprawdzac badz wyliczac jaki jest czas : zimowy czy letni. To rozwiazuje problem.

@angler Cezary.K jak przy pomocy time sprawdzic czy 27.10.2025 o godzinie 5:00 jest czas zimowy czy letni ? Bo tego nie widze w opisie i przykladach

w 25 czas zimowy zaczyna sie 26 pazdziernika
w 26 czas zimowy zaczyna sie 25 pazdziernika
w 27 czas zimowy zaczyna sie 31 pazdziernika
jak to obliczyc lub pobrac ?

Jeśli nie potrzebujesz tego wewnątrz esp to możesz zrobić w HA 2 automatyzacje które przestawia ten binary sensor 2 razy w roku jak to już zostało powiedziane. Stany sensorów z HA można odczytywać w esphome więc to taka metoda pośrednia (ale przynajmniej prosta).

Odpowiedź w pseudokodzie, ale chyba sam wymyślisz co chcesz uzyskać w miejscu komentarza.

lambda: |-
    if (id(sntp_time).now().is_dst) {
      //do something here, true=czas letni, false=czas zimowy
    }

To JEST w dokumentacji.

Z kwestii pobocznych

  1. Należy oczywiście sprawdzać najpierw też .is_valid() bo jeśli nie jest, to nie wiemy czy zimowy czy letni, więc nie można podejmować działań warunkowanych czasem.
  2. Ja bym sprawdzał o 3:01 rano (jeśli ma być test codziennie) oraz (patrz 1.) po każdym bootowaniu ESP.
  3. Czas w PL jest ustanawiany rozporządzeniem prezesa rady ministrów, takie rozporządzenie powinno być wydawane z minimum półrocznym wyprzedzeniem przed zmianą czasu, którą reguluje (lub jej brakiem, bo i do tego się przymierzano), ale poprzedniemu premierowi się nie udało wydać z dostatecznym wyprzedzeniem (więc dobrze, że nie wprowadzało ono rewolucyjnych zmian).
  4. Ze względów powyżej (ad.3) należy czasami zrekompilować firmware, gdyby jednak wprowadzono jakieś zmiany do reguły zmian czasu.

Nie zauwazylem tego, dziekuje bardzo za podpowiedz.

Jednak cos nie go konca mi to dziala, i ciagle twierdzi ze jest czas Letni

      - lambda: |-
            if (id(sntp_time).now().is_valid()) {
              ESP_LOGI("main", "Time is valid");
              if (id(sntp_time).now().is_dst) {
                ESP_LOGI("main", "Winter Time");
                id(season).make_call().set_option("Winter").perform();
              } else {
                ESP_LOGI("main", "Summer Time");
                id(season).make_call().set_option("Summer").perform();
              }
            } else {
              ESP_LOGI("main", "Time is not valid");
            }

W logach mam:
Time is valid
Summer Time

a chyba powinen byc
Winter Time

chyba znalazlem odpowiedz:
Daylight saving time (DST), also known as summer time
czyli wnioskuje ze true to czas letni i musze zamieniec wartosci

Oczywiście mój błąd, bo napisałem odwrotnie ;D (poprawione)

Dziekuje bardzo, wszystko dziala