Node-red + samsung TV i możesz wszystko

Witam ponownie.

********************** Kilka słów tytułem wstępu ************************

Na początku chciałem kilka słów wyjaśnienia dlaczego integruję TV poprzez node-red a nie add-ony z HA czy HACS. Sprawa dla mnie jest prosta.
Po pierwsze -
Całe środowisko Home Assistant przechodzi dynamiczne zmiany powoduje to wiele problemów przy podnoszeniu wersji do nowszych. Czasami coś przestaje działać i trzeba się męczyć lub czekać aż ktoś naprawi add-ona. Są osoby które powiedzą “to nie aktualizuj jak małpka tylko poczekaj i zrób to świadomie”. I z tym się absolutnie zgadzam chociaż zamiast “nie aktualizować” cały system wybrałem tylko jeden komponent tego systemu a mianowicie node-red. Resztę zamierzam aktualizować tak często jak będą wychodzić nowe aktualizacje bo wiele z poprawek może wnosić sporo dobrego i nie zamierzam z tego rezygnować.

Po drugie - “I możesz wszystko”.
Właśnie… po raz kolejny spotykam się z tym że node red pozwala znacznie więcej osiągnąć niż zwykły add-on a pracy przy tym wcale nie jest więcej biorąc pod uwagę instalacje add-ona i potem jego debugowanie z wersji na wersję"

Tak więc jeżeli komuś to nie odpowiada i woli pozostać przy add-onach to ten post nie jest dla niego.
Resztę serdecznie zapraszam.

********************* koniec wstępu***************************

Co zamierzam dzięki tej integracji zrobić?

  1. kontrolować telewizor on/off
  2. sprawdzać status telewizora ( node red może sprawdzać czy telewizor jest włączony na 2 sposoby po IP oraz po dostępie do api. czy to jest w ogóle ważne?? okazuje się że tak ale o tym poniżej)
  3. możemy stworzyć sobie pilota z dowolnymi klawiszami bo w node red mamy zmapowaną całą klawiaturę.
  4. możemy zczytać jakie aplikacje są na TV zainstalowane i możemy je dowolnie uruchamiać po ich ID.
    chcesz zagrać muzykę na spotyfi?? nie ma problemu chcesz uruchomić TV i od razu przejść do Netflixa ?? chcesz grzebać w menu telewizora automatycznie??? też nie ma problemu. To właśnie oznacza “i możesz wszystko”.

a więc zaczynamy…
uruchamiamy node red i przechodzimy do menu → manage palette → install → wyszukaj
wyszukujemy
node-red-contrib-samsung-tv-control
klikamy install.
Jak to się uda to powinniśmy widzieć na samym spodzie zakładkę devices a w niej 9 nowych nodów.

nazwy już praktycznie mówią wszystko za siebie. Ale aby skorzystać z dobrodziejstwa inwentarza musimy zrobić jeszcze jeden niezbędny krok.

zarejestrowanie NodeJS w telewizorze. wykonywane tylko raz na początku.
wybieramy i łączymy następujące nody inject → samsung TV get token → debug.
w node get token podajemy namiary na nasz TV (mac adres czytamy z routera) pole token pozostawiamy puste

teraz trzeba

  1. uruchomić tv

  2. uruchomić injecta i podejść do telewizora

  3. jak wszystko dobrze ustawiliśmy powinno na ekranie TV pojawić się okienko z prośbą o dodanie urządzenia do listy dozwolonych. Klikamy dodaj.

  4. na komputerze node debug zwrócił nam informację o tokenie.

  5. otwieramy node token i w puste miejsce wklejamy otrzymany token klikamy update i jesteśmy gotowi na zabawy.

krótki opis co można tak out of the box.

Sprawdzenie czy TV włączony.
node samsunt TV is Alive ma 2 wyjścia on i off i w zależności od tego czy API odpowiada mamy msg na odpowiednim nodzie.

node Samsung TV is Alive via ping ma 2 wyjścia on i off i w zależności od tego czy ping odpowiada mamy msg na odpowiednim nodzie.

Po co aż tyle ?? Czytaj dalej. a zobaczysz że się przyda.

Włączenie TV
nod samsung TV Turn On
Tu nie ma żadnej filozofii wysyłamy dowolny meg.payload i nam włącza TV - banał.

