Olbliczanie przesunięcia godziny w NodRed z wyświtlaniem na HA

Koledzy. Jest taki temat. W noderedzie potrafię już sobie odczytać godzinę i wysłać ją do HA na daschobard do tekstu, ale pytanie jest jak to zrobić żeby poszła wiadomość, że ma być coś zrobione za 3 godziny z podaną właśnie tą godziną? Inaczej. Jest godzina 13:00, dodajemy do niej 3h, i chcę żeby mi się wyświetliła automatycznie wiadomość że o 16:00 trzeba coś tam… Jakieś pomysły?
Na marginesie, lekcja 5 Artura to kopalnia wiedzy dla nowych…:ok_hand:

flows.json (2,3 KB)

var dt = new Date();
dt.setHours( dt.getHours() + 3 );

Kurcze, może coś źle robię, ale funkcja ta zwraca mi tylko date i godzinę aktualną

1 2 3

musisz wynik tego sumowania czyli wartość zmiennej dt podstawić pod jakąś właściwość aby ją odczytać. Czyli przed return msg; daj np msg.czas_suma = dt
W nodzie debug zmień że chcesz oglądać pełny obiekt msg a nie tylko payload.
Wtedy w wyniku debug w obiekcie msg znajdziesz właściwość czas_suma, która powinna mieć wartość aktualny czas+3h
Nie wiem czy wyjaśniłem zrozumiale

oczywiście możesz ten wynik też podstawić pod payload jeśli wolisz wtedy przed return msg; dajesz msg.payload = dt

Hejka, kombinuje na wszystkie sposoby i nie jest jak bym chciał. Proces daje mi przesuniętą godzinę ale wraz z pełną datą, czyli pełno zbędnych informacji kalendarzowych, a jak chce wybrać jakieś znaki, to wywala NaN…natomiast czas_suma, robi przesunięcie tylko o godzinę… Trochę mało mam wiedzy żeby to ugryźć :lying_face:

2

@luki25 napisz mi jeszcze raz jaki ma być efekt końcowy to zrobię dla Ciebie gotowca.

Ok. Otóż chodzi o moją automatyzacje dietki dla syna. Na ekranie HA chcę mieć informacje:
encja text 1

  • Ostatni posiłek był o (tutaj 16:00) - to już mam, czas sobie sam ładnie odlicza i wyświetla się
    encja text 2
  • Kolejny posiłek będzie o (19:00) - informacja obliczona na podstawie poprzedniej - czas + 3h, chociaż nie musi być obliczona, jeżeli się wyświetli z przesunięciem o 3h, efekt ten sam.
    Podstawę mam jako flow z początku posta, nowego nic nie wymyśliłem

Ok to spróbuję dzisiaj zrobić gotowca. Jak będę miał pytania to będę pisał.

Super, dziękuję
Mam pytanie, skąd brać wiedzę jak pisać takie funkcje, jaki to jest język programowania? Jest to dość ciekawe ale nie wiem czego szukać…

Jeśli chodzi o język to Java script.

@luki25
Załadowałem Twój proces i mam kilka pytań:

  1. Kiedy on ma być uruchamiany?
  2. W nodzie czas? sprawdzasz aktualną godzinę i do niej chcesz dodać 3h. to tak ma być? Bo co jak proces uruchomi się pomiędzy dwoma posiłkami?
  3. Gdzie jest czas ostatniego posiłku?

Jak dla mnie proces powinien wyglądać następująco

  1. Określony jest czas pierwszego posiłku
  2. Weryfikujesz czy syn faktycznie zjadł posiłek o danej godzinie - albo ręcznie albo automatycznie. Nie wiem jakie masz możliwości kontroli.
  3. Po potwierdzeniu że posiłek o godzinie X został zjedzony NR dolicza 3h do czasu kiedy posiłek został zjedzony. Dzięki temu będzie uwzględniony czas przez jaki posiłek był jedzony. Bo rozumiem że to chodzi o 3 godziny przerwy pomiędzy jedzeniem, a nie że trzeba zawsze zaczynać o stałej godzinie. Więc jeśli syn zaczął jeść o 11.00 i jadł przez 20 minut to kolejny posiłek powinien być 11.20+3h, a nie 11.00+3h?
  4. Wynik tego sumowania wyświetlany jest w HA jako np Godzina następnego posiłku: XX:XX
  5. I później ponownie system leci od punktu 2 przez ilość posiłków na dobę (5?)
  6. Z nowym dniem wszystko zaczyna się od punktu 1

Czy dobrze rozumiem to co chcesz osiągnąć?

  1. Cały proces startuje z przycisku binarnego - czyli ręcznie, po czym następuje informacja i dalej opóźnienie stoptimer 3h i td.
  2. Tak ma to wyglądać, proces nie powinien się odpalić pomiędzy posiłkami
  3. Czas ostatniego posiłku, jest przed 22:00 . Mam już cały flow, który uwzględnia kilka zmiennych czasowych - 5
    dietka.json (78,7 KB)
    1. odpalany jest z przycisku i następuje odliczanie 30min=> 1 posiłek, a później co 3h
    1. zrobiłem przyciski input w konfiguracji=> pomocnicy, które służą jako inject, po to że jak zje o innej to mogę ręcznie odpalić kolejny proces, nie umie zrobić noda, który zresetuje już działający proces
    1. Nie potwierdzam kiedy zje, ma to być wyznacznik czasu kiedy ma iść zjeść - jest to wystarczające, nie ma stałych godzin jedzenie, tylko wg odliczania
    1. Może tak być
  • 5, Zgadza się
    1. Nowy dzień, to kiedy syn wstaje to naciska sobie przycisk na ścianie i znów lecimy od początku

Może nie rób specjalnie całego procesu, bo to dużo czasu, tylko uzględnij jak to ma wyglądać i zrób ten wycinek do przeliczania i wyświetlania, a ja już sobie zaimplementuje tam gdzie potrzebuje

Zobacz to dieta.json (1,6 KB)
Generalnie ten proces pobiera aktualny czas z sensora HA (sensor.time) następnie w funkcji dodaje do niego 3 godziny i wynik wyświetla w input_text w HA.

działa, super, bardzo dziękuje. Ciekawi mnie dlaczego u mnie przesunięcie musiałem zrobić +2, bo jak było +3 to przeliczał mi o 4 godziny…

Ten Twój proces jest mocno skomplikowany. Da się go uprościć. Pewnie gdzieś po drodze dodajesz już 1 godzinę. Jak będę miał chwilę to mogę sprawdzić gdzie.

nie nie, ten twój na sucho dodaje tak

To muszę popatrzeć. może się walnąłem ale u mnie chyba było 3h. Wieczorem zobaczę i jak coś to dam poprawkę