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

 找回密码
 立即注册
查看: 25788|回复: 41

(2月27日更新)安卓电视(机顶盒)接入HA方法分享

[复制链接]

1

主题

162

帖子

1029

积分

金牌会员

Rank: 6Rank: 6

积分
1029
金钱
867
HASS币
0
发表于 2018-2-11 21:23:13 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 3125589 于 2018-2-27 14:29 编辑

2月27日更新内容
经过一段时间的使用后发现还有一些问题导致无法正常使用,经过摸索找到了一些折中方案,发上来供大家参考。
关于firetv server我发现github有一些打包好的docker版本,应该可以大幅减少工作量,不过由于我已经部署了,没有测试docker版本,有兴趣的可以试试,看readme应该很简单,贴几个地址供参考。
https://github.com/kevineye/docker-firetv
https://github.com/cbrherms/python-firetv-freenas
https://github.com/MarvAmBass/docker-firetv-server
下面进入正题
经过一段时间使用,我发现firetv server有个比较蛋疼的问题,设备关机后由于获取不到设备状态,firetv server就会崩溃退出,导致下次设备再开机时就无法继续连接HA,必要kill掉进程再次启动,非常麻烦。
经过研究解决方案大致是通过HA的自动化让firetv server服务伴随电视同时进行启停,下面开工
我咨询翻阅了下firetv server原作者的github发现firetv没有停止命令,原作者分享了通过systemctl控制的方案。
我们先添加firetv server服务,在/etc/systemd/system/目录下创建tv.service服务(楼主是fedora,其他系统可能路径有差异,建议查询下systemctl的目录)
服务内容如下:
#########################################################################
[Unit]
Description=Android
Wants=network-online.target
After=network.target

[Service]
Type=simple
User=你的登录用户
#Environment=PATH="$VIRTUAL_ENV/bin:$PATH"
ExecStart=/usr/bin/firetv-server -d 电视IP:5555

[Install]
WantedBy=multi-user.target
#########################################################################

创建服务成功后sudo systemctl daemon-reload重新加载systemctl守护进程,然后sudo systemctl start tv,看看服务是否启动成功。如果启动成功就可以进入HA配置自动化相关内容。

首先在HA中配置cmdline switch 和ping senor配置如下:
switch:
  platform: command_line
 switches:
    arest_pin_four:
      command_on: "sudo systemctl restart tv"
      command_off: "sudo systemctl stop tv"
binary_sensor:
  - platform: ping
    host: 电视IP地址
    count: 2
    scan_interval: 30

上面内容完成可以先检查下命令行开关能否正常使用以及ping传感器是否正常。
然后配置自动化配置文件:
- action:
  - service: switch.turn_on
    entity_id: switch.arest_pin_four
  alias: 'CANTV_ON'
  condition: []
  id: '1519363544193'
  trigger:
  - entity_id: binary_sensor.ping_binary_sensor
    platform: state
    from: 'off'
    to: 'on'
- action:
  - service: switch.turn_off
    entity_id: switch.arest_pin_four
  alias: 'CANTV_OFF'
  condition: []
  id: '1519363544199'
  trigger:
  - entity_id: binary_sensor.ping_binary_sensor
    platform: state
    from: 'on'
    to: 'off'

理论上重启下HA应该就可以了,这样firetv server就能跟电视开关一起启停了,0.64后如果关闭firetv server服务HA应该只会报一条无法连firetv server服务的报错,比之前版本隔几十秒报一次观感好多了,基本算完美状态。
---------------------------------------------------我是分割线,下面是原贴----------------------------------------------------------------
此方法安装是按HA组件中接入亚马逊FireTV的方法操作的,实际是利用了安卓5555 ADB调试端口未关闭的漏洞进行接入(推测悟空遥控之类应该也是用的这个漏洞)。
优点是官方组件,应该会有后续的维护。另外大部分安卓机顶盒和电视应该都可以按照此方法接入。
缺点是功能比较简单,能关机,暂停,但在我家的看尚电视上音量和切换播放内容的功能无法使用。其他的估计要自己尝试了。
先贴官方链接:
https://home-assistant.io/components/media_player.firetv/

注意,注意,注意这个插件要在Python2版本下运行。
手机发帖无图,大家凑合看吧。
第一步先安装必须的系统插件:
apt-get install swig libssl-dev python-dev libusb-1.0-0 python-yaml
如果是其他操作系统请自行搜索对应的包名,楼主是Fedora 27,这些软件包之前基本都装过。
第二步安装控制服务
再次提醒,以下软件包的安装都要求Python2环境,楼主的HA是部署在Python虚拟环境中(3.7版本),操作系统的Python环境是2版本,所以下面的软件都是在系统的Python环境中安装的。
另外坑比较大的是M2Crypto组件,这个组件是需要编译安装的,安装过程中可能会有各种报错,请各位根据编译结果里的报错百度解决办法,基本都是编译环境和openssl的依赖问题。
pip install flask
pip install https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.24.0.tar.gz
pip install firetv[firetv-server]
第三步启动控制服务
如果第二部成功完成了,那你基本已经成功了。
在Python2环境中运行一下命令
firetv-server -d <tv device IP>:5555
如果成功运行,可以在其他主机的浏览器中输入
控制服务主机IP地址:5556
如果看到以下内容说明控制服务部署成功了。
{
"devices": {
"default": {
  "host": "192.168.1.153:5555",
  "state": "play"
}
}
}
最后一步,写配置文件,非常简单
media_player:
  - platform: firetv
