找回密码
 立即注册

微信扫码登录

搜索
楼主: mozzie

[教程系列] NodeRed部署AndroidTV遥控接入Homekit

[复制链接]

1

主题

96

回帖

311

积分

中级会员

积分
311
金钱
214
HASS币
0
发表于 2025-10-20 03:55:34 | 显示全部楼层
因为初始接触node-red,对于整个流程和逻辑不是很明白,请你尽量仔细讲解一遍:

这个Node-RED流程的核心是**通过HomeKit控制斐讯盒子(Android TV)**,包含电视状态监控、遥控器按键操作、输入源切换和电源管理四大功能,整体逻辑清晰且有容错设计。

### 一、核心架构概览
整个流程基于两个关键工具搭建,所有节点围绕“控制斐讯盒子”这一目标协作:
- **Home Assistant(HA)**:作为设备中枢,提供斐讯盒子(`media_player.android_tv_192_168_3_51`)和智能插座的状态数据与控制接口。
- **HomeKit**:通过`homekit-service`节点将斐讯盒子模拟为HomeKit设备,实现手机(如iPhone)的可视化控制(如按键、音量、输入源)。

流程可分为4条核心链路,下面逐一拆解:

---

### 二、链路1:电视状态监控与同步
这条链路的作用是**实时获取斐讯盒子的运行状态,并同步到HomeKit**,让你在手机上能看到电视是“运行中”还是“不可用”。

1. **状态触发节点(`server-state-changed`:AndroidTV)**
   - 监听HA中`media_player.android_tv_192_168_3_51`的状态变化(如`playing`播放、`idle`闲置、`paused`暂停、`unavailable`不可用)。
   - 状态变化时,会输出两个数据:`payload`(当前状态)和`data`(状态变化详情)。

2. **状态转换节点(`change`:电视状态转换)**
   - 将HA的状态统一转换为HomeKit能识别的“激活状态”:
     - 若HA状态是`playing`/`idle`/`paused`(电视运行中),转换为`{"Active":1}`(激活);
     - 若HA状态是`unavailable`(电视关机/离线),转换为`{"Active":0}`(未激活)。

3. **HomeKit同步节点(`homekit-service`:盒子遥控)**
   - 这是整个流程的“核心控制节点”(父节点),将转换后的`Active`状态同步到HomeKit,手机上会显示电视“开启”或“关闭”。

---

### 三、链路2:HomeKit遥控器按键控制
这条链路是**通过HomeKit发送“按键指令”,最终让斐讯盒子执行对应操作**(如上/下/左/右、确认、返回等)。

1. **HomeKit指令输出(`homekit-service`:盒子遥控)**
   - 当你在手机HomeKit上点击“方向键”“确认”等按钮时,该节点会输出`payload.RemoteKey`(如“4”代表上、“5”代表下)。

2. **按键判断节点(`switch`:遥控按键 RemoteKey)**
   - 根据`payload.RemoteKey`的数值,将指令分流到不同的“按键执行节点”,共支持8个按键:
     | RemoteKey数值 | 对应操作 |
     |---------------|----------|
     | 4             | 上       |
     | 5             | 下       |
     | 6             | 左       |
     | 7             | 右       |
     | 8             | 确认     |
     | 9             | 返回     |
     | 11            | 播放     |
     | 15            | 信息     |

3. **按键执行节点(`api-call-service`:上/下/左/右等)**
   - 每个节点通过HA的`androidtv.adb_command`服务,发送**ADB按键指令**给斐讯盒子(如“上”对应的指令是`sendevent /dev/input/event4 1 103 1...`),模拟物理遥控器的按键动作。

---

### 四、链路3:输入源切换(APP/功能切换)
这条链路的作用是**在HomeKit上选择“输入源”,快速打开斐讯盒子上的指定APP**(如主页、直播电视、绿联云等)。

#### 1. 输入源初始化(设定输入源名称)
- **函数节点(`function`:设定输入源)**:提前定义5个输入源的名称和类型(均为`APPLICATION`,即应用),例如:
  - 输入源0:主页
  - 输入源1:直播电视(对应APP:`ar.tvplayer.tv`)
  - 输入源2:绿联云(对应APP:`com.ugreen.nasprotv`)
  - 输入源3:爱奇艺(对应APP:`com.gitvdemo.video`)
  - 输入源4:咪世界(对应APP:`cn.miguvideo.migutv`)
- **HomeKit输入源节点(`homekit-service`:Input 0~Input 4)**:将上述输入源同步到HomeKit,手机上会显示可选择的“输入源列表”。

