『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 5872|回复: 18

[基础教程] 反编译乐视遥控器,乐视电视(LETV) UDP 发送遥控码

[复制链接]

6

主题

31

帖子

494

积分

论坛技术达人

积分
494
金钱
463
HASS币
10
发表于 2021-9-26 17:14:22 | 显示全部楼层 |阅读模式
本帖最后由 Vizards 于 2022-5-22 18:47 编辑

分享下乐视电视(LETV)通过 UDP 遥控的办法,理论上所有型号的乐视电视通用。
之前试过用 adb command 发送遥控指令,也试过用坛子里发车的魅族遥控器去红外遥控,但是都有一些问题:

1. adb command 遥控,homeassistant 经常报错端口连接失败,稳定性很差;
2. 魅族的红外遥控,不知道是否是我树莓派的蓝牙问题,一个指令延迟高达四五秒,可用性还不如 adb

经过反编译乐视官方的乐视遥控器 app,发现他们是通过 udp 发送请求给乐视电视的 9900 端口实现遥控的。
在 hass 里面我们可以通过在 configuration.yaml 里面添加 shell_command ,执行 netcat 来发送 udp 请求:

shell_command:
  letv_mute: 'echo "{"CONTROL_ACTION": "mute"}"|nc 192.168.x.x:9900 -u -w0'

mute 就是静音按钮的遥控码,192.168.x.x 就是乐视电视的 IP. 其他指令对应下面的遥控码添加即可:

# static fields
.field public static final ACTION_KEY_CHANNEL_DOWN:Ljava/lang/String; = "channel_down"

.field public static final ACTION_KEY_CHANNEL_UP:Ljava/lang/String; = "channel_up"

.field public static final ACTION_KEY_CONTROL_MUTE:Ljava/lang/String; = "mute"

.field public static final ACTION_KEY_CONTROL_SOURCE:Ljava/lang/String; = "switch_source"

.field public static final ACTION_KEY_DOWN:Ljava/lang/String; = "down"

.field public static final ACTION_KEY_HOME:Ljava/lang/String; = "home"

.field public static final ACTION_KEY_LEFT:Ljava/lang/String; = "left"

.field public static final ACTION_KEY_MENU:Ljava/lang/String; = "menu"

.field public static final ACTION_KEY_MOUSE_PRESS:Ljava/lang/String; = "mouse_press"

.field public static final ACTION_KEY_NUMB_0:Ljava/lang/String; = "num_0"

.field public static final ACTION_KEY_NUMB_1:Ljava/lang/String; = "num_1"

.field public static final ACTION_KEY_NUMB_2:Ljava/lang/String; = "num_2"

.field public static final ACTION_KEY_NUMB_3:Ljava/lang/String; = "num_3"

.field public static final ACTION_KEY_NUMB_4:Ljava/lang/String; = "num_4"

.field public static final ACTION_KEY_NUMB_5:Ljava/lang/String; = "num_5"

.field public static final ACTION_KEY_NUMB_6:Ljava/lang/String; = "num_6"

.field public static final ACTION_KEY_NUMB_7:Ljava/lang/String; = "num_7"

.field public static final ACTION_KEY_NUMB_8:Ljava/lang/String; = "num_8"

.field public static final ACTION_KEY_NUMB_9:Ljava/lang/String; = "num_9"

.field public static final ACTION_KEY_OK:Ljava/lang/String; = "ok"

.field public static final ACTION_KEY_PAGE_DOWN:Ljava/lang/String; = "page_down"

.field public static final ACTION_KEY_PAGE_UP:Ljava/lang/String; = "page_up"

.field public static final ACTION_KEY_POWER_OFF:Ljava/lang/String; = "power"

.field public static final ACTION_KEY_RETURN:Ljava/lang/String; = "return"

.field public static final ACTION_KEY_RIGHT:Ljava/lang/String; = "right"

.field public static final ACTION_KEY_SETTING:Ljava/lang/String; = "setting"

.field public static final ACTION_KEY_UP:Ljava/lang/String; = "up"

.field public static final ACTION_KEY_VOLUME_DOWN:Ljava/lang/String; = "volume_down"

.field public static final ACTION_KEY_VOLUME_UP:Ljava/lang/String; = "volume_up"

.field public static final ACTION_KEY_WHEEL_DOWN:Ljava/lang/String; = "mouse_wheel_down"

.field public static final ACTION_KEY_WHEEL_UP:Ljava/lang/String; = "mouse_wheel_up"