Brakuje noda Power OFF??
Właśnie że nie. realizujemy to trochę inaczej.
Nod Samsung TV Send. - nod który rządzi nimi wszystkimi :grinning:
tym nodem wysyłamy dowolny kod wciśniętego klawisza z pilota i jeżeli nasz pilot ma taki klawisz to nasz TV go obsłuży. dzięki temu mogłem tworzyć sekwencję wciśniętych klawiszy aby poruszać się np. po menu. ( klawisze strzałek) wykorzystywałem to w automatyzacji uruchom np. spotify i kliknij 2x strzałkę w lewo aby wybrać moją playlistę oraz kliknij klawisz play aby grać. teraz to banał prawda?
sterowanie pilotem robimy tak
ustawiamy jeden po drugim kilka nodów Samsung TV send i w każdym z listy rozwijalnej wybieramy interesujący nas klawisz (np. KEY_LEFT)


ustawiając kilka nodów po sobie możemy zrobić sekwencję klawiszy. czyli poruszać się po tv tak jak chcemy.

co z tym power off?
wystarczy że wyślemy KEY_POWER w telewizorach które mają tylko 1 klawisz do naprzemiennego włączania i wyłączanie TV.

W telewizorach natomiast które mają na pilocie 2 klawisze power on i powier off używamy KEY_POWEROFF oraz KEY_POWERON.

I tu jest jeden zgrzyt przynajmniej w moim TV. Otóż po wyłączeniu TV jeszcze mamy ok 15 sekund kiedy działa API i możemy wysłać kod klawisza KEY_POWER aby telewizor ponownie włączyć. po tym czasie przestaje działać API ale nie przestaje działać ping przez ponad 150 sekund więc nie możemy w tym czasie wysłać pakietu WAKE ON LAN aby telewizor uruchomić. wykorzystując nody Samsung TV Alive oraz Samsung TV Alive via ping możemy wykryć ten moment i odpowiednio go obsłużyć. czyli kiedy API OFF i ping ON to właśnie wyłączyliśmy tv i zanim coś w nim pomajdrujemy musimy na przykład poczekać te nieszczęsne 2:30 lub możemy wysłać info przez google home “nie mogę teraz włączyć TV ale mogę opowiedzieć ci dowcip”.

ok teraz o uruchamianiu aplikacji.
wygląda na to że nod Samsung TV Open App sam zczytuje sobie z TV zainstalowane aplikacje wiec
otwieramy ten nod i z listy wybieramy apkę którą chcemy uruchomić.


aby uruchomić apkę na TV do noda Samsung TV Open App wysylamy dowolny msg.payload ( jeżeli ustawiliśmy AppId na sztywno …) lub jezeli chcemy robić to programowo to musimy zczytać ID aplikacji nodem Samsung TV Get Apps i wtedy pole AppId zostawiamy puste a w msg.payload podajemy prawidłowe ID.

Pobieranie ID aplikacji zainstalowanych na TV
Node Samsung TV Get Apps. Jeżeli na jego wejście podamy dowolny msg to na wyjściu dostaniemy tablicę ze wszystkimi aplikacjami wraz z ich nazwą , Id , oraz z informacją czy do jej uruchomienia potrzebne jest haslo. (is_lock)

to było by na tyle.

PS. Zapomniałem dodać że jeżeli ktoś ma kilka telewizorów to otwieramy dowolny nod Samsung cokolwiek i klikamy na strzalkę w dół po czym dodajemy drugi TV i potem wykonujemy znowu operację z uzyskaniem tokena. do kasowania niepotrzebnych tv jest kalwisz delete ten ktory sie pojawia w trakcie edycji IP i mac adresow: :smiley:

Jestem w trakcie przygotowywania automatyzacji ograniczającej dzieciakom oglądanie TV. Jak dokończę to podzielę się na forum jak to zrobiłem. Komentarze -głownie te krytyczne- będą mile widziane to może dzięki nim usprawnię jeszcze bardziej cały proces.

6 Likes

Super opis . Sprawdzę u siebie.

Działa zgodnie z opisem .

U mnie po wybraniu tv 2016 i reszcie zgodnie z opisem na Tv nie pokazuje się komunikat od dołączeniu urządzenia a otwiera się menu główne, jak bym nacisnął domek na pilocie TV. Na ustawieniu 2017 i tym beta - zero reakcji