#### 2. 输入源切换执行
1. **输入源判断节点(`switch`:输入源切换ActiveIdentifier)**
   - 当你在HomeKit选择某个输入源时,会输出`payload.ActiveIdentifier`(如选“直播电视”输出“1”),该节点根据数值分流指令。

2. **输入源执行节点(`api-call-service`:主页/直播/绿联云等)**
   - 分两种执行方式:
     - “主页”:通过ADB指令(`sendevent`)模拟“主页键”;
     - 其他APP(直播、绿联云等):通过HA的`media_player.select_source`服务,直接调用盒子上的对应APP(需提前在HA中配置APP的包名)。

---

### 五、链路4:电源管理(智能插座控制)
这条链路是**通过智能插座的“通断电”控制斐讯盒子的电源**,并加入容错机制防止“空耗电”。

#### 1. 关机逻辑(含容错)
1. **关机指令触发**:当HomeKit发送“关机”指令(`payload.Active:0`),先通过`api-call-service`节点发送`POWER`指令给盒子,触发系统关机。
2. **延迟等待(`delay`节点)**:等待30秒,确保盒子完全关机。
3. **功率判断(`api-current-state`:判断电视功率<10w)**:读取智能插座的功率(`sensor.smart_switch_xxx_power`),若功率<10w(说明盒子已关机,插座空载),则通过`switch.turn_off`关闭插座电源,避免空耗电。

#### 2. 开机逻辑(含容错)
1. **开机指令触发**:当HomeKit发送“开机”指令(`payload.Active:1`),先通过`api-current-state`判断智能插座当前状态:
   - 若插座已“关闭”(`off`):直接调用`switch.turn_on`打开插座,利用盒子“上电开机”功能启动;
   - 若插座已“开启”(`on`):进一步判断功率,若功率<10w(空载),先关插座再开,确保开机成功。

---

### 六、关键注意事项
1. **依赖配置**:
   - 需确保HA已正确接入斐讯盒子(ADB模式)和智能插座,且实体ID(如`media_player.android_tv_192_168_3_51`)与流程中一致。
   - HomeKit需通过`homekit-standalone`节点配对(PIN码:3038-9660),配对后才能在手机上控制。

2. **ADB指令兼容性**:
   - 流程中所有`sendevent`指令依赖盒子的“输入设备路径”(`/dev/input/event4`),若你的斐讯盒子路径不同,需通过`adb shell getevent`重新查询并修改。

3. **容错机制**:
   - 两次“功率判断”(关机后、开机前)是核心容错设计,避免插座长期空载耗电,或盒子未正常开机的问题。

---
链路2中,遥控器按键操作的具体实现步骤是什么?

链路2“遥控器按键操作”的核心是**把HomeKit上的按键指令,通过Home Assistant(HA)的ADB服务,转换成斐讯盒子能识别的物理按键信号**,具体实现分4步,每步职责明确且环环相扣。

### 步骤1:HomeKit触发按键指令(用户操作层)
这是流程的“起点”,由你在手机HomeKit上的操作触发,关键依赖“盒子遥控”这个HomeKit父节点。
1. 你在手机HomeKit中打开“盒子遥控”设备,点击方向键(上/下/左/右)、确认、返回等按钮。
2. HomeKit会自动生成对应的“按键编码”,并通过Node-RED的`homekit-service`节点(ID:09f550d3a063049b)输出指令。
   - 输出格式:`msg.payload.RemoteKey = 具体数值`(如点击“上”输出`"4"`,点击“确认”输出`"8"`)。
3. 该节点将指令转发给下一个核心节点——“遥控按键 RemoteKey”开关节点。

### 步骤2:按键指令分流(判断层)
这一步是“中转站”,通过`switch`节点(ID:f58b8295d2a676ee)判断按键编码,把不同指令分到对应的执行路径。
1. 节点核心配置:以`msg.payload.RemoteKey`为判断依据,设置8条“等于”规则,对应8个按键。
   - 规则示例:若`RemoteKey`等于“4”,走第1条输出;等于“5”走第2条,以此类推(完整对应关系见下表)。
   | RemoteKey数值 | 对应按键 | 输出路径(连接的节点) |
   |---------------|----------|------------------------|
   | 4             | 上       | 连接“上”指令执行节点   |
   | 5             | 下       | 连接“下”指令执行节点   |
   | 6             | 左       | 连接“左”指令执行节点   |
   | 7             | 右       | 连接“右”指令执行节点   |
   | 8             | 确认     | 连接“确认”指令执行节点 |
   | 9             | 返回     | 连接“返回”指令执行节点 |
   | 11            | 播放     | 连接“播放”指令执行节点 |
   | 15            | 信息     | 连接“信息”指令执行节点 |