.field public static final ACTION_MOVE_CURSOR:Ljava/lang/String; = "move_cursor"

.field public static final ACTION_PLAY_PAUSE:Ljava/lang/String; = "play_pause"

.field public static final ACTION_PLAY_SEEK:Ljava/lang/String; = "play_seek"

.field public static final ACTION_PLAY_START:Ljava/lang/String; = "play_start"

.field public static final ACTION_PLAY_STOP:Ljava/lang/String; = "play_stop"

但通过 UDP 无法发送开机指令,因为待机状态下电视是不连接 WiFi 的。好消息是部分型号的 LETV 支持 WoL,开启方式如下:

- 电视开机后,遥控器按“信号源”键,出现菜单后,依次按数字键 2 5 8 0 即可进入工程模式菜单
- 在 Other Options 里面有 Wake on lan 选项,调整到 On
- 用网线连接路由器和电视
- Homeassistant 设置一个脚本,服务选 wake on lan 即可

顺带一提,斐讯 N1 的遥控指令也可以通过 HTTP POST 请求发送,而且只需要用自带插件 rest_command 就可以了。
遥控码参见:https://github.com/Jimmuy/N1_controler#接口说明



评分

参与人数 1金钱 +10 收起 理由
wormshow + 10 墙都不扶,就服楼主!

查看全部评分

回复

使用道具 举报

8

主题

163

帖子

2124

积分

金牌会员

Rank: 6Rank: 6

积分
2124
金钱
1961
HASS币
0
发表于 2021-9-27 02:20:01 | 显示全部楼层
找时间试试乐视的x50 air,希望可以
回复

使用道具 举报

7

主题

349

帖子

3235

积分

论坛元老

Rank: 8Rank: 8

积分
3235
金钱
2886
HASS币
0
发表于 2021-9-27 08:59:15 | 显示全部楼层
很强大,这个用NR来实现貌似很巴适~感谢楼主分享
回复

使用道具 举报

8

主题

163

帖子

2124

积分

金牌会员

Rank: 6Rank: 6

积分
2124
金钱
1961
HASS币
0
发表于 2021-9-27 18:30:44 | 显示全部楼层
亲测可用,响应非常快。非常感谢。

要是能像adb那样直接打开指定app,那就更好了。
回复

使用道具 举报

6

主题

31

帖子

494

积分

论坛技术达人

积分
494
金钱
463
HASS币
10
 楼主| 发表于 2021-9-27 21:13:18 | 显示全部楼层
jackyzrk 发表于 2021-9-27 18:30
亲测可用,响应非常快。非常感谢。

要是能像adb那样直接打开指定app,那就更好了。 ...

乐视那个遥控器 APP 真的只是个遥控器,除了按按钮之外没有别的功能了。
所以打开指定电视上指定 APP 的功能估计还得靠 ADB 命令或者魔改电视系统去做了
回复

使用道具 举报

15

主题

636

帖子

2203

积分

金牌会员

Rank: 6Rank: 6

积分
2203
金钱
1567
HASS币
0
发表于 2021-9-29 21:58:39 | 显示全部楼层
楼主太牛了。
最后那一句,N1真的是太有用了。哈哈哈
感谢楼主。
回复

使用道具 举报

9

主题

135

帖子

894

积分

高级会员

Rank: 4

积分
894
金钱
759
HASS币
0
发表于 2022-10-3 01:16:38 | 显示全部楼层
亲测老旧的乐视S50可用!
回复

使用道具 举报

9

主题

181

帖子

1297

积分

金牌会员

Rank: 6Rank: 6

积分
1297
金钱
1116
HASS币
0
发表于 2022-10-3 12:10:58 | 显示全部楼层
这个太好了。竟然才看到。
可惜的是我的max 70没有WOL。
回复

使用道具 举报

5

主题

199

帖子

879

积分

高级会员

Rank: 4

积分
879
金钱
680
HASS币
0
发表于 2022-10-29 07:45:32 | 显示全部楼层
厉害了。第二段代码放在哪里啊?
回复

使用道具 举报

5

主题

199

帖子

879

积分

高级会员

Rank: 4

积分
879
金钱
680
HASS币
0
发表于 2022-10-29 07:46:54 | 显示全部楼层
zjhcr 发表于 2022-10-3 01:16
亲测老旧的乐视S50可用!

第二段代码放在哪里啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 15:42 , Processed in 0.083760 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表