@maki1000 w którym momencie? przy pobieraniu tokenu ? w telewizorach można ustawić żeby akceptował wszystkie urządzenia zewnętrzne. może tak masz i nie musisz mieć tokena tylko od razu możesz sterować telewizorem. Więcej nie pomogę bo nie mam TV z 2016 i nie mogę nic potestować.

Tak, przy pobieraniu tokenu. Miałeś rację działa bez tokenu !
Fajnie by było jak byś dla takich ciemnot jak ja podpowiedział jak na koniec przenieść wszystko np na przycisk on/off na dashboard

@maki1000
Bardzo prosto :slight_smile:
w HA wchodzisz w zakładkę konfiguracja -> pomocnicy.
tworzysz tam przyciskiem “Dodaj” (prawy dół) pomocnika o nazwie przełącznik. nazywasz go TV ON/OFF bądź jakkolwiek chcesz. ale najważniejsze jest abyś zapisał sobie nazwę encji coś w postaci input_boolean.xxxxxxxx

teraz w node red korzystasz z noda “event state” w polu entet_id podajesz właśnie nazwę tej encji.
ten nod wygeneruje msg.payload w postaci “on” lub “off”. nodem switch ustawiasz że jak “on” to prześlij do noda Samsung TV turn on a jak “off” to “samsung tv send” i tam jako parametr podajesz KEY_POWER lub KEY POWEROFF w zależności jak masz na pilocie. powinno wyglądać to tak

a tak wygląda moje zarządzanie TV wraz s systemem kontroli czasu oglądania dla dzieciakow nad którym teraz intensywnie pracuje. jak dokończę i potestuje to się pochwalę na forum.

Dziękuje bardzo za szczegółowe wyjaśnienia. Biorę się za testy !

BohdanGut - podpowiesz jak ustawić nody żeby po włączeniu lub wyłączeniu TV pilotem zmieniał się stan na moim nowo utworzonym przycisku ? Sam przycisk działa włącz i wyłącza TV, jednak nie ustawia się zgodnie ze stanem jeżeli wyłączę TV pilotem. Kombinowałem z tymi dwoma stanami z pingiem ale nie wiem gdzie mam je wstawić

Super. Dzięki wielkie.

Mam jednak pewien problem.
Na Tv wyskakuje mi komunikat o zezwoleniu na wykonanie akcji.
Kolejno dodaje token do ustawień TV w node red.
Następnie tworze proces którym np. zmieniam program lub cokolwiek i znowu wyskakuje komunikat o zezwoleniu na wykonie akcji na tv - dopiero po akceptacji program się zmienia.

Dodatkowo wywołałem (Samsung get token) kilka razy i za każdym razem co ciekawe ten token jest inny.
Jakiś pomysł by przy procesach nie musiał za każdym razem klikać zezwól na TV ?

edit.
Na TV trzeba zmienić opcje: Powiadomienie o dostępie na “Tylko pierwszy raz”

Czy ta metoda jest również dostępna na TV Samsung z 2014r?

Czy jest możliwość zrealizowania poniższego

tak by na ekranie tv nic się nie pojawiało, a ekran sam zmienił tryb na eco(wysokie przyciemnienie).

Kolejne pytanie czy jest możliwość odwołanie się do konkretnego parametru w TV odpowiedzialnego za jasność TV (niski, średni, wysoki). Pytam ponieważ to co wyżej zrobiłem jest trywialne i na stałe. Nie da się tym w sposób logiczny sterować.
Dlaczego? bo powyższy proces jest przygotowany gdy tryb jest wyłączony.
Później gdy chcemy zmienić na np średni to proces na wzór poprzedniego nie spełni swojej roli gdyż poziom średni jest niżej niż wysoki.

Ogólnie da się to zrobić różnymi zależnościami, ale tych procesów trzeba by było utworzyć dużo dużo więcej - co moim zdaniem jest bezsensu.

Innym sposobem jest resetowanie aktualnego stanu na wyłączony, a później to co chcemy i wtedy faktycznie mamy 4 procesy.
Jednak będzie się to wykonywać kilka sekund (6-8) a po ekranie będzie latać menu.

Pomysły ?
TV jaki mam to NU8042 rocznik chyba 2018

