HDMI-CEC sterowanie urządzeniami podłączonymi po HDMI

HDMI-CEC sterowanie urządzeniami podłączonymi po HDMI

cec

image

CEC to funkcja HDMI przeznaczona do sterowania urządzeniami podłączonymi po HDMI.
Idea działania jest taka, żeby urządzenia obsługujące CEC mogły sterować sobą nawzajem, dzięki temu na przykład pilot do telewizora może również sterować dekoderem.

Bramki AIS obsługują HDMI CEC, komendy CEC wysyłane do bramki wyłączamy/blokujemy - żeby nie pozwolić na wyłączenie/uśpienie bramki przez TV.

Możemy wysyłać komendy HDMI-CEC z bramki do podłączonych urządzeń po HDMI.

W nadchodzącej kolejnej aktualizacji dodamy serwis, który będzie wysyłał komendy HDMI-CEC i opiszemy tę funkcjonalność w dokumentacji.

W ten sposób będzie można sterować telewizorem z bramki i wykorzystać tę funkcjonalność np. do automatyzacji włączającej obraz z kamery na TV podłączonym do bramki po HDMI.

Identyfikatory komend są zapisywane w formacie szesnastkowym (Hexadecimal).
Nas najbardziej interesują te komendy:

  • One Touch Play - ta komenda umożliwia urządzeniom przełączanie telewizora w celu użycia go jako aktywnego źródła po rozpoczęciu odtwarzania. Żeby testowo wysłać komendę HDMI-CEC wystarczy w konsoli wkleić coś takiego:
su -c 'echo 0x40 0x04 > /sys/class/cec/cmd'
  • System Standby - umożliwia przełączanie urządzeń w tryb czuwania
su -c 'echo 0x40 0x36 > /sys/class/cec/cmd'
  • Volume UP - przycisk głośniej
su -c 'echo 0x40 0x44 0x41> /sys/class/cec/cmd'
  • Volume DOWN - przycisk ciszej
su -c 'echo 0x40 0x44 0x42> /sys/class/cec/cmd'
  • Volume MUTE - wyciszenie
su -c 'echo 0x40 0x44 0x43> /sys/class/cec/cmd'

Tu jest fajny opis działania HDMI-CEC
https://kwikwai.com/knowledge-base/the-hdmi-cec-bus/

a tu można “wyklikać” komendy HDMI-CEC:
https://www.cec-o-matic.com/

np. żeby sprawdzić komendę mute wystarczy :wink: zrobić tak:

Czy komuś się udało wysłać jakąś komendę HDMI-CEC z bramki do TV?

8 polubień

Mam podłączoną bramkę do amplitunera Onkyo poprzez HDMI.
Power on/off:
su -c 'echo 0x45 0x44 0x40 > /sys/class/cec/cmd'
Vol+
su -c 'echo 0x45 0x44 0x41 > /sys/class/cec/cmd'
Vol-
su -c 'echo 0x45 0x44 0x42 > /sys/class/cec/cmd'
Mute
su -c 'echo 0x45 0x44 0x43 > /sys/class/cec/cmd'
Przełączanie HDMI input na kolejny:
su -c 'echo 0x45 0x44 0x69 > /sys/class/cec/cmd'
Przełączanie trybu Stereo/Mono/Surround/Dolby …
su -c 'echo 0x45 0x44 0x33 > /sys/class/cec/cmd'

Jeszcze kilka automatyzacji i mogę wywalić sterowanie IRdą z broadlinkiem :slight_smile:

2 polubienia

A czy do tych komend może jest jakaś gotowa karta obrazująca pilot?
Czy może już niedługo będzie?

gotowego uniwersalnego pilota się nie zrobi, bo tak jak widać u każdego może być inaczej
ja mam bramkę bezpośrednio wpiętą do TV a Sebastian przez amplituner i kody są już inne

ale oczywiście każdy kto “znajdzie swoje kody sterujące CEC” może sobie dodać własny pilot
wystarczy

  1. zdefiniować przyciski

  2. ułożyć odpowiednio w karcie siatka

Itd.

PS
Z tym serwisem CEC chodziło mi o to żeby włączać na TV widok z kamery - zrobić taki wideodomofon z bramki podłączonej do TV. Opiszemy to w dokumentacji jak ta usługa cec_command będzie już wydana.

Taki scenariusz:

  • Dzwonek do bramki / drzwi
  • Jolka wie, że jestem w domu
  • Jolka nie wysyła mi powiadomienia na telefon (bo jestem w domu)
  • Jolka mówi -> “Ktoś dzwoni do drzwi, zobacz kto to na TV” i włącza TV po CEC, na który przekierowuje mi widok z kamery
  • Jolka pyta, “Czy mam otworzyć?” i włącza mikrofon…
  • ja zapominam się i zamiast “Otwórz furtkę” pytam “Jolka a kto to przyszedł?”
  • Jolka mówi “Nie rozumiem Jolka a kto to przyszedł”
  • ja mówię … ech Jolka, jaka Ty jesteś jeszcze nieogarnięta - tyle lat i Ty dalej nie rozpoznajesz Celiny!

i tak sobie gadamy :wink:

2 polubienia

Sromotnie brakuje nam wszystkim funkcjonalności domofonu w HA. Podgląd z kamer jest dobrze zintegrowany, a do dziś nie ma przesyłu dźwięku dwukierunkowego - funkcji domofonu.
Jest kamer ESP32 - foto na ekranie by wystarczyło. Gdyby tak jeszcze pogadać ze smartfona w aplikacji AIS do głośniczka przy bramie. Albo chociaż odtworzyć zaprogramowany komunikat kurierowi. :thinking:

