Raspberry Pi ของฉันจะเปิด / ปิดทีวี Samsung ได้อย่างไร


17

ฉันต้องการที่จะสามารถเปิดทีวี Samsung ของฉัน (และปิด) ราสเบอร์รี่ pi ติดกับทีวีของฉันผ่านสาย HDMI

ลูกพี่ลูกน้องของฉันทำสิ่งนี้กับทีวีอื่นแล้วและมันใช้งานได้ แต่ดูเหมือนว่าซัมซุงจะไม่ทำงาน

  • วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?

  • เป็นไปได้อย่างไร?

ขอบคุณสำหรับความช่วยเหลือของคุณ!

คำตอบ:


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คำสั่ง to


เธรดบอกว่าคำสั่งต่อไปนี้เปิดทีวี Samsung สำเร็จแล้ว:

echo "on 0" | cec-client -s



คำสั่งต่อไปนี้เปลี่ยนแหล่งที่มาจาก TV Tuner เป็น 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'

1
FWIW echo "standby 0" | cec-client -sทำงานที่ดีสำหรับพานาโซนิคทีวีของฉันแม้ว่ากระบวนการแผงหลังและฉันได้kill -9มัน
Sparhawk

ลิงก์เสีย
jjmontes

@jjmontes ขอบคุณฉันอัปเดตคำตอบด้วยข้อมูลทางเลือกเกี่ยวกับวิธีการติดตั้งcec-client
HeatfanJohn

ฉันสามารถสแตนด์บาย Samsung TV ของฉัน ฉันได้เปลี่ยนการตั้งค่าต่อไปนี้บนทีวี: แอปพลิเคชั่น / AnyNet + (HDMI-CEC) / การตั้งค่า / ปิดอัตโนมัติ หลังจากที่ฉันตั้งค่านี้เป็นจริงทีวีจะสแตนด์บายเมื่อฉันส่งสแตนด์บาย 0.
Filhit

7

คุณต้องมีโทรทัศน์ที่รองรับCEC (Consumer Electronics Control)ผ่าน HDMI อาจเป็นความคิดที่ดีที่จะปรึกษาคู่มือทีวีหรือเว็บไซต์ บริษัท ของคุณเพื่อค้นหารายละเอียดเกี่ยวกับกรณีเฉพาะของคุณรวมทั้งการค้นหาอย่างรวดเร็วสำหรับ "TV_model + CEC" อาจให้คำแนะนำบางอย่างแก่คุณ

หากทีวีของคุณเพิ่งทำเมื่อไม่กี่ปีที่ผ่านมามีโอกาสดีที่คุณอาจพบวิธีการตั้งค่าและเปิดใช้งาน CEC แต่สำหรับรุ่นเก่าที่มีโอกาสไม่ดีนัก

การใช้งาน Samsung CEC นั้นเรียกว่าAnynet+คุณอาจลองค้นหาด้วยเช่นกัน


1
ฉันยังพบว่าฉันต้องเริ่ม XMBC ก่อนที่ HDMI-CEC จะทำงานและทีวีก็เริ่มต่อไป
Thorbjørn Ravn Andersen

4

คุณสามารถทำบางสิ่งบางอย่างเช่นทีวีระยะไกลที่มีไฟ LED IR มีการสอนเกี่ยวกับ Adafruitในสิ่งที่คุณต้องการจะทำ นี่เป็นอีกบล็อกโพสต์เกี่ยวกับเรื่องเดียวกัน

หมายเหตุ:คุณจะต้องใช้หมุด GPIO ฉันไม่แน่ใจว่าคุณกำลังมองหาวิธีการแก้ปัญหาที่ใช้พวกเขาหรือไม่


คุณต้องมี IR led ไม่ใช่เซ็นเซอร์เพื่อส่งคำสั่งไปยังทีวีจาก Pi
Gerben

