라즈베리 파이에서 삼성 TV를 켜고 끄는 방법


17

라즈베리 파이가 HDMI 케이블을 통해 TV에 연결되어 삼성 TV를 켜고 끌 수 있기를 원합니다.

내 사촌은 이미 다른 TV와 함께이 작업을 수행했지만 작동했지만 삼성과는 작동하지 않는 것 같습니다.

  • 가장 쉬운 방법은 무엇입니까?

  • 이것이 어떻게 가능한지?

당신의 도움을 주셔서 감사합니다!

답변:


12

@lenik의 답변에서 알 수 있듯이 TV는 CEC를 지원해야합니다. 나는 명령 행 유틸리티 포함 libcec의 컴파일 된 버전 설치 cec-client에서 소스 포지를 다음 명령을 사용하여 :

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



업데이트 : 2017-02-27

위의 SourceForge에 대한 링크가 더 이상 존재하지 않습니다. 이 기사 에 따르면 cec-client다음 명령을 사용하여 설치할 수 있습니다 .

    sudo apt-get install cec-utils

이 답변의 나머지 부분은 여전히 ​​유효합니다.


다음은 raspberrypi.org 의 스레드를 사용하여 cec-client명령 실행에 대해 설명 합니다.


스레드는 다음 명령이 삼성 TV를 성공적으로 켰다 고 말합니다.

echo "on 0" | cec-client -s



다음 명령은 소스를 TV 튜너에서 Raspi HDMI로 변경합니다.

echo "as" | cec-client -s

또는

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



TV를 끄는 데 다음 명령이 실패했습니다.

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

또는

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 -s는 파나소닉 TV에서 잘 작동하지만 프로세스가 중단되고 그 후에야 kill -9했습니다.
Sparhawk

링크가 끊어졌습니다.
jjmontes

@jjmontes 감사합니다. 설치 방법에 대한 대체 정보로 답변을 업데이트했습니다.cec-client
HeatfanJohn

삼성 TV를 대기시킬 수있었습니다. TV에서 Application / AnyNet + (HDMI-CEC) / Setup / Auto Turn Off 설정을 변경했습니다. 이것을 true로 설정 한 후 대기 0을 보내면 TV가 대기 상태가됩니다.
filhit

7

HDMI를 통한 CEC (Consumer Electronics Control) 프로토콜 을 지원하는 TV 세트가 필요합니다 . 특정 사례와 관련된 세부 정보를 찾으려면 TV 설명서 또는 회사 웹 사이트를 참조하고 "TV_model + CEC"를 빠르게 검색하면 몇 가지 지침을 제공 할 수 있습니다.

기본적으로 TV가 몇 년 전에 만들어진 경우 CEC를 설정하고 활성화하는 방법을 찾을 가능성이 있지만 구형 모델의 경우에는 좋지 않습니다.

삼성 CEC 구현을이라고 Anynet+하면 검색하려고 할 수도 있습니다.


1
또한 HDMI-CEC가 작동하고 TV가 작동하기 전에 XMBC를 시작해야한다는 것을 알았습니다.
Thorbjørn Ravn Andersen

4

당신은있는 TV 리모콘 같은 것을 만들 수있는 IR LED를 . Adafruit 에 대한 자습서 가 있습니다. 같은 주제에 대한 다른 블로그 게시물이 있습니다.

참고 : GPIO 핀을 사용해야합니다. 당신이 그것들을 사용했는지 아닌지를 찾고 있는지 확실하지 않습니다.


Pi에서 TV로 명령을 보내려면 센서가 아닌 IR LED가 필요합니다.
Gerben

1
@Gerben 수정하도록 수정되었습니다. 지금 다운 투표를 제거 할 수 있습니까?
syb0rg

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

이것은 좋은 해킹을 만들지 만, 신호가 원하는 것을했는지 여부에 대한 피드백을 얻을 수있는 방법은 없습니다. 또한 소스 전환 메뉴의 옵션 순서는 현재 소스에 따라 다릅니다.
EDP

4

HeatfanJohn의 위의 답변에 따라 cec-client를 설치 한 후 Vizio E390i-A1 LED HDTV의 전원을 성공적으로 켜고 끌 수 있습니다. 나는 공동체를위한 대본을 썼습니다 :

다음을 통해 새 파일을 만듭니다.

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

다음에 붙여 넣기 :

#!/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

실행 가능하게 만드십시오.

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

그런 다음 별명을 작성하십시오.

vi /home/pi/.bashrc

다음을 추가하십시오.

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

저장, 종료, 로그 오프 / 로그온 (또는 .bashrc 소스) 이제 "tvon"및 "tvoff"를 사용하여 TV를 켜거나 끌 수 있습니다.

이제 잠들 때 TV를 끄도록 야간 작업을 예약 할 수 있습니다.

crontab -e

다음을 추가하십시오.

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

2

또한 이것을 돕기 위해 몇 가지 스크립트를 작성했습니다. 그가 좋은 일을했지만 CaptainRewind보다 조금 더 갔다. 이것은 내 TV를 제어하기 위해 작성된 셸 스크립트이므로 볼륨 및 채널 컨트롤과 같이 지원하지 않는 항목은 포함하지 않았습니다. 여전히 추가 기능을 구입하지 않고 이들 중 하나를 수행하는 방법을 찾고 있습니다 하드웨어) 및 'tv 입력 3'과 동의어 인 'tv 입력 raspi'와 같은 설정 별 세부 정보가 포함되어 있지만 직접 맞춤 설정하는 방법을 볼 수 있도록 해당 정보를 남겼습니다.

"tv on" "tv off"또는 "tv input 1"과 같은 명령을 실행하여 / usr / local / bin / tv에 넣거나 홈 디렉토리에 tv로 넣을 수 있습니다. 거기에서 직접 사용하십시오.

이것이 일부 사람들에게 도움이되기를 바랍니다.

#!/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

최신 버전의 XBMC (현재 Kodi)로 다시 시도하고 싶을 수 있습니다. TV를 넣은 후에 CEC 제어가 손실되었지만 Samsung UE46F6500 TV와 OpenELEC (공식) 버전 : 5.95.3을 사용하면 더 좋았습니다. 대기 또는 내 TV를 다시 켜려면 :

대기 :

에코 "대기 0"| cec-client -s

의 위에:

에코 "0"| cec-client -s

소스 변경 :

에코 "as"| cec-client -s

그러나 이러한 기능은 Kodi에서 CEC 인터페이스를 독점적으로 제어하므로 이러한 명령 중 하나와 원격 작동이 중지되면 Kodi는 CEC 제어를 잃게됩니다. 다시 작동하려면 Kodi를 다시 시작해야합니다.

systemctl restart kodi

Kodi (> = 13)에는 CECToggleState, CECActivateSource, CECStandby 함수가 내장되어 있습니다. 일부 사람들은 이러한 내장 함수를 사용하여 파이썬을 통해 cec 명령을 전달하거나 공유 모드에서 cec 하드웨어를 열 가능성을 찾고 있습니다. http://forum.kodi.tv/showthread.php?tid=207524https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- 기능 / 3638 / 4

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.