Jak można znaleźć?

Bo w telewizorach LG to sie chyba nazywa SIMPLINK bo być może mam inne kody

tu się da wyklikać kody ale to nie jest proste… niestety

tak, zgadza się
mi kamery IP działają OK, ale żeby głos w HA z kamery usłyszeć to już chyba trzeba najpierw skompilować jądro Linux-a i ogólnie mieć najwyższy stopień wtajemniczenia :wink:

Z obrazem zresztą też nie jest idealnie, bo jest opóźnienie często (przez stream w ha). Dlatego pomysł mamy taki, że kiedyś przekierujemy obraz z wybranej kamery bezpośrednio na bramkę podłączoną do TV.

To przełączanie aktywności (programów) na bramce to też jest usługa, dzięki czemu w połączeniu z CEC i ESP32 kiedyś powinno dać się te klocki połączyć w video domofon.

4 polubienia

Czy ta funkcjonalność już jest lub będzie?

Dzięki :slightly_smiling_face:

1 polubienie

Usługa jest, @sdsi - testuj… ale opisu rzeczywiście nie ma w dokumentacji.

1 polubienie

Dzięki. Masz rację oczywiście :slightly_smiling_face:

Przykładowo podane dwie komendy w usługach włączają i wyłączają tv.
Interesuje mnie komenda zmiany źródła sygnału.

Dopytam - tak funkcja przełącza, czyli raz wysłana aktywuje a drugi raz wysłana dezaktywuje tą funkcję?

Pytam w kontekście czy aktywacja nie wpływa (taką mam nadzieję) na wyłączanie bramki DEV3 po wyłączeniu TV (tak jest treraz domyślnie).

Proszę uprzejmie o info - dzięki :wink:

W teorii funkcja One Touch Play umożliwia bramce automatyczne włączanie telewizora i przełączanie jego portu wejściowego na port do którego podpięta jest bramka.
Niestety tylko w teorii… bo producenci sprzętu wdrażają standard HDMI-CEC na różne sposoby, więc urządzenia nie zawsze się rozumieją, i obsługiwane funkcje różnią się w zależności od telewizora.
Dlatego nie da się zrobić uniwersalnego pilota CEC - ale każdy może sobie zrobić własny dostosowany do jego TV. Do tego jest ta usługa.

To że CEC mamy cały czas wyłączony to znaczy, że my ignorujemy/blokujemy komunikaty CEC które przychodzą po HDMI do bramki z innych urządzeń - nie pozwalamy w ten sposób uśpić czy wyłączyć bramki.
Ale my możemy z brami wystać komunikat CEC za pomocą usługi - czyli pozwalamy na wysyłanie komunikatów do urządzeń po HDMI ale sami nie reagujemy na komunikaty HDMI. Powinno być OK.

2 polubienia

Bardzo dziękuję za informacje :wink:

1 polubienie

Miałbym pytanie odnośnie HDMI-CEC.
Czy jest możliwość wyciągnięcia sygnału z HDMI, że telewizor jest włączony/wyłączony?

Prosto się jeszcze nie da - nie mam czasu żeby to bardziej rozkminić…
ale dla tych co potrafią kodować myślę, że chyba są 3 opcje:

1.Bardzo niskopoziomowo - wysyłając komendy i czytając wyjście CEC

wyjście cec jest w /sys/class/cec/dump_reg

cat /sys/class/cec/dump_reg

czyli można wysłać komendę odczekać sekundę i sprawdzić wyjście

su -c "echo 0x40 0x04 > /sys/class/cec/cmd && sleep 1 && cat /sys/class/cec/dump_reg"

oczywiście trzeba zrozumieć co jest na wyjściu :wink:

2. Średnio niskopoziomowo - poziomu linuxa binarką cectools

zamiast rozumieć co jest w dump_reg możemy skompilować binarkę (biblotekę do cec) i próbować komunikować się przez nią z CEC.
Tej binarki nie ma jeszcze w naszym repo apt, ale można skompilować na bramce, 2 projetky

kompilacja krok po kroku, na bramce

:warning:
Kompiluj na bramce to tylko jeżeli rozumiesz co robisz.
Pamiętaj, że to co robisz a czego nie ma w dokumentacji AIS, robisz na własną odpowiedzialność - nikt tego nie wspiera i nie będzie tych komend tłumaczył :wink:

apt install cmake
mkdir cectools; cd cectools
git clone https://github.com/Pulse-Eight/platform.git
cd platform; mkdir build; cd build
cmake ..
sed -i "s#/usr/local#$PREFIX#g" cmake_install.cmake
make
make install
cd ../..
git clone https://github.com/mdrjr/libcec.git
cd libcec
./bootstrap
./configure --enable-exynos --prefix=$PREFIX
make
make install

powinno się dziać coś takiego

a na koniec można już sprawdzać co potrafi cec-client

3. Wysoko poziomowo - przez API Android

z poziomu Javy

https://source.android.com/devices/tv/hdmi-cec

1 polubienie

czy da się jakoś ustawić aby po każdym restarcie bramki nie trzeba było ręcznie w ustawieniach bramki włączać cec aby w tv zamiast hdmi2 wyświetlała się nazwa bramki?