Как мой Raspberry Pi может включить / выключить телевизор Samsung

17

Я хочу иметь возможность включать (и выключать) телевизор Samsung, подключив Raspberry Pi к телевизору через кабель HDMI.

Мой двоюродный брат уже сделал это с другим телевизором, и он работал, но с Samsung, кажется, не работает.

  • Какой самый простой способ сделать это?

  • Как это возможно?

Спасибо за вашу помощь!

Esteban
источник

Ответы:

12

Как говорится в ответе @ lenik, ваш телевизор должен поддерживать CEC. Я установил скомпилированную версию libcec, которая включала утилиту командной строки cec-clientиз SourceForge, используя следующие команды:

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команд для выдачи команд.


В потоке говорится, что следующая команда успешно включила телевизор Samsung:

echo "on 0" | cec-client -s



Следующие команды изменяют источник с ТВ-тюнера на Raspi HDMI:

echo "as" | cec-client -s

или

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



Следующие команды не помогли выключить телевизор:

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'
HeatfanJohn
источник
1
FWIW echo "standby 0" | cec-client -sотлично работает для моего телевизора Panasonic, хотя процесс останавливается после, и мне пришлось kill -9это сделать.
Sparhawk
Ссылка не работает.
Jjmontes
@jjmontes Спасибо, я обновил ответ альтернативной информацией о том, как установитьcec-client
HeatfanJohn
Я был в состоянии ожидания моего телевизора Samsung. Я изменил следующие настройки на телевизоре: Приложение / AnyNet + (HDMI-CEC) / Настройка / Автоотключение. После того, как я установил это значение true, телевизор
перейдет
7

Вам нужен телевизор с поддержкой протокола CEC (Consumer Electronics Control) по HDMI. Было бы неплохо проконсультироваться с руководством по телевизору или на веб-сайте компании, чтобы узнать подробности о вашем конкретном случае, также быстрый поиск по «TV_model + CEC» может дать вам несколько советов.

в основном, если ваш телевизор сделан всего несколько лет назад, есть хороший шанс, что вы сможете найти, как настроить и включить CEC, но для более старых моделей шансы не так хороши.

Реализация Samsung CEC называется Anynet+, вы можете попытаться найти это тоже.

Lenik
источник
1
Я также обнаружил, что мне нужно запустить XMBC до того, как HDMI-CEC сработает, и телевизор продолжится.
Турбьёрн Равн Андерсен
4

Вы можете сделать что-то вроде пульта для телевизора с ИК-светодиодом . На Adafruit есть учебник о том, что вы хотели бы сделать. Вот еще одно сообщение в блоге на ту же тему.

Примечание: вам придется использовать контакты GPIO. Я не уверен, искали ли вы решение, которое использовало бы их или нет.

syb0rg
источник
Вам понадобится ИК-светодиод, а не датчик, чтобы отправлять команды на телевизор от Pi.
Гербен
1
@ Гербен Отредактировано, чтобы исправить. Не могли бы вы убрать голосование против?
syb0rg
1
- (- 1) => +1 :-)
Гербен
Это было бы хорошим взломом, но нет никакого способа получить обратную связь, сделали ли ваши сигналы то, что они должны были сделать. Также порядок опций в меню переключения источника зависит от его текущего источника.
EDP
4

После установки cec-client согласно приведенному выше ответу HeatfanJohn, я успешно могу включить / выключить мой светодиодный HDTV Vizio E390i-A1. Я написал скрипт для сообщества:

Создать новый файл через:

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».

Теперь вы можете запланировать ночную работу, чтобы выключить телевизор на случай, если вы заснете:

crontab -e

Добавьте следующее:

00 03 * * * /opt/scripts/turntv.sh off
CaptainRewind
источник
2

Я также написал пару сценариев, чтобы помочь с этим. Я пошел немного дальше, чем CaptainRewind, хотя он хорошо поработал. Это всего лишь сценарий оболочки, написанный для управления моим телевизором, поэтому я не включил ничего, что он не поддерживает (например, регуляторы громкости и каналов; я все еще ищу способ сделать любой из этих вариантов, не покупая много дополнительного аппаратного обеспечения) и включает специфические для установки детали, такие как «tv input raspi», являющийся синонимом «tv input 3», но я оставил их так, чтобы вы могли видеть, как сделать такие настройки для себя.

Вы можете легко использовать его, если вы поместите его в / usr / local / bin / tv, введя такие команды, как "tv on", "tv off" или "tv input 1", или вы можете просто поместить его в свой домашний каталог как tv. Sh и использовать его прямо оттуда.

Я надеюсь, что это помогает некоторым людям.

#!/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
Tarcas
источник
0

Возможно, вы захотите повторить попытку с последней версией XBMC (теперь она называется Kodi). Мне повезло больше с моим телевизором Samsung UE46F6500 и OpenELEC (официальной) версией 5.95.3 с Kodi, хотя контроль CEC теряется после установки моего телевизора. в режиме ожидания или снова включить телевизор:

Ожидать:

эхо "ожидания 0" | cec-client -s

На:

эхо "на 0" | cec-client -s

Изменить источник:

эхо "как" | cec-client -s

Однако эти функции исключают контроль интерфейса CEC от Kodi, поэтому Kodi теряет контроль CEC после выполнения любой из этих команд, и пульт перестает работать. Вам нужно будет перезапустить Kodi, чтобы он снова заработал:

systemctl перезагрузить коди

Kodi (> = 13) имеет встроенные функции CECToggleState, CECActivateSource, CECStandby. Некоторые люди работают над передачей этих команд cec через python, используя эти встроенные функции, или ищут возможность открыть оборудование cec в режиме совместного использования: http://forum.kodi.tv/showthread.php?tid=207524 и https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- функции / 3638/4

sgiebels
источник