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

 找回密码
 立即注册
查看: 21630|回复: 77

电视遥控面版 常用频道、拉杆、自填联动, 应该算填完坑吧

  [复制链接]

30

主题

493

帖子

4767

积分

论坛元老

佑桑

Rank: 8Rank: 8

积分
4767
金钱
4259
HASS币
156

教程狂人

发表于 2017-11-28 13:14:38 | 显示全部楼层 |阅读模式
本帖最后由 chinyaolin 于 2017-11-28 13:14 编辑

抱歉繁體字
先來張圖
TV_2.PNG
先說感想拿著真正的遙控器看電視比較實際些

基本思路
  • 要有一個選單, 可以把自己最常用的頻道號碼加進去
  • 要有一個文字框, 能夠自己輸入頻道號碼
  • 要有一組拉桿, 用划動的方式選擇頻道
  • 一個虛擬按鈕做為真正送出紅外訊號的開關

準備工作
  • Broadlink RM Pro 聯博主機一部, 並完成接入 HA 工作
  • 已經將電視遙控器的紅外碼記錄下來
  • 在 configuration.yaml 中建立需要的虛擬按鈕
    input_text:
      # 輸入頻道號碼的文字框, 限制 0-3 位數, 需全部為數字
      mod_ch_xxx:
        initial: 218
        min: 0
        max: 3
        pattern: '[0-9][0-9][0-9]'
    input_select:
      # 選擇常用頻道的下拉選單, 前三碼限制為數字, 長度不限
      mod_channel_select:
        icon: mdi:heart
        options:
         - 098 公視3台
         - 099-006 (闔家)
         - 157 古典音樂台
         - 157-150 (音樂)
         - 208 博斯無限台
         - 211 FOX SPORTS 3
         - 218 SI運動畫刊頻道
         - 218-200 (體育)
         - 250 國家地理頻道 
         - 254 Discovery
    input_boolean:
      # 確認送出紅外的虛擬按鈕
      mod_send_ir_code:
        initial: off
    input_number:
      # 第一組拉桿, 決定頻道號碼的百位數, 數字 0-9
      mod_ch_x00:
        min: 0
        max: 9
        step: 1
      # 第二組拉桿, 決定頻道號碼的十位數, 數字 0-9
      mod_ch_0x0:
        min: 0
        max: 9
        step: 1
      # 第三組拉桿, 決定頻道號碼的個位數, 數字 0-9
      mod_ch_00x:
        min: 0
        max: 9
        step: 1
    script: !include scripts.yaml

  • 在 scripts.yaml 將遙控器紅外碼建立完成
    ##############################################################################
    ##  MOD 遙控器
    ##############################################################################
    mod_remote_0:
      sequence:
        - service: broadlink.send_packet_xxx_xxx_xxx_xxx
          data:
            packet:
              - 'JgBeAAoAArsAASuTExgUNhQ1FTYT.....'
    mod_remote_1:
      sequence:
        - service: broadlink.send_packet_xxx_xxx_xxx_xxx
          data:
            packet:
              - 'JgBwAAcAAtAKAArpCgADWwABJ5MW.....'
    mod_remote_2: .....
    mod_remote_3: .....


常用選單、頻道拉桿、文字框之間如何聯動的構想
  • 因為頻道拉桿分別代表了頻道的百/十/個位數, 剛好適合拿來做為遙控按鈕的對照, 統統以此為基準
  • 頻道拉桿的變化, 需要反應到文字框中
  • 同樣的, 文字框中輸入的號碼, 需要反應成頻道拉桿變化
  • 剩下的常用頻道也需要把選擇的結果同步反應到頻道拉桿與文字框

所以算一下需要建立四組 automations, 一個一個說明如何達成
第一組 依照頻道拉桿發送紅外, 讓電視切換到正確的頻道
automation:
  ##############################################################################
  # 按下 input_boolean.mod_send_ir_code 依照頻道百/十/個位數 呼叫對應的 script
  - alias: "when input_boolean.mod_send_ir_code turn on"
    hide_entity: True
    trigger:
      platform: state
      entity_id: input_boolean.mod_send_ir_code
      from: 'off'
      to: 'on'
    action:
      - service: script.turn_on
        data_template:
          entity_id:
            # 因為透過 states 取得頻道拉桿的數字帶小數點, 所以需要用 int 轉為整數
            - script.mod_remote_{{ states.input_number.mod_ch_x00.state | int }}
      - delay: "00:00:01"
      - service: script.turn_on
        data_template:
          entity_id:
            - script.mod_remote_{{ states.input_number.mod_ch_0x0.state | int }}
      - delay: "00:00:01"
      - service: script.turn_on
        data_template:
          entity_id: 
            - script.mod_remote_{{ states.input_number.mod_ch_00x.state | int }}
      # 記得再把開關切回 off
      - service: input_boolean.turn_off
        entity_id: input_boolean.mod_send_ir_code

