- 积分
- 4795
- 金钱
- 4287
- 威望
- 0
- 贡献
- 0
- HASS币
- 156
论坛元老
佑桑
- 积分
- 4795
- 金钱
- 4287
- HASS币
- 156
|
本帖最后由 chinyaolin 于 2017-11-28 13:14 编辑
抱歉繁體字
先來張圖
先說感想拿著真正的遙控器看電視比較實際些
基本思路
- 要有一個選單, 可以把自己最常用的頻道號碼加進去
- 要有一個文字框, 能夠自己輸入頻道號碼
- 要有一組拉桿, 用划動的方式選擇頻道
- 一個虛擬按鈕做為真正送出紅外訊號的開關
準備工作
- 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 就可)
|
评分
-
查看全部评分
|