Odnośnie wybitnie nietypowego systemu, może zacznę od nieświeżego newsa (z połowy 2022)
Xperi właściciel paru znanych marek w światku multimediów przejął Vewd
https://xperi.com/news/xperi-has-acquired-vewd-enabling-streaming-platforms-on-smart-tvs/
Powstaje pytanie czy to dobrze, czy to źle… (moim zdaniem źle, co już widać po dostępności niektórych aplikacji i kanałów online, mimo, że wiele nawet dość starych modeli Hisense dostało aktualizację systemu dedykowaną na mundial w Katarze).
Bo teraz 3 słowa o historii: VIDAA to sublicencjonowany (choć zapewne z modyfikacjami) Vewd, a on z kolei pochodzi w prostej linii od Opera TV (niestety ślady po Opera TV już wywiało z internetu, a podlinkowane wiki nie jest zbyt ścisłe, ale przecież to nie artykuł historyczny ).
Czas na technikę, wymagania wstępne to:
- działająca instalacja HA (dodałem to, bo zaczynają tu zaglądać też osoby, które nie mają HA)
- posiadanie działającego poprawnie brokera MQTT (oraz Integracji z nim)
- oraz jakieś minimum wiedzy o jego konfigurowaniu, bo wymagane jest skonfigurowanie mostka między brokerami - Vidaa ma własny broker w telewizorze (przykłady poniżej będą dla Dodatku Mosquitto)
- poprawna konfiguracja telewizora
- nieco cierpliwości do eksperymentów (różne modele TV mają różne konfiguracje, sam komponent też wciąż ma drobne niedoróbki, nie ukrywam nie wszystko mi działa
i nie znalazłem przyczyny - mam problem z WakeOnLAN przy TV połączonym bezprzewodowo i nie mam możliwości sprawdzenia czy połączenie przewodowe by pomogło… a problem występuje jedynie losowo, mimo moim zdaniem poprawnej konfiguracjiprawdopodobną przyczyną było przypadkowe wyłączenie statycznego IP w TV, jakkolwiek możliwe, że problem nadal występuje po zaniku zasilania, ale są też inne kwestie np. CEC i tak działa dyskusyjnie).
Kluczowe dla nas linki są 2:
A. Niezbędny nasz Komponent Niestandardowy: Hisense TV Integration for Home Assistant
można go zainstalować ręcznie (kopiowanie plików) lub dodać sobie niestandardowe repozytoriom do HACS https://github.com/sehaas/ha_hisense_tv
Dokumentacja tego komponentu jest wystarczająca, poniżej jednak dam konkretne przykłady oparte na modelu 43AE7200F pod adresem 192.168.20.60/24 i HA w tej samej sieci.
B. Klucze SSL - z grubsza biorąc wymagane dla modeli Hisense (z Vidaa) z roku 2019 i nowszych (więc jest to w pewnym sensie opcjonalne - zależy jaki TV i jaka wersja systemu, być może niektóre starsze konstrukcje też ich wymagają), nie ma ich w repo z komponentem, bo są pozyskane w niezbyt legalny sposób (reverse engineering oficjalnej apki)
Krok 0a. Konfiguracja telewizora.
- nie ma znaczenia czy połączenie LAN czy WLAN, ale musi być ono skonfigurowane najpierw
- statyczny IP to bardzo ważne (jest to dość głęboko zakopane w ustawieniach sieci, a trzeba pamiętać, że dowolne grzebanie w menu nadrzędnym przełącza konfigurację ze statycznego IP na klienta DHCP… to chyba była przyczyna moich problemów…)
- jeśli nasz wymarzony adres wypadnie w środku puli DHCP routera to warto wykonać też rezerwację tego adresu w routerze (bindowanie ARP+DHCP)
- włączone wybudzania przez sieć (WoL) na tym interfejsie, którym mamy wpięty TV do sieci (bez tego się nie da zdalnie włączyć TV)
- prawdopodobnie muszą być włączone powiadomienia (w opcjach zaawansowanych systemu), oczywiście może co najwyżej chodzić o komunikaty systemowe, reklamy oczywiście mam wyłączone
- niektórzy twierdzą, że szybkie włączanie zasilania ma być włączone (nie stwierdziłem powiązania, ale może w niektórych modelach jest to potrzebne, być może zależy od konfiguracji sieci LAN, bez szybkiego włączania jest wykonywana pełna inicjalizacja systemu zamiast uproszczonej, więc teoretycznie to może mieć wpływ na stabilność pracy TV; natomiast tryb szybkiego uruchamiania jest zapewne powiązany z jakąś formą uśpienia zamiast pełnego wyłączenia - więc by pasowało do wybudzania, jakkolwiek to może zależeć np. od modelu płyty głównej TV)
- myślę, że warto zaktualizować firmware telewizora (jeśli jest dostępne dla danego modelu) do najnowszego przed zintegrowaniem z HA (to na wypadek gdyby aktualizacja zmieniła konfigurację wbudowanego brokera, u mnie przez kilka ostatnich aktualizacji się nie zmieniła, ale lepiej dmuchać na zimne)
- wbrew nazwie najprawdopodobniej “usługa pilota” (z menu Wsparcie) może być wyłączona (nie stwierdziłem wpływu, jak ktoś stwierdzi z czym jest ona powiązanie niech się pochwali - przy jej przełączaniu jest wzmianka o Prime Video, więc może tam ma zastosowanie?)
Krok 0b. Wybadanie konfiguracji brokera MQTT w TV.
Badanie telewizora proponuję wykonać za pomocą MQTT Explorer - traktujemy telewizor jako broker.
Udajemy fabryczną aplikację, więc
użytkownik: hisenseservice
hasło: multimqttservice
a z szyfrowaniem i certyfikatami eksperymentujemy.
Przykładowy TV na sofcie V0000.01.00K.M0518 (czyli serie 7200, 7500, U7QF, U8QF) z adresem IP 192.168.20.60/24
użyłem certyfikaty z repo B.
Na tym etapie widać, że jest już fajnie
Krok 1a (nie zawsze obowiązkowy, ja musiałem go użyć, bo bez niego nie zestawiał się poprawnie mostek MQTT, objawem braku tego certyfikatu są dość charakterystyczne wpisy w logu MQTT, niestety ich nie zachowałem, ale bodajże to naprzemienne łączenie i rozłączanie).
Dla mostka MQTT oprócz tych powyżej trzeba jeszcze wydobyć jeden certyfikat, który będzie potrzebny dla zestawienia mostka w TLS, robimy to w terminalu podając IP swojego telewizora - w przykładzie dałem mój 192.168.20.60)
openssl s_client -host 192.168.20.60 -port 36669 -showcerts
W odpowiedzi dostajemy coś takiego
CONNECTED(00000003)
Can't use SSL_get_servername
depth=1 C = CN, ST = shandong, L = qingdao, O = hh, OU = multimedia, CN = RemoteCA
verify error:num=19:self-signed certificate in certificate chain
verify return:1
depth=1 C = CN, ST = shandong, L = qingdao, O = hh, OU = multimedia, CN = RemoteCA
verify return:1
depth=0 C = CN, ST = shandong, O = hh, OU = multiscreen, CN = 127.0.0.1
verify return:1
487B933DEF7F0000:error:0A000410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1600:SSL alert number 40
---
Certificate chain
0 s:C = CN, ST = shandong, O = hh, OU = multiscreen, CN = 127.0.0.1
i:C = CN, ST = shandong, L = qingdao, O = hh, OU = multimedia, CN = RemoteCA
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Apr 19 01:47:38 2018 GMT; NotAfter: Apr 13 01:47:38 2043 GMT
-----BEGIN CERTIFICATE-----
MIIDtDCCApygAwIBAgIBAjANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJDTjER
[… tu trochę krzaków certyfikatu …]
CgfmqEp56iiTCceuQADm7/1T+lL1KtwiA0gvtybLzAFmsFB/aDmLvg==
-----END CERTIFICATE-----
1 s:C = CN, ST = shandong, L = qingdao, O = hh, OU = multimedia, CN = RemoteCA
i:C = CN, ST = shandong, L = qingdao, O = hh, OU = multimedia, CN = RemoteCA
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Apr 19 01:44:44 2018 GMT; NotAfter: Apr 13 01:44:44 2043 GMT
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIJALkl/OZ9XUXDMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNV
[… i znowu trochę krzaków certyfikatu …]
piKSc2fAChDNZ61PTe+kvwu4Nmz3gIr6RlBv0uvnHYjc+9Azwq7RwSiaHh4hjfcZ
1CJQ7Zbr2+AaUp2D7XmhEJOVvJdN
-----END CERTIFICATE-----
---
Server certificate
subject=C = CN, ST = shandong, O = hh, OU = multiscreen, CN = 127.0.0.1
issuer=C = CN, ST = shandong, L = qingdao, O = hh, OU = multimedia, CN = RemoteCA
---
No client certificate CA names sent
Client Certificate Types: RSA sign, DSA sign, ECDSA sign
Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
Shared Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224
Peer signing digest: SHA512
Peer signature type: RSA
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 2365 bytes and written 435 bytes
Verification error: self-signed certificate in certificate chain
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID:
Session-ID-ctx:
Master-Key: 632131[też krzaki]DE5D8679
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1674599882
Timeout : 7200 (sec)
Verify return code: 19 (self-signed certificate in certificate chain)
Extended master secret: no
te 2 certyfikaty uzyskane z telewizora, czyli 2 bloki postaci
-----BEGIN CERTIFICATE-----
jakieś krzaki certyfikatu
-----END CERTIFICATE-----
kopiujemy i wklejamy sobie w takiej postaci
-----BEGIN CERTIFICATE-----
jakieś krzaki pierwszego certyfikatu
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
jakieś krzaki drugiego certyfikatu
-----END CERTIFICATE-----
np. do pliku o nazwie
hisense_ca.pem
który umieścimy w katalogu \ssl\hisense
jeśli napisałem niejasno, to tu świetna ściągawka
https://github.com/tiagofreire-pt/Home_Assistant_Hisense_TV
Krok 1b (podobno nieobowiązkowy dla telewizorów pracujących bez certyfikatów, oczywiście musiałem je użyć)
Do tego samego katalogu
\ssl\hisense
wrzucamy oba certyfikaty pobrane z repo B. (rcm_certchain_pem.cer
i rcm_pem_privkey.pkcs8
)
Krok 3 (obowiązkowy - mostek między brokerami musimy zestawić)
3a.
Czas na skonfigurowanie mostka w naszym brokerze MQTT (Mosquitto jako Dodatek), więc w tym celu w katalogu \share
zakładamy podkatalog mosquitto
(jeśli go nie było) oraz tworzymy sobie już na miejscu czyli w \share\mosquitto
plik o nazwie hisense.conf
(to będzie plik konfigurujący mostek między naszym brokerem którego używamy w HA, a brokerem w telewizorze)
connection Hisense
address 192.168.20.60:36669
remote_username hisenseservice
remote_password multimqttservice
cleansession false
clientid HomeAssistant
bridge_tls_version tlsv1.2
bridge_cafile /ssl/hisense/hisense_ca.pem
bridge_certfile /ssl/hisense/rcm_certchain_pem.cer
bridge_keyfile /ssl/hisense/rcm_pem_privkey.pkcs8
bridge_insecure true
start_type automatic
try_private true
topic /remoteapp/# both 0 hisense
3b.
Kolejny krok to skonfigurowanie brokera by zaczął czytać zewnętrzne pliki konfiguracyjne
w trybie YAML taka konfiguracja Dodatku Mosquitto wygląda tak
logins: []
require_certificate: false
certfile: fullchain.pem
keyfile: privkey.pem
customize:
active: true
folder: mosquitto
(UWAGA to jest przykładowa maksymalnie uproszczona konfiguracja - edytujemy to z głową! wklejanie “na pałę” nie jest dobrym pomysłem)
Po tych zmianach konfiguracji restartujemy Dodatek Mosquitto
Krok 4. (obowiązkowy)
Instalujemy komponent z repo A. chyba to nie wymaga komentarza, sugeruję użyć HACS dodając Repozytorium niestandardowe (to metoda zalecana dla każdego rodzaju instalacji HA).
Po jego instalacji restartujemy serwer HA (HA core, sam serwer, nie cała maszynę).
Krok 5. (obowiązkowy)
Dodajemy integrację
Przypomnę kluczowym krokiem jest by telewizor był włączony!
parę innych kwestii
- MAC-adress podałem w formacie z kreskami 7C-B3-7B-01-23-45 (ale prawdopodobnie zadziała także w formacie z dwukropkami 7C:B3:7B:01:23:45 jakkolwiek gwarancji nie daję)
- adres IP mojego telewizora to 192.168.20.60 w sieci z maską /24 (czyli 255.255.255.0), jako adres do wybudzania WoL podałem adres broadcast w tej sieci 192.168.20.255 (przy podaniu IP telewizora WoL nie działał u mnie poprawnie - dawało się włączyć jedynie chwilę po wyłączeniu)
Na tym etapie telewizor wyświetla kod autoryzacji i jest zaledwie kilkanaście sekund na jego przepisanie (więc nie zrobiłem screeshota, bo po udanej autoryzacji już się nie wyświetla).
Gdyby “mieliło kółko” przy dodawaniu integracji, to można jednokrotnie ją dodać bez podawania IP (ale wtedy u mnie nie działało włączanie wcale, więc pewnie będzie trzeba usunąć i dodać ponownie,) MAC-adress jest obowiązkowy (można go sprawdzić na setki sposobów, wyczytać z routera czy sprawdzić w informacjach o sieci w TV, ja pod Windows mam ulubiony taki skaner).
Krok 6. GUI HA (opcjonalny)
Standardowa karta Kontrola mediów (chyba nie wymaga komentarza)
przykładowy wybór kanału czy aplikacji (w GUI wyglądają tak samo jako 2 kategorie mediów, podobno w modelach z tunerem sat i nastrojonymi kanałami mamy jeszcze kategorię dla kanałów satelitarnych)
Moim zdaniem fajniejsza jest karta Mini Media Player
przykładowa konfiguracja by nie wyświetlać przycisków bez funkcji
type: custom:mini-media-player
entity: media_player.hisense_tv
artwork: none
name: Hisense TV
sound_mode: full
info: scroll
source: full
volume_stateless: true
group: false
hide:
volume: false
source: false
power_state: false
sound_mode: true
controls: false
prev: true
next: true
play_pause: true
play_stop: true
jump: true
Ciąg dalszy nastąpi - post będzie edytowany i uzupełniony w pozostałe istotne informacje (postaram się je uprościć by były bardziej zrozumiałe).
Ścieżki do katalogów podałem “na windowsową modłę” (większość i tak będzie to zapewne ogarniać z Windows przez sambę, więc przypomnę o używaniu edytora tworzącego linuxowe znaki końca linii np. notepad++, a w razie przypadkowego stworzenia ich w windowsowym stylu za jego pomocą można przywrócić plikowi linuxowe końcówki linii), w konfiguracjach ścieżki oczywiście są w linuxowej formie.