第二組 將頻道拉桿的變化後的數值, 計算之後填到文字框
automation:
  ##############################################################################
  # input_number*3 (頻道百/十/個位數) --> input_text (自由輸入頻道)
  # 頻道百/十/個位數 加總後聯動到 目標頻道
  - alias: "when any input_number.mod_ch_*** changed"
    hide_entity: True
    trigger:
      - platform: state
        entity_id: input_number.mod_ch_x00
      - platform: state
        entity_id: input_number.mod_ch_0x0
      - platform: state
        entity_id: input_number.mod_ch_00x
    action:
      - service: input_text.set_value
        entity_id: input_text.mod_ch_xxx
        data_template:
          value: "{{ (states('input_number.mod_ch_x00') | int) *100 + (states('input_number.mod_ch_0x0') | int) * 10 + (states('input_number.mod_ch_00x') | int) }}"

第三組 也可以在文字框直接打入頻道號碼, 然號將號碼拆解成百/十/個位數, 聯動頻道拉桿
這一段的重點在於 : 如何找到適合並且簡單的方法, 找出每位數正確的值, 小小提示如下
  • {{ 298 // 100 }} = 2, 將兩個數字相除並返回截斷的整數結果
  • {{ 298 % 100}} = 98, 計算整數除法的餘數
游客,如果您要查看本帖隐藏内容请回复

第四組 常用頻道選擇之後, 需要把選擇的結果同步反應到頻道拉桿與文字框
雖然我們可以依照第三組的方法達成目的
但是那種做法必需限制選單的內容只有三位數字, 而且平常號碼就知道頻道名稱的人應該不多吧
所以我們需要換個思路
  • {{ "123ABC" | list }} = ['1', '2', '3', 'A', 'B', 'C']
  • {{ (  "123ABC" | list  )[0] }} = '1'
游客,如果您要查看本帖隐藏内容请回复


就這樣可以自行編輯常用頻道,
選擇之後按 input_boolean.mod_send_ir_code 就可以把紅外送出

當然,
還可以自行修改 automations 的內容,
改成選擇之後就自動送出紅外, 就看個人喜好了
(修改 - alias: "when you select any one of input_select.mod_channel_select", 新增一個 action 就可)

评分

参与人数 2金钱 +24 收起 理由
hundajdx + 6
+ 18 谢谢分享!

查看全部评分

回复

使用道具 举报

123

主题

4626

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16013
金钱
11302
HASS币
45
发表于 2017-11-28 14:32:09 | 显示全部楼层
沙发,感谢楼主分享!
回复

使用道具 举报

13

主题

148

帖子

1071

积分

金牌会员

Rank: 6Rank: 6

积分
1071
金钱
923
HASS币
0
发表于 2017-11-30 17:38:38 | 显示全部楼层
感谢,很不错~!!
回复

使用道具 举报

4

主题

134

帖子

672

积分

高级会员

Rank: 4

积分
672
金钱
538
HASS币
0
发表于 2017-12-3 12:05:49 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

5

主题

143

帖子

968

积分

高级会员

Rank: 4

积分
968
金钱
825
HASS币
0
发表于 2017-12-14 18:26:48 | 显示全部楼层
看看如何运作的。
回复

使用道具 举报

4

主题

531

帖子

3912

积分

论坛元老

Rank: 8Rank: 8

积分
3912
金钱
3371
HASS币
120
发表于 2017-12-14 19:34:28 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

3

主题

158

帖子

1620

积分

金牌会员

Rank: 6Rank: 6

积分
1620
金钱
1462
HASS币
0
发表于 2017-12-23 22:22:53 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

2

主题

108

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
金钱
362
HASS币
0
发表于 2017-12-26 13:15:01 来自手机 | 显示全部楼层
谢谢 看不懂
回复

使用道具 举报

7

主题

127

帖子

2676

积分

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2549
HASS币
0
发表于 2018-1-19 19:04:43 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

2

帖子

22

积分

新手上路

Rank: 1

积分
22
金钱
20
HASS币
0
发表于 2018-1-21 17:42:23 | 显示全部楼层
看看 学习下
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-25 19:49 , Processed in 0.085106 second(s), 42 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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