@Grzegorz
Witaj. Niestety nie mam telewizora z 2014 roku więc nie mam jak sprawdzić. Najprostsza metoda to

  1. poszukać w dokumentacji nodów listy kompatebilności
  2. spróbować zintegrować i zobaczyć czy działa czy są błędy

@Pawel

Witaj.
Co do pierwszego problemu to myślę że to jest spowodowane ustawieniami zabezpieczeń w twoim TV. Zobacz czy w menu urządzeń sterujących nie masz ustawionego żę TV musi się zawsze pytać o zgodę. Ja ustawiłem ipcję “tylko pierswszy raz” i zawsze pyta mnie tylko 1 raz jak pobieram token a potem działa.

Co do drugiego postu ja steruje sptyfi wiec nie widać latającego menu po ekranie ale robię to dokładnie tak jak TY. Nie wpadłem na inny pomysł. Jeżeli chcesz coś ustawiać w menu telewizora to będziesz musiał się pogodzić z tym ze menu polata ci trochę po ekranie.---- Chyba że — na twoim pilocie jest konkretny klawisz który dokładnie to robi. np Zobacż klawisz KEY_MAGIC_BRIGHT (u mnie ekran sam się dostosowuje do jasności) , KEY_ESAVING. poszukaj może to już jest. Druga opcja to możliwość przypisania jakiegoś ustawienia do klawisza na pilocie a potem wywołanie go np. KEY_TV_MODE. może da się przełączać. Przeczytaj też instrukcję obsługi swojego TV. Jeżeli jakaś funkcja jest często używana to na 90% są do niej skróty na pilocie i nie trzeba włazić w menu za każdym razem. poza tym pamiętaj że istnieje nod FUNCTION w ktorym można tworzyć pętle więc możesz podać jakąś cyfrę wyliczaną na podstawie czujnika światła w pokoju i nodem FUNCTION wielokrotnie wywoływać ten sam nod naprzykład przy pomocy nodu While-loop zainstaluj sobie taki pakiet
node-red-contrib-loop-processing

Powodzenia

Witaj,
Czy mógłbyś mi podpowiedzieć jak przesłać “przytrzymanie przycisku”? W moim modelu Samsung TV (Frame 2020) jest jeden przycisk POWER ale ma 3 tryby: ON, OFF i ART. Wygląda to następująco:

  1. Jeżeli TV jest ON i nacisnę POWER - TV przechodzi w tryb ART.
  2. Jeżeli TV jest ON i przytrzymam POWER przez 3 sekundy - TV przechodzi w tryb OFF
  3. Jeżeli TV jest ART i nacisnę POWER - TV przechodzi w tryb ON
  4. Jeżeli TV jest ART i przytrzymam POWER przez 3 sekundy - TV przechodzi w tryb OFF
  5. Jeżeli TV był ON i przeszedł w OFF i nacisnę POWER - TV przechodzi w tryb ON
  6. Jeżeli TV był ART i przeszedł w OFF i nacisnę POWER - TV przechodzi w tryb ART
    Chciałbym nadal mieć możliwość kontrolowania trybu ART. Samo ON / OFF działa bez problemu. Niestety pilot nie ma dedykowanego przycisku ART. W aplikacji taki występuje.

Z góry dziękuje i pozdrawiam.

@Buffeto

Witaj. nie spotkałem się z takim problemem. Dlatego proponuję poszukać w Google. Może wyszła jakaś zaktualizowana biblioteka. Zobacz też czy w liście rozwijalnej klawiszy nie masz już jakiegoś co przypomina ART. Jeżeli jest to jakaś nowa funkcjonalność (2020) to pewnie trzeba zaczekać.

W między czasie…
zobaczył bym czy przypadkiem “długie przytrzymanie” klawisza nie oznacza w praktyce wysłania w ciągu sekundy 10 lub 20 razy klawisza power. czyli zrobił bym małą pętlę i kazał wysyłać power tak szybko jak się da przez te 3 sekundy.

Sprawdził bym czy może działają klawisze z kodami power_on, power_off oraz power. u mnie telewizor reaguje tylko na klawisz power. U Ciebie może być inaczej.

Pozdrawiam

Hej,
Troche poszperalem i udalo mi sie to wykonac ale uzywajac 2 roznych add-onów. Moze komus sie przyda:

