Skip to main content

通过 TCP/IP 连接远程控制三星电视

项目描述

从 Ape/samsungctl github 分叉,用于传统系列电视。

就我而言,是 F 系列(2013 年)三星电视。为 time_interval 添加了额外的时间来处理键码字符串

三星电视遗产

samsungTVlegacy 是一个库和命令行工具,用于通过 TCP/IP 连接远程控制三星电视。它目前支持 2016 年之前的电视以及大多数具有以太网或 Wi-Fi 连接的现代 Tizen-OS 电视。

依赖项

  • 蟒蛇 3

  • websocket-client(可选,适用于 2016 年以上的电视)

  • 诅咒(可选,用于交互模式)

安装

samsungTVlegacy 可以使用 pip <( https://pip.pypa.io/ >:

# pip install samsungTVlegacy

或者,您可以克隆 Git 存储库并运行:

# python setup.py install

无需安装即可使用命令行工具:

$ python -m samsungTVlegacy

命令行使用

您可以使用samsungTVlegacy命令将密钥发送到电视:

$ samsungTVlegacy --host <host> [options] <key> [key ...]

host是电视的主机名或 IP 地址。key是一个键码,例如 KEY_VOLDOWN。请参阅密钥代码

还有一种交互模式 (ncurses) 用于发送按键,以检查您的电视可以使用哪些键码:

$ samsungTVlegacy --host <host> [options] --interactive

使用samsungTVlegacy --help获取有关命令行参数的更多信息:

usage: samsungTVlegacy [-h] [--version] [-v] [-q] [-i] [--host HOST] [--port PORT]
                       [--method METHOD] [--name NAME] [--description DESC]
                       [--id ID] [--timeout TIMEOUT]
                       [key [key ...]]

Remote control Samsung televisions via TCP/IP connection

positional arguments:
  key                 keys to be sent (e.g. KEY_VOLDOWN) or set of keys (e.g. KEY_SOURCE KEY_RIGHT KEY_ENTER)

optional arguments:
  -h, --help          show this help message and exit
  --version           show program's version number and exit
  -v, --verbose       increase output verbosity
  -q, --quiet         suppress non-fatal output
  -i, --interactive   interactive control
  --host HOST         TV hostname or IP address
  --port PORT         TV port number (TCP)
  --method METHOD     Connection method (legacy or websocket)
  --name NAME         remote control name
  --description DESC  remote control description
  --id ID             remote control id
  --timeout TIMEOUT   socket timeout in seconds (0 = no timeout)

E.g. samsungTVlegacy --host 192.168.0.10 --name myremote KEY_VOLDOWN

可以从配置文件加载设置。该文件按此顺序从 $XDG_CONFIG_HOME/samsungctl_legacy.conf~/.config/samsungctl_legacy.conf/etc/samsungctl_legacy.conf搜索。一个简单的默认配置作为samsungctl_legacy.conf与源捆绑在一起。

图书馆使用

samsungTVlegacy 可以作为 Python 3 库导入:

import samsungTVlegacy

可以使用with语句构造Remote类的上下文管理的远程控制器对象:

with samsungTVlegacy.Remote(config) as remote:
    # Use the remote object

构造函数将配置字典作为参数。必须指定所有配置项。

钥匙

类型

描述

主持人

细绳

电视的主机名或 IP 地址。

港口

整数

TCP 端口号。(默认: 55000 )

方法

细绳

连接方式(legacywebsocket

姓名

细绳

遥控器名称。

描述

细绳

遥控器说明。

ID

细绳

附加遥控器 ID。

暂停

整数

以秒为单位的超时。0表示没有超时。

Remote对象非常简单,您只需要control (key) 方法。唯一的参数是一个字符串,命名要发送的密钥(例如 KEY_VOLDOWN)。请参阅密钥代码您可以使用同一个Remote对象多次调用控制。退出with语句时连接会自动关闭。

当出现问题时,您将收到异常:

例外

描述

拒绝访问

电视不允许您发送密钥。

连接关闭

连接已关闭。

未处理的响应

收到了意想不到的回复。

套接字超时

连接超时。

示例程序

这个简单的程序会打开和关闭菜单几次。

#!/usr/bin/env python3

import samsungTVlegacy
import time

config = {
    "name": "samsungTVlegacy",
    "description": "PC",
    "id": "",
    "host": "192.168.0.10",
    "port": 55000,
    "method": "legacy",
    "timeout": 0,
}

with samsungTVlegacy.Remote(config) as remote:
    for i in range(10):
        remote.control("KEY_MENU")
        time.sleep(0.5)

关键代码

接受的密钥列表可能因电视型号而异,但以下列表包含一些常用密钥代码及其说明。

三星 F 系列电视的按键代码数量有限,如下所示。

关键代码

描述

KEY_POWEROFF

关机

KEY_UP

向上

KEY_DOWN

KEY_LEFT

剩下

KEY_RIGHT

正确的

KEY_CHUP

向上

KEY_CHDOWN

P 下

KEY_ENTER

进入

KEY_RETURN

返回

KEY_CH_LIST

频道列表

KEY_MENU

菜单

KEY_SOURCE

资源

KEY_GUIDE

指导

KEY_TOOLS

工具

KEY_INFO

信息

KEY_RED

A / 红

KEY_GREEN

B / 绿色

KEY_YELLOW

C / 黄色

KEY_BLUE

D / 蓝色

KEY_PANNEL_CHDOWN

3D

KEY_VOLUP

提高音量

KEY_VOLDOWN

音量减小

KEY_MUTE

沉默的

KEY_0

0

KEY_1

1

KEY_2

2

KEY_3

3

KEY_4

4

KEY_5

5

KEY_6

6

KEY_7

7

KEY_8

8

KEY_9

9

KEY_TV

电视源

KEY_HDMI

HDMI 源

请注意,某些代码在 2016+ 电视上有所不同。例如, KEY_POWEROFF在较新的电视上是KEY_POWER 。

参考

我自己没有对控制协议进行逆向工程,而且 samsungctl 不是唯一的实现。这是启发 samsungctl 的事情的列表。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

samsungTVlegacy-0.1.1.tar.gz (9.1 kB 查看哈希

已上传 source

内置分布

samsungTVlegacy-0.1.1-py3-none-any.whl (11.2 kB 查看哈希

已上传 py3