Làm cách nào để Raspberry Pi của tôi có thể bật / tắt TV Samsung của tôi


16

Tôi muốn có thể bật TV Samsung (và tắt), quả mâm xôi pi được nối với TV của tôi thông qua cáp HDMI.

Anh em họ của tôi đã làm điều này với Tv khác và nó đã hoạt động, nhưng với Samsung dường như không hoạt động.

  • cách dễ nhất để làm điều này là gì?

  • Sao có thể như thế được?

Cảm ơn bạn đã giúp đỡ!

Câu trả lời:


12

Như câu trả lời của @ lenik, TV của bạn cần hỗ trợ CEC. Tôi đã cài đặt một phiên bản libcec đã biên dịch, bao gồm tiện ích dòng lệnh cec-clienttừ SourceForge bằng các lệnh sau:

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



CẬP NHẬT: 2017 / 02-27

Liên kết ở trên đến SourceForge không còn tồn tại. Theo bài viết này, bạn có thể cài đặt cec-clientbằng lệnh sau:

    sudo apt-get install cec-utils

Phần còn lại của câu trả lời này vẫn còn hiệu lực.


Đây là một chủ đề trên raspberrypi.org thảo luận về việc sử dụng các cec-clientlệnh để phát hành.


Chủ đề nói rằng lệnh sau đã bật thành công TV Samsung:

echo "on 0" | cec-client -s



Các lệnh sau thay đổi nguồn từ TV Tuner sang Raspi HDMI:

echo "as" | cec-client -s

hoặc là

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



Các lệnh sau không thành công trong việc tắt TV:

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

hoặc là

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 -shoạt động tốt cho TV Panasonic của tôi, mặc dù quá trình này bị trì hoãn và tôi đã phải làm kill -9điều đó.
Sparhawk

Liên kết bị hỏng.
jjmontes

@jjmontes Cảm ơn, tôi đã cập nhật câu trả lời với thông tin thay thế về cách cài đặtcec-client
HeatfanJohn 27/2/2017

Tôi đã có thể chờ TV Samsung của tôi. Tôi đã thay đổi cài đặt sau trên TV: Ứng dụng / AnyNet + (HDMI-CEC) / Cài đặt / Tự động tắt. Sau khi tôi đặt điều này thành đúng, TV sẽ chuyển sang chế độ chờ khi tôi gửi chế độ chờ 0.
filhit

7

bạn cần có TV hỗ trợ giao thức CEC (Điều khiển điện tử tiêu dùng) qua HDMI. có thể là một ý tưởng tốt để tham khảo hướng dẫn sử dụng TV hoặc trang web của công ty để tìm chi tiết về trường hợp cụ thể của bạn, cũng như tìm kiếm nhanh "TV_model + CEC" có thể cung cấp cho bạn một vài gợi ý.

về cơ bản, nếu TV của bạn được sản xuất cách đây vài năm, rất có thể bạn sẽ tìm thấy cách thiết lập và kích hoạt CEC, nhưng đối với các mẫu cũ hơn thì cơ hội không tốt lắm.

Triển khai Samsung CEC được gọi Anynet+, bạn cũng có thể cố gắng tìm kiếm điều đó.


1
Tôi cũng thấy rằng tôi cần khởi động XMBC trước khi HDMI-CEC hoạt động và TV tiếp tục.
Thorbjørn Ravn Andersen

4

Bạn có thể làm một cái gì đó giống như một chiếc điều khiển TV bằng đèn LED hồng ngoại . Có một hướng dẫn về Adafbean về những gì bạn muốn làm. Đây là một bài viết trên blog về cùng một chủ đề.

Lưu ý: Bạn sẽ phải sử dụng các chân GPIO. Tôi không chắc liệu bạn có đang tìm kiếm một giải pháp sử dụng chúng hay không.


Bạn cần một đèn led IR, không phải cảm biến, để gửi lệnh đến TV từ Pi.
Gerben

1
@Gerben Đã chỉnh sửa. Bạn có thể loại bỏ phiếu bầu xuống bây giờ?
syb0rg

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

