W jaki sposób mój Raspberry Pi może włączać / wyłączać telewizor Samsung


17

Chcę mieć możliwość włączania i wyłączania telewizora Samsung. Raspberry Pi jest podłączony do mojego telewizora za pomocą kabla HDMI.

Mój kuzyn już to zrobił z innymi telewizorami i działało, ale z Samsungem wydaje się nie działać.

  • Jak najłatwiej to zrobić?

  • Jak to jest możliwe?

Dzięki za pomoc!

Odpowiedzi:


12

Jak mówi odpowiedź @ lenik, telewizor musi obsługiwać CEC. Zainstalowałem skompilowaną wersję libcec który zawierał narzędzia wiersza polecenia cec-clientz SourceForge za pomocą następujących poleceń:

wget http://sourceforge.net/projects/selfprogramming/files/libCEC.deb/libcec_2.1.0-1_armhf.deb/download -O libcec_2.1.0-1_armhf.deb

sudo dpkg -i libcec_2.1.0-1_armhf.deb



AKTUALIZACJA: 27.02.2017

Powyższy link do SourceForge już nie istnieje. Zgodnie z tym artykułem można zainstalować cec-clientza pomocą następującego polecenia:

    sudo apt-get install cec-utils

Pozostała część tej odpowiedzi powinna być nadal aktualna.


Oto wątek na raspberrypi.org, który omawia użycie cec-clientpoleceń do wydawania.


Wątek mówi, że następujące polecenie pomyślnie włączyło telewizor Samsung:

echo "on 0" | cec-client -s



Następujące polecenia zmieniają źródło z tunera TV na Raspi HDMI:

echo "as" | cec-client -s

lub

echo "tx 1f 82 30 00" | cec-client -s



Następujące polecenia nie powiodły się przy wyłączaniu telewizora:

echo "tx 10 36" | cec-client -s 

lub

echo "standby 0" | cec-client -s

standby 0
DEBUG: [ 56474] << putting 'TV' (0) in standby mode
TRAFFIC: [ 56476]   << 10:36
DEBUG: [ 56477] sending data: len = 1, payload = 10:36
DEBUG: [ 56538] received data: header:00020001 p0:00003610 p1:00000000 p2:00000000 p3:00000000 reason:1
DEBUG: [ 56539] command transmitted
DEBUG: [ 56660] received data: header:00040002 p0:04360001 p1:00000000 p2:00000000 p3:00000000 reason:2
TRAFFIC: [ 56661]   >> 01:00:36:04
NOTICE: [ 56661]    >> TV (0) -> Recorder 1 (1): feature abort ( 0)
DEBUG: [ 56661] marking opcode 'standby' as unsupported feature for device 'TV'

1
FWIW echo "standby 0" | cec-client -sdziała dobrze dla mojego telewizora Panasonic, chociaż proces się opóźnia i musiałem to kill -9zrobić.
Sparhawk

Link jest zepsuty.
jjmontes,

@jjmontes Dzięki, zaktualizowałem odpowiedź o alternatywne informacje na temat instalacjicec-client
HeatfanJohn

Byłem w stanie czuwać z telewizorem Samsung. Zmieniłem następujące ustawienie w telewizorze: Aplikacja / AnyNet + (HDMI-CEC) / Ustawienia / Automatyczne wyłączanie. Po ustawieniu tej wartości prawda telewizor przejdzie w tryb gotowości, gdy wyślę tryb gotowości 0.
Filhit

7

potrzebujesz telewizora obsługującego protokół CEC (Consumer Electronics Control) przez HDMI. dobrym pomysłem może być zapoznanie się z instrukcją obsługi telewizora lub witryną firmy, aby znaleźć szczegółowe informacje na temat konkretnego przypadku, a także szybkie wyszukiwanie „TV_model + CEC” może dać ci kilka wskazówek.

Zasadniczo, jeśli Twój telewizor został wyprodukowany zaledwie kilka lat temu, istnieje duża szansa, że ​​znajdziesz sposób konfiguracji i włączenia CEC, ale w przypadku starszych modeli szanse nie są tak dobre.