2. 节点会根据实际`RemoteKey`数值,自动选择对应的输出路径,确保指令“不跑偏”。

### 步骤3:生成ADB按键指令(指令转换层)
这一步是“翻译官”,由`api-call-service`节点(如“上”“下”节点)将分流后的指令,转换成斐讯盒子能识别的ADB底层指令。
1. 每个按键对应一个独立的`api-call-service`节点,节点核心配置有3个关键参数:
   - **服务类型**:选择HA的`androidtv.adb_command`服务(ADB是Android设备的调试工具,能模拟物理按键)。
   - **目标设备**:指定斐讯盒子的设备ID(流程中为`3b51586795a2fe46dc5b891d80ba8d1e`),确保指令发给正确设备。
   - **ADB指令内容**:这是核心,格式为`sendevent /dev/input/event4 1 按键码 1 && sendevent /dev/input/event4 0 0 0 && sendevent /dev/input/event4 1 按键码 0 && sendevent /dev/input/event4 0 0 0`。
     - 解释:`/dev/input/event4`是盒子的“按键输入设备路径”;`按键码`是具体键值(如上键为103,下键为108);整个指令模拟“按下→松开”的完整按键动作。
   - 示例:“上”按键的ADB指令为`sendevent /dev/input/event4 1 103 1 && sendevent /dev/input/event4 0 0 0 && sendevent /dev/input/event4 1 103 0 && sendevent /dev/input/event4 0 0 0`。

### 步骤4:执行按键并控制盒子(设备执行层)
这是流程的“终点”,由HA和斐讯盒子配合完成指令执行。
1. Node-RED的`api-call-service`节点将ADB指令发送给HA。
2. HA通过已建立的ADB连接(需提前在HA中配置斐讯盒子的ADB调试),把指令推送到斐讯盒子。
3. 盒子接收ADB指令后,模拟物理按键的“按下→松开”动作,最终实现你在HomeKit上点击的操作(如上移光标、确认选择等)。

---
如何在手机上配置HomeKit以实现对斐讯盒子的控制?

斐讯盒子本身并不直接支持HomeKit,若要通过HomeKit实现对斐讯盒子的控制,需要借助一些第三方工具和方法,以下是一种常见的通过刷机和Home Assistant实现的方式:
1. **准备工作**
    - **斐讯盒子刷机**:以斐讯N1为例,需要先将其降级并刷入armbian系统。具体刷机步骤可在相关技术论坛搜索详细教程。
    - **安装Home Assistant**:在刷好系统的斐讯盒子上安装Home Assistant,可以参考Home Assistant的官方安装文档,根据盒子的系统类型选择合适的安装方式。
2. **配置Home Assistant**
    - 打开Home Assistant的配置文件`configuration.yaml`,在文件中添加`homekit:`字段,保存并重启Home Assistant。
3. **在手机上配置HomeKit**
    - **确保设备满足条件**:将iPhone或iPad更新至最新版iOS或iPadOS,打开“设置”,确保“蓝牙”已开启,且手机与斐讯盒子连接到相同的Wi-Fi网络。
    - **添加配件**:打开“家庭”App,轻点左下角的“家庭”,然后轻点“添加配件”,也可以轻点屏幕顶部的“+”,然后选取“添加配件”。
    - **完成配对**:按照屏幕指示操作,可能需要扫描斐讯盒子通过Home Assistant生成的二维码,或者输入8位数的HomeKit设置码,完成配件添加。
    - **设置房间和名称**:将配件分配到合适的房间并为其命名,方便后续控制,点击“继续”,然后点击“完成”。

通过以上步骤,理论上可以在手机上通过HomeKit实现对斐讯盒子的控制,但刷机和配置过程可能较为复杂,且涉及到一些技术操作,需要谨慎进行。
回复

使用道具 举报

0

主题

14

回帖

97

积分

注册会员

积分
97
金钱
83
HASS币
0
发表于 2025-10-23 16:33:19 | 显示全部楼层
测试一下
回复

使用道具 举报

0

主题

15

回帖

115

积分

注册会员

积分
115
金钱
100
HASS币
0
发表于 昨天 10:17 | 显示全部楼层
xuexixuexi
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-11-24 22:55 , Processed in 0.067719 second(s), 6 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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