# Kontrola czasu włączenia TV

**URL:** <https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054>\
**Category:** Node-RED\
**Created:** [6 Wrzesień 2023 21:06 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054 "2023-09-06T21:06:40Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Autor:** ![Oskar1](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/o/35a633/32.png) [@Oskar1](https://forum.arturhome.pl/u/Oskar1)\
**Data wpisu:** [6 Wrzesień 2023 21:06 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/1 "2023-09-06T21:06:40Z")

</div>

Witam

Potrzebuję pomocy w wykonaniu “małej” kontroli rodzicielskiej a dokładnie kontroli włączenia telewizora.  
Ogarnąłem sobie już zliczanie czasu korzystania, wyłączanie TV, wł/wy całej “kontroli” ale ugrzęzłem z tematem dodania “dodatkowego” czasu oglądania.  
Nie chcę wchodzić w noda i ręcznie zmieniać wartości ale chciałbym dodać czas z poziomu panelu

Mógłbym prosić o pomoc jak to ogarnąć??

Pozdrawiam

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [7 Wrzesień 2023 06:44 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/2 "2023-09-07T06:44:05Z")

</div>

> [@Oskar1](#):
>
> Nie chcę wchodzić w noda i ręcznie zmieniać wartości ale chciałbym dodać czas z poziomu panelu

Zależy jak wygodnie byłoby to obsługiwać… w HA trzeba zrobić pomocnika np. suwak, lista lub wprowadzanie czasu.

Tą informacje przekazać do NR w celu korekty czasu… nic nie pokazałeś, więc nie wiadomo jak mierzysz czas i jak wpłynąć na jego długość.  
Ten wprowadzany, dodatkowy czas (“extra time”) musiałby być sumowany z “normal time” i dopiero sprawdzany na bieżąco w procesie. Po wyłączeniu TV extra time dobrze wyzerować automatycznie.

---

<div class="post-metadata">

**Autor:** ![isom1266](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/i/3ab097/32.png) [@isom1266](https://forum.arturhome.pl/u/isom1266)\
**Data wpisu:** [7 Wrzesień 2023 07:09 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/3 "2023-09-07T07:09:06Z")

</div>

Przykład takiej korekty, o której pisze @RobinI30 , możesz znaleźć w tym wątku [Automatyczne nawodnienie trawnika - ESP32 - #46 przez RobinI30](https://forum.arturhome.pl/t/automatyczne-nawodnienie-trawnika-esp32/6168/46)  
Co prawda nie dotyczy to wyłączania TV, ale zasada, czy idea jest taka jakiej chyba potrzebujesz.  
Jest tam gotowy flow do zaimportowania i modyfikacji do własnych potrzeb.

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [7 Wrzesień 2023 07:31 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/4 "2023-09-07T07:31:26Z")

</div>

Jako idea to może tak… jednak w tamtym korekta uwzględniana jest raz - na początku procesu.  
Tu przydałaby się możliwość dynamicznej zmiany, ponieważ z reguły pod koniec oglądania jest - “tata jeszcze…”

---

<div class="post-metadata">

**Autor:** ![Oskar1](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/o/35a633/32.png) [@Oskar1](https://forum.arturhome.pl/u/Oskar1)\
**Data wpisu:** [7 Wrzesień 2023 11:21 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/5 "2023-09-07T11:21:13Z")

</div>

Dziękuję za rozpoczęcie dyskusji. Przesyłam PrtSc tego co mam zrobione.  
Czas liczę poprzez “history stats”. Zrobiłem też “pomocnika” jako switch aby wł/wy całą automatyzację.  
Bawiąc się stworzyłem noda w którym wartość ustalam przez pomocnika w panelu ale to nie jest to o co chodzi

 ![nodered](https://forum.arturhome.pl/uploads/default/original/3X/9/f/9f4d4e1200a4825a890db8dc1b335e84f1502555.jpeg)  
 ![nodeRed 2](https://forum.arturhome.pl/uploads/default/original/3X/c/8/c8927a477f5e8e809ebf03579bed181ce6359ee7.png)  
 ![NodeRed 3](https://forum.arturhome.pl/uploads/default/original/3X/9/9/99f95b33ed4d76cf4c74349840ddef8996dda107.png)  
 ![nodeRed 4](https://forum.arturhome.pl/uploads/default/original/3X/e/f/ef351a1e234fac11275c1a0639dfcafd1d2262c9.png)

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [7 Wrzesień 2023 12:21 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/6 "2023-09-07T12:21:12Z")

</div>

Nawet nie wiem jak odpowiedzieć 🤔

Twój proces, po za odczytywaniem stanów encji z HA nic nie robi i w zasadzie nie jest do uratowania.  
Nie da się go w żaden sposób poprawić tylko napisać od nowa.  
Z załączonego obrazka widać, że jeszcze niewiele wiesz (bez urazy 🙂 )  
Dla takich zastosowań porównania czasu najlepiej operować na znaczniku timestamp.

1. Po włączeniu TV zapamiętujesz znacznik w którym nastąpiło włączenie - “start\_time”.
2. Za pomocą noda inject co minutę uruchamiasz proces. Ten nod zwraca znacznik obecnego czasu “now\_time”.
3. sprawdzasz warunek (now\_time - start\_time) \< (dozwoly czas + extra) - nodem warunkowym jest switch

!!! timestamp w NR jest w milisekndach więc dozwolony czas i extra trzeba przeliczyć na [ms]  
Operacje na czasie “zegarowym” na tym etapie są za trudne.  
Minej/więcej takie coś:

 ![timer](https://forum.arturhome.pl/uploads/default/original/3X/e/e/ee13bd74773c66e3c94d0560f753686624e8d667.png)

---

<div class="post-metadata">

**Autor:** ![Krzysztonek](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/krzysztonek/32/6483_2.png) [@Krzysztonek](https://forum.arturhome.pl/u/Krzysztonek)\
**Data wpisu:** [9 Październik 2023 10:34 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/7 "2023-10-09T10:34:52Z")

</div>

> [@RobinI30](#):
>
> Dla takich zastosowań porównania czasu najlepiej operować na znaczniku timestamp.

Mam bardzo podobny problem, dotyczący czasu el. ogrzewania podłogowego. Mój flow wygląda tak:

 ![obraz](https://forum.arturhome.pl/uploads/default/original/3X/e/3/e345977b3e1f73c96a38b6ba805e5f8fd2ef7df3.png)

- `limit dobowy` jest wartością pomocnika typu `number` - tu ustawiony na 5 (w minutach)
- `czas ogrzew` jest sensorem zliczającym czas pracy ogrzewania (zeruje się codziennie o północy) - tu wynosi 0.0
- `zał. od godz` jest wartością pomocnika typu `czas - timestamp` - parametr użytkownika - tu ustawiony na godz. 00:00:00

Skoro znam czas załączenia `zał od godz` i dobowy limit czasu pracy `limit dobowy`, to w nodzie funkcji `zał do godz` próbuję napisać funkcję obliczającą czas wyłączenia ogrzewania:

```auto
const do_godz = msg.od_godz + msg.limit_dobowy * 60000;
msg =
    {
        "do_godz.": do_godz,
    }
return msg;

```

Zwiększam więc znacznik czasu o 5 minut czyli 300,000 msek.  
Ale funkcja, zamiast zmiennej czasowej `timestamp` zwraca string…

![obraz](https://forum.arturhome.pl/uploads/default/original/3X/9/3/9335485641462508cfab1a9b1fb26acca5ecfa15.png)  
… i nie dodaje 300.000 msek do wartości stempla czasowego `od_godz` i nie zwraca wyniku liczbowego w zmiennej `do_godz`, tylko go dokleja do `do_godz` jako string…  
W obiekcie `payload` widzę zmienną `start` jako liczbę (wyrażoną z msek). Czyli jest to liczba.  
Błąd jest pewnie w moim rozumieniu pojęcia `timestamp`… Czy mogę prosić o podpowiedź, jak ta funkcja powinna wyglądać?

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [9 Październik 2023 10:55 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/8 "2023-10-09T10:55:30Z")

</div>

Nie mam w tej chwili za bardzo czasu aby wnikliwie to przeczytać.

Pierwsze co rzuca się w oczy to operujesz na domyślnych typach string  
Musisz operować na numerach i dokonać jawnej konwersji parseInt();

> **[parseInt() - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt)**
>
> The parseInt() function parses a string argument and returns an integer of the specified radix (the base in mathematical numeral systems).

Inaczej będziesz sklejał zapis tych liczb - w debug musisz otrzymać prezentacje bez “”.

…edit  
Nie wszystko da się zrobić w/g tego samego szablonu.  
Napisz tylko co chcesz uzyskać ( nie jak), wydaje się, że to trzeba zrobić inaczej 🙂  
Wchodzisz z zakres operacji na czasie

> **[The Definitive Guide to DateTime Manipulation | Toptal®](https://www.toptal.com/software/definitive-guide-to-datetime-manipulation)**
>
> TZ, locale, leap years…even a library won't help without knowing basic nuances.

zupełnie niepotrzebnie na pierwszy rzut oka.

---

<div class="post-metadata">

**Autor:** ![Krzysztonek](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/krzysztonek/32/6483_2.png) [@Krzysztonek](https://forum.arturhome.pl/u/Krzysztonek)\
**Data wpisu:** [9 Październik 2023 13:17 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/9 "2023-10-09T13:17:31Z")

</div>

> [@RobinI30](#):
>
> Napisz tylko co chcesz uzyskać ( nie jak)

A zatem:  
Mam 2 encje pomocnicze:

- godzina załączenia ogrzewania: `input_datetime.start`
- dzienny limit czasu jego pracy (liczba minut): `input_number.limit_minut`

Chcę zbudować funkcję w NR (lub alternatywnie zdefiniować templatkę sensora `sensor.koniec`), która na wyjściu będzie podawała godzinę wyłączenia ogrzewania `koniec` obliczaną jako znaną porę startu powiększoną o wielkość znanego limitu wyrażonego w minutach (limit\_minut), czyli:

` koniec = start + limit_minut`

Moim aktualnym marzeniem byłoby zbudować taką właśnie funkcję 😉

---

<div class="post-metadata">

**Autor:** ![fronteri](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/f/f19dbf/32.png) [@fronteri](https://forum.arturhome.pl/u/fronteri)\
**Data wpisu:** [9 Październik 2023 14:44 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/10 "2023-10-09T14:44:18Z")

</div>

Cześć,  
Nie czytałem całości, ale jeżeli dobrze rozumiem potrzebujesz coś takiego. U mnie na przykładzie sterowania rekuperatorem.  
Tryb ręcznik uruchamia minutnik z założonym czasem w jakim tryb ręczny ma być aktywny i przelicza o której godzinie tryb ręczny się skończy.

Jeżeli o to chodzi to możemy spróbować dostosować.  
 ![obraz](https://forum.arturhome.pl/uploads/default/original/3X/a/7/a76507c480a67369e4ed520ec0d2ecec55d5e66a.jpeg)

i po uruchomieniu trybu ręcznego

![obraz](https://forum.arturhome.pl/uploads/default/original/3X/f/b/fb40a65d03b4f26244ff0f0e49c2580e2a74a833.jpeg)

---

<div class="post-metadata">

**Autor:** ![Krzysztonek](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/krzysztonek/32/6483_2.png) [@Krzysztonek](https://forum.arturhome.pl/u/Krzysztonek)\
**Data wpisu:** [9 Październik 2023 19:05 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/12 "2023-10-09T19:05:22Z")

</div>

> [@Krzysztonek](#):
>
> `koniec = start + limit_minut`
> 
> Moim aktualnym marzeniem byłoby zbudować taką właśnie funkcję

**Breaking News:**

Mam! Wymyśliłem! Oto upragniona funkcja:

```auto
const start = msg.od_godz;
const limit = "00:" + msg.limit_dobowy + ":00";
var now = new Date();

now.setHours(start.split(":")[0]);
now.setMinutes(start.split(":")[1]);
now.setHours(now.getHours()+parseInt(limit.split(":")[0]));
now.setMinutes(now.getMinutes()+parseInt(limit.split(":")[1]));
var hours = (now.getHours()<10?'0':'') + now.getHours();
var minutes = (now.getMinutes()<10?'0':'') + now.getMinutes();
var do_godz = hours + ":" + minutes + ":00";

msg =
    {
        "do_godz.": do_godz,
    }
return msg;

```

Przetestowałem dla klikunastu różnych wartości zmiennych `msg.od_godz` i `msg.limit_dobowy`.  
Na razie działa bez zarzutu, nawet poprawnie przekręca licznik godzin przy limicie powyżej 60 minut.

Zobaczcie:  
 ![obraz](https://forum.arturhome.pl/uploads/default/original/3X/0/b/0ba659187b607e667152277054b71f736d4e9b81.png)

I dla koszerności posta zamieszczam sam flow:

 ![obraz](https://forum.arturhome.pl/uploads/default/original/3X/8/2/82a9d4401044eff63876627f825c5b491339b98b.png)

**Pomysł do wykorzystania!**

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [9 Październik 2023 19:24 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/13 "2023-10-09T19:24:57Z")

</div>

> [@Krzysztonek](#):
>
> Mam! Wymyśliłem! Oto upragniona funkcja:

👍  
Zobacz ten poradnik

> **[Node.js timestamp | How setTimeout function works in Node.js?](https://www.educba.com/node-dot-js-timestamp/)**
>
> Guide to Node.js timestamp. Here we discuss How setTimeout function works in Node.js along with the Examples in detail to understand easily.

Skoro już opanowałeś funkcje operacji na czasie to łatwiej będzie Ci zrozumieć moje podejście

1. Pobierasz czas startu
2. Konwertujesz na timestamp (TS)
3. Do TS dodajesz limit
4. Robisz odwrotną konewrsję TS \> Date = koniec;

---

<div class="post-metadata">

**Autor:** ![fronteri](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/f/f19dbf/32.png) [@fronteri](https://forum.arturhome.pl/u/fronteri)\
**Data wpisu:** [9 Październik 2023 19:31 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/14 "2023-10-09T19:31:57Z")

</div>

Nie prościej będzie mimo wszystko wykorzystać timer? w atrybutach z automatu dostępna część wymaganych informacji.

 ![obraz](https://forum.arturhome.pl/uploads/default/original/3X/c/b/cb5158cfb43ebbe1d0a8c9081a8435a6dd55d079.png)

---

<div class="post-metadata">

**Autor:** ![MariuszAK](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/mariuszak/32/11869_2.png) [@MariuszAK](https://forum.arturhome.pl/u/MariuszAK)\
**Data wpisu:** [9 Październik 2023 19:43 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/15 "2023-10-09T19:43:48Z")

</div>

Ja też się pobawiłem, niby działa ale czy tak jak oczekujesz

```auto
var start = msg.start; 
var limitMinut = msg.limit_minut;

var startTime = new Date("1970-01-01T" + start);

var endTime = new Date(startTime.getTime() + (limitMinut * 60000)); 

var koniec = endTime.toTimeString().substring(0, 8);

msg.payload = koniec;
return msg;

```

 ![koniec](https://forum.arturhome.pl/uploads/default/original/3X/a/f/aff979fcfff65c88026643325b8c5b930f65e0b4.png)

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [9 Październik 2023 19:48 UTC](https://forum.arturhome.pl/t/kontrola-czasu-wlaczenia-tv/10054/16 "2023-10-09T19:48:24Z")

</div>

@MariuszAK

[![](https://img.youtube.com/vi/_ACZ4gmlkpQ/maxresdefault.jpg "Wazzup - no bardzo dobra robota") ](https://www.youtube.com/watch?v=_ACZ4gmlkpQ)