Wywoływana jest implementacja Samsung CEC Anynet+, możesz też spróbować poszukać jej.


1
Odkryłem również, że muszę uruchomić XMBC, zanim HDMI-CEC zadziała i telewizor się włączy.
Thorbjørn Ravn Andersen

4

Możesz zrobić coś w rodzaju pilota do telewizora z diodą LED na podczerwień . Istnieje poradnik na temat Adafruita na temat tego, co chcesz zrobić. Oto kolejny post na blogu na ten sam temat.

Uwaga: będziesz musiał użyć pinów GPIO. Nie jestem pewien, czy szukałeś rozwiązania, które z nich skorzystałoby, czy nie.


Potrzebujesz diody IR, a nie czujnika, aby wysyłać polecenia do telewizora z Pi.
Gerben

1
@Gerben Edytowano, aby naprawić. Czy mógłbyś teraz usunąć głosowanie negatywne?
syb0rg

1
- (- 1) => +1 :-)
Gerben

To byłby dobry hack, ale nie ma sposobu, aby uzyskać informację zwrotną, czy twoje sygnały zrobiły to, co powinny. Również kolejność opcji w menu przełączania źródła zależy od jego bieżącego źródła.
EDP

4

Po zainstalowaniu klienta cec zgodnie z powyższą odpowiedzią HeatfanJohn z powodzeniem mogę włączać / wyłączać mój telewizor Vizio E390i-A1 LED HDTV. Napisałem skrypt dla społeczności:

Utwórz nowy plik za pomocą:

mkdir /opt/scripts; vi /opt/scripts/turntv.sh

wklej w następujący sposób:

#!/bin/bash
#Written by CaptainRewind for the RaspberryPi community
#Modify as needed
#Updated 2014-01-22:
#Now includes full path to cec-client (for cron purposes)
#Also includes "input" command to switch TV Input to RaspberryPi

action=${1}

cecBin="/usr/local/bin/cec-client"

onCommand='echo "on 0" | ${cecBin} -s'
offCommand='echo "standby 0" | ${cecBin} -s'
inputCommand='echo "as" | ${cecBin} -s'

do_on()
{
eval ${onCommand} > /dev/null 2>&1
}

do_off()
{
eval ${offCommand} > /dev/null 2>&1
}

do_input()
{
eval ${inputCommand} > /dev/null 2>&1
}

case ${action} in

        on)
                do_on
                exit 0
                ;;

        off)
                do_off
                exit 0
                ;;

        input)
                do_input
                exit 0
                ;;

        *)
                echo $"Usage: $0 {on|off|input}"
                exit 1
                ;;

esac

Spraw, by był wykonywalny:

sudo chmod +x /opt/scripts/turntv.sh

Następnie utwórz aliasy:

vi /home/pi/.bashrc

dodaj następujące:

alias tvon="/opt/scripts/turntv.sh on"
alias tvoff="/opt/scripts/turntv.sh off"
alias input="/opt/scripts/turntv.sh input"

Zapisz, wyjdź, wyloguj się / zaloguj (lub po prostu pobierz .bashrc). Teraz możesz włączyć lub wyłączyć telewizor za pomocą „tvon” i „tvoff”.

Teraz możesz zaplanować nocne zadanie wyłączenia telewizora na wypadek, gdybyś zasnął:

crontab -e

Dodaj następujące:

00 03 * * * /opt/scripts/turntv.sh off

2

Napisałem też kilka skryptów, które w tym pomogą. Poszedłem trochę dalej niż CaptainRewind, choć wykonał kawał dobrej roboty. To tylko skrypt powłoki napisany w celu kontrolowania mojego telewizora, więc nie uwzględniłem niczego, co nie obsługuje (takich jak regulacja głośności i kanałów; wciąż szukam sposobu na zrobienie jednego z nich bez kupowania dodatkowych pieniędzy sprzęt) i zawiera szczegóły związane z konfiguracją, takie jak „wejście TV raspi” będące synonimem „wejście TV 3”, ale zostawiłem je, abyś mógł zobaczyć, jak dokonać takich dostosowań dla siebie.