Telewizor to Samsung The Frame QE65LS03TAU QLED TV 2020 (wiem że są też starsze wersje).
Oprócz trybu Ambient ma tryb ART, który po naciśnięciu przycisku POWER wyświetla obraz i przechodzi w tryb niskiego zużycia energii z aktywnym detektorem ruchu.

Używając dodatku: node-red-contrib-samsung-tv-control:

  1. KEY_POWER - zmienia stan telewizora na ART on i ART off (odpowiada naciśnięciu przycisku power na pilocie)
  2. KEY_POWERON - brak reakcji
  3. KEY_POWEROFF - brak reakcji
  4. Wywołanie aplikacji - nie działa, używa błędnych ID aplikacji. Jeśli zmienię payload w nodzie inject, również tego nie akceptuje.

Używając tego dodatku steruje wszystkimi funkcjami (włącznie z ART) poza:

  • power on
  • power off
  • wywołanie aplikacji

Do brakujących funkcji użyłem dodatku: node-red-contrib-samsung-automation-studio-nodes
Ten dodatek również nie ma funkcji ART, chociaż jest bardziej rozbudowany i może da się to wyciągnąć z API Smart Things, ale dodaje pozostałe brakujące funkcje z mojej listy.
Nie ma tez mapowania wszystkich przycisków (np. KEY_HOME, KEY_LEFT itp.) gdyż nawigacja po menu wykorzystuje MenuID i parametry. Niestety nie udało mi się znaleźć listy tych ID. Dlatego korzystam z pierwszego dodatku do przemieszczania się po menu.

Tak czy siak bardzo dziękuje za szybka odpowiedz, a pomysł z wykorzystanie pętli loop na pewno przetestuje, bo przyda się do innych rzeczy :slightly_smiling_face:

Pozdrawiam

a ja zadam pytanie może nie do końca w temacie kojarzy ktoś po jakich portach HA robi “discovery” TV Samsunga?

Mam w domu 2 podsieci. (Nie wiem czy coś nie pomieszałem, ale niestety mój tplink pozwala użyć VPN’a tylko w trybie router, a jakbym go ustawił jako bridge to nie ma opcji VPN’a).
Tak więc mam w salonie sieć 192.168.1.xxx na Horizon z UPC a w sypialni na TPLinku sieć podrzędną 192.168.0.xxx +VPN i działa to poprawnie. Ogólnie na większość urządzeń mam przekierowanie i mogę działać w 2 strony. (lub sprzęty są po Zigbee) i nie robi to problemu.
W salonie włączam 6 letniego Samsunga i wyskakuje monit w HA, że wykryto nowe urządzenie. W sypialni włączam nowego Samsunga i nic (jest na innej podsieci, ale mógłbym przekierować porty itp.)

Zawsze funkcje discovery działają tylko w sieci, w której jest HA i odbywa się to portach na jakich urządzenie udostępnia swoje API lub interfejs dla użytkownika. W przypadku Samsunga są to różne porty w zależności od modelu i daty produkcji, możesz spróbować 8001, 8002, 8080

Piszesz, że w pierwszej sieci HA wykrywa telewizor, dla tego przypadku w konsoli ssh HA uruchom polecenie netstat -ant, w odpowiedzi poszukaj połączenia do IP Twojego telewizora, po dwukropku będzie port TCP do jakiego podłączył się HA, to port integracji czyli port używany w discovery.

BTW masz routery połączone między sobą kablem ethernet, a drugi router służy do zwiększenia sieci Wi-Fi?

1 Like

Cześć,
Mam dodatkowe pytanie, w zasadzie identyczne jak kolega maki1000. Jak zmienić stan przycisku na dashboardzie jeśli stan telewizora zmienił się z pilota? Jedyne co wymyśliłem to puścić watchdoga (np. co sekundę), na noda “Samsung TV Is Alive” i zmienić stan w dashboard.
Czy takie rozwiązanie ma sens, czy może macie jakieś lepsze pomysły?
Czy taki watchdog sprawdzający co sekundę nie będzie problemem dla HA?
Użyć zwykłego “Is Alive” czy Is alive via ping"?
I najważniejsze, jak zmienić stan przycisku w dashboard bez jej wyzwalania - jako przełącznika używam pomocnika. Call Service wyzwala ten przycisk i włącza telewizor, próbowałem użyć node API ale nie znam ścieżki do mojego pomocnika.
watchdog.json (3,4 KB)

Z góry dziękuje za pomoc.
Pozdrawiam