重启HA应该就能看到控制面板了。
配置文件还有一些可选参数。
host:如果控制服务和HA不在同一主机上,这通过这个指定控制服务的IP地址。
port : 控制服务端口号
device : 如果有多个设备可通过这个选项进行区别,设备名可通过web服务进行查看。
name : 别名,可以自己定义,其实就是friendly name 。如果需要开机启动可以把启动服务的命令写入rc.local,楼主就多说了。
教程完毕,祝各位玩的开心,有不明白的可以去官方的组件页面进行查看。也可以在帖子下面讨论,楼主要是知道会尽量解决。


评分

参与人数 2金钱 +28 收起 理由
+ 18 谢谢楼主分享,非常好的思路!.
27hh + 10 谢谢分享!

查看全部评分

回复

使用道具 举报

14

主题

656

帖子

3838

积分

论坛元老

Rank: 8Rank: 8

积分
3838
金钱
3177
HASS币
10
发表于 2018-2-11 22:24:01 | 显示全部楼层
谢谢提供新玩法
回复

使用道具 举报

8

主题

195

帖子

1064

积分

金牌会员

Rank: 6Rank: 6

积分
1064
金钱
869
HASS币
0
发表于 2018-2-11 23:48:22 | 显示全部楼层
终于可以连接安卓机顶盒了
回复

使用道具 举报

9

主题

787

帖子

3831

积分

论坛元老

Rank: 8Rank: 8

积分
3831
金钱
3044
HASS币
87
发表于 2018-2-11 23:51:41 | 显示全部楼层
这个可比红外遥控开关好多了,至少有状态,试试
回复

使用道具 举报

123

主题

4626

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16017
金钱
11306
HASS币
45
发表于 2018-2-12 09:44:07 | 显示全部楼层
感谢楼主手机发贴分享,辛苦了!
回复

使用道具 举报

0

主题

195

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
832
HASS币
0
发表于 2018-2-12 16:37:11 | 显示全部楼层
感谢分享
回复

使用道具 举报

4

主题

531

帖子

3913

积分

论坛元老

Rank: 8Rank: 8

积分
3913
金钱
3372
HASS币
120
发表于 2018-2-12 19:38:39 | 显示全部楼层
本帖最后由 killadm 于 2018-2-12 19:39 编辑

贡献个pi3用的dockerfile,编译完了发现海美迪不支持。
FROM napnap75/rpi-alpine-base
MAINTAINER killadm <--@-->

RUN apk update && \
        apk add --no-cache python swig libressl-dev python-dev py-pip py-yaml musl-dev gcc libusb

RUN pip install firetv[firetv-server]

EXPOSE 5556

CMD ["firetv-server", "-d", "192.168.123.97:5555"]


翻译中...


回复

使用道具 举报

4

主题

531

帖子

3913

积分

论坛元老

Rank: 8Rank: 8

积分
3913
金钱
3372
HASS币
120
发表于 2018-2-12 21:07:52 | 显示全部楼层
push了一个无坑版,支持树莓派docker。
其他设备自己编译,理论上只需要改第一句
docker pull killadm/raspberrypi3-firetv:1.0.5

<tv device IP>替换为电视或盒子的IP
sudo docker run -d --restart=always --name="firetv" -e TZ=Asia/Shanghai -v /etc/localtime:/etc/localtime:ro --net=host killadm/raspberrypi3-firetv:1.0.5 firetv-server -d <tv device IP>:5555
回复

使用道具 举报

1

主题

26

帖子

133

积分

注册会员

Rank: 2

积分
133
金钱
107
HASS币
0
发表于 2018-2-16 00:38:02 | 显示全部楼层
killadm 发表于 2018-2-12 21:07
push了一个无坑版,支持树莓派docker。
其他设备自己编译,理论上只需要改第一句
...


额 这边装的是hassio的版本 不知道怎么加入这个插件呢?
回复

使用道具 举报

2

主题

69

帖子

1486

积分

金牌会员

Rank: 6Rank: 6

积分
1486
金钱
1417
HASS币
0
发表于 2018-2-28 23:57:05 来自手机 | 显示全部楼层
盒子关闭后,怎么通过HA打开呢,好像必须红外遥控,莫非是支持网络启动呃呃呃盒子?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-2 05:46 , Processed in 0.077735 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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