Điều này sẽ tạo ra một vụ hack tốt, nhưng không có cách nào để nhận được bất kỳ phản hồi nào cho dù tín hiệu của bạn đã làm những gì họ cho là sẽ làm. Ngoài ra thứ tự của các tùy chọn trong menu chuyển đổi nguồn phụ thuộc vào nguồn hiện tại của nó.
EDP

4

Sau khi cài đặt cec-client theo câu trả lời trên của HeatfanJohn, tôi có thể bật / tắt thành công HDTV LED Vizio E390i-A1 của tôi. Tôi đã viết một kịch bản cho cộng đồng:

Tạo tập tin mới thông qua:

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

dán vào sau:

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

Làm cho nó thực thi:

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

Sau đó, tạo bí danh:

vi /home/pi/.bashrc

thêm những điều sau:

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

Lưu, thoát, đăng xuất / đăng nhập (hoặc chỉ nguồn .bashrc của bạn). Bây giờ bạn có thể bật hoặc tắt TV bằng cách sử dụng "tvon" và "tvoff".

Bây giờ bạn có thể lên lịch cho một công việc hàng đêm để tắt TV trong trường hợp bạn ngủ thiếp đi:

crontab -e

Thêm những điều sau:

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

2

Tôi cũng đã viết một vài kịch bản để giúp đỡ này. Tôi đã đi xa hơn một chút so với CaptainRewind, mặc dù anh ấy đã làm rất tốt. Đây chỉ là một tập lệnh shell được viết để điều khiển TV của tôi, vì vậy tôi không bao gồm bất kỳ thứ gì mà nó không hỗ trợ (chẳng hạn như điều khiển âm lượng và kênh; Tôi vẫn đang tìm cách để làm một trong những điều này mà không phải mua thêm phần cứng) và nó bao gồm các chi tiết dành riêng cho thiết lập như "tv input raspi" đồng nghĩa với "tv input 3" nhưng tôi đã để chúng ở đó để bạn có thể xem cách tự thực hiện các tùy chỉnh như vậy.

Bạn có thể sử dụng nó một cách dễ dàng Nếu bạn đặt nó tại / usr / local / bin / tv bằng cách ban hành các lệnh như "tv on" "tv off" hoặc "tv input 1" hoặc bạn có thể đặt nó vào thư mục chính của bạn dưới dạng tv. sh và sử dụng nó trực tiếp từ đó.

Tôi hy vọng điều này sẽ giúp một số người.

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

Bạn có thể muốn thử lại với phiên bản XBMC gần đây (bây giờ được gọi là Kodi ') Tôi đã gặp may mắn hơn với TV Samsung UE46F6500 và Phiên bản OpenELEC (chính thức): 5.95.3 với Kodi, mặc dù điều khiển CEC bị mất sau khi đặt tv của tôi để chờ hoặc bật lại tv của tôi:

Đứng gần:

tiếng vang "chờ 0" | cec-client -s

Trên:

tiếng vang "trên 0" | cec-client -s

Thay đổi nguồn:

tiếng vang "như" | cec-client -s

Tuy nhiên, các chức năng này chiếm quyền kiểm soát độc quyền giao diện CEC khỏi Kodi, do đó Kodi mất quyền kiểm soát CEC sau khi bất kỳ lệnh nào trong số này và điều khiển từ xa ngừng hoạt động. Bạn sẽ cần khởi động lại Kodi để nó hoạt động trở lại:

systemctl khởi động lại kodi

Kodi (> = 13) có các chức năng tích hợp CECToggleState, CECActivateSource, CECStandby Một số người đang làm việc để truyền các lệnh cec này thông qua python bằng cách sử dụng các funcitons tích hợp này hoặc tìm kiếm khả năng mở phần cứng cec trong chế độ chia sẻ: http://forum.kodi.tv/showthread.php?tid=207524https://discference.osmc.tv/t/control-tv-on-standby-toggle-USE-cec-kodi-built-in- chức năng / 3638/4

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.