Możesz go łatwo użyć Jeśli umieścisz go w / usr / local / bin / tv, wydając takie polecenia, jak „tv on”, „tv off” lub „tv input 1”, lub po prostu umieść go w katalogu domowym jako tv. sh i użyj go bezpośrednio stamtąd.

Mam nadzieję, że to pomaga niektórym ludziom.

#!/bin/bash
# must be called with a parameter
# tv.sh [command]
# will send the associated command to the TV over CEC.

if [ $# -lt 1 ] #Check to see if at least one parameter was supplied
then
  echo "Must be called with the command to send to the television"
  echo "Examples include on, off, and input."
  echo "example: " $0 "input PC"        # $0 is the name of the program
  echo "For help, use: " $0 " -? "
  exit 1
fi

case $1 in
  "-?")       echo "Supported commands include: on, off, status, as,"
              echo "input [source]" ;;
  ## begin list of commands.
  ## most of these came from http://www.cec-o-matic.com/
  ## more can be added, including proprietary commands.
  "on")       echo "on 0" | cec-client -s ;;
  "off")      echo "standby 0" | cec-client -s ;;
  "status")   echo "pow 0" | cec-client -s |grep "power status:" ;;
  "as")       echo "as" | cec-client -s ;;
  "input")
  if [ $# -ge 2 ]       # if there were 2 or more parameters
  then
    case $2 in          # check the second one
        # NOTE: These must all be broadcast to work. (2nd nibble must be F)
      "1")      echo "tx 1F 82 10 00" | cec-client -s ;;
      "bluray") echo "tx 1F 82 10 00" | cec-client -s ;; # same as 1
      "2")      echo "tx 1F 82 20 00" | cec-client -s ;;
      "3")      echo "tx 1F 82 30 00" | cec-client -s ;;
      "pc")     echo "tx 1F 82 30 00" | cec-client -s ;; # same as 3
      "raspi")  echo "tx 1F 82 30 00" | cec-client -s ;; # same as 3
      "4")      echo "tx 1F 82 40 00" | cec-client -s ;;
    esac
  else
    echo "input needs a second parameter"
    echo "usage: " $0 " input [input name]"
    echo "input name is 1-4, bluray, pc, or raspi"
  fi
  ;;  # end of the input case

  *) echo $1 "is not a recognized parameter. " $0 " -? for a list." ;;
esac
exit 0

0

Możesz spróbować ponownie z najnowszą wersją XBMC (teraz o nazwie Kodi '). Miałem więcej szczęścia z moim telewizorem Samsung UE46F6500 i OpenELEC (oficjalna) Wersja: 5.95.3 z Kodi, chociaż kontrola CEC została utracona po umieszczeniu mojego telewizora aby przejść w tryb gotowości lub ponownie włączyć telewizor:

Czekaj:

echo „tryb gotowości 0” | cec-client -s

Na:

echo „na 0” | cec-client -s

Zmień źródło:

echo „jak” | cec-client -s

Jednak funkcje te przejmują wyłączną kontrolę nad interfejsem CEC od Kodi, więc Kodi traci kontrolę nad CEC po którymkolwiek z tych poleceń, a pilot przestaje działać. Aby ponownie uruchomić Kodi, musisz ponownie uruchomić Kodi:

systemctl uruchom ponownie kodi

Kodi (> = 13) ma wbudowane funkcje CECToggleState, CECActivateSource, CECStandby Niektóre osoby pracują nad przekazywaniem tych poleceń cec przez Python przy użyciu tych wbudowanych funkcji lub szukają możliwości otwarcia sprzętu CEC w trybie współużytkowanym: http://forum.kodi.tv/showthread.php?tid=207524 i https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- funkcje / 3638/4

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.