1
@Gerben แก้ไขเพื่อแก้ไข คุณสามารถลบการลงคะแนนตอนนี้หรือไม่
syb0rg

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

นี่จะเป็นการแฮ็คที่ดี แต่ไม่มีวิธีที่จะได้รับข้อเสนอแนะใด ๆ ว่าสัญญาณของคุณทำในสิ่งที่พวกเขาต้องการ ลำดับของตัวเลือกในเมนูการสลับแหล่งขึ้นอยู่กับแหล่งที่มาปัจจุบัน
EDP

4

หลังจากติดตั้งไคลเอนต์ cec ต่อคำตอบข้างต้นโดย HeatfanJohn ฉันสามารถเปิด / ปิด 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"

ตอนนี้คุณสามารถกำหนดเวลางานกลางคืนเพื่อปิดทีวีในกรณีที่คุณหลับ:

crontab -e

เพิ่มรายการต่อไปนี้:

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

2

ฉันยังเขียนสคริปต์เพื่อช่วยในเรื่องนี้ ฉันไปไกลกว่า CaptainRewind แม้ว่าเขาจะทำได้ดี นี่เป็นเพียงเชลล์สคริปต์ที่เขียนขึ้นเพื่อควบคุมทีวีของฉันดังนั้นฉันจึงไม่รวมสิ่งที่ไม่สนับสนุน (เช่นตัวควบคุมระดับเสียงและแชนเนลฉันยังคงมองหาวิธีที่จะทำสิ่งเหล่านี้โดยไม่ต้องซื้ออะไรเพิ่ม ฮาร์ดแวร์) และมันรวมถึงรายละเอียดเฉพาะการตั้งค่าเช่น "TV อินพุต raspi" ซึ่งมีความหมายเหมือนกันกับ "อินพุตทีวี 3" แต่ฉันทิ้งไว้เพื่อให้คุณสามารถดูวิธีการปรับแต่งดังกล่าวด้วยตนเอง

คุณสามารถใช้งานได้อย่างง่ายดายหากคุณวางไว้ที่ / usr / local / bin / tv โดยการออกคำสั่งเช่น "tv on" "tv off" หรือ "tv input 1" หรือคุณสามารถใส่ไว้ในไดเรกทอรีบ้านของคุณเป็นทีวี ดวลจุดโทษและใช้งานได้โดยตรงจากที่นั่น

ฉันหวังว่านี่จะช่วยให้บางคน

#!/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 ') ฉันโชคดีกว่ากับทีวี Samsung UE46F6500 และ OpenELEC (เป็นทางการ) เวอร์ชัน: 5.95.3 พร้อม Kodi แม้ว่าการควบคุม CEC จะหายไปหลังจากใส่ทีวีของฉัน เพื่อสแตนด์บายหรือเปิดทีวีของฉันอีกครั้ง:

รอ:

echo "แสตนด์บาย 0" | cec-client -s

บน:

echo "บน 0" | cec-client -s

เปลี่ยนแหล่งที่มา:

echo "เป็น" | cec-client -s

อย่างไรก็ตามฟังก์ชั่นเหล่านี้ใช้การควบคุมพิเศษของอินเตอร์เฟส CEC จาก Kodi ดังนั้น Kodi จึงสูญเสียการควบคุม CEC หลังจากคำสั่งใด ๆ เหล่านี้และรีโมทหยุดทำงาน คุณจะต้องรีสตาร์ท Kodi เพื่อให้มันทำงานได้อีกครั้ง:

systemctl รีสตาร์ทโคดี้

Kodi (> = 13) มีฟังก์ชันในตัว CECToggleState, CECActivateSource, CECStandby บางคนกำลังทำงานเพื่อส่งคำสั่ง cec เหล่านี้ผ่านทาง python โดยใช้ funcitons ในตัวหรือค้นหาความเป็นไปได้ในการเปิด cec-hardware ในโหมดที่แชร์: 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.