之前分享過分享 透過紅外以及計電量插座 控制風扇速度不過並不是很完整
現透過esphome + mpu6050 達成擺頭反饋
並做成完整的Fan Template
前置作業
- 準備 esp晶片及mpu6050 6軸陀螺儀加速器並參考官方資料Esphome Mpu6050燒錄
並將做好的感測器裝在風扇上面
觀察 Gyro xyz 這三個角度的變化找出適合你自己的一個去當偵測的感測器
以我的來說 Gyro X 在風扇不動的時候 會在-2%~-6%之間跳動
而在擺頭時則會超過這些數值因此可以用Binary_sensor Template寫一個二進位感測器來判斷是否正在擺頭yaml如下
binary_sensor:
- platform: template
sensors:
fan_osc:
friendly_name: "風扇擺頭"
value_template: "{{ not (states('sensor.mpu6050_gyro_x') | float >= -6.00 and states('sensor.mpu6050_gyro_x') | float <= -2.00) }}"
device_class: motion
delay_off:
minutes: 0
seconds: 5
delay_off 是要持續5秒都在設定的範圍內 才判斷為擺頭 自己可以調整秒數
value_template 為數值設定 調整裡面的數值符合你的場景
2. 使用黑豆學習電風扇全部的控制碼
分享個人的黑豆學碼步驟及習慣
3. 將所有學到的碼寫成Script
分享 黑豆學完碼後 我是如何設定成開關或者是腳本
下面是我自己使用中的設定
script:
fan_power:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Power
fan_speed_up:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Speedup
fan_speed_down:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Speeddown
fan_osc:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Oscillating
fan_eco:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: ECO
fan_mode:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Fanmode
fan_timeclose:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Timeclose
fan_timeopen:
sequence:
- service: remote.send_command
data:
entity_id: remote.rm4c_pro
device: Chimei DF-14D601
command: Timeopen
- 使用助手新增按鈕及2個計數器及NR設定
設定方式參閱分享 透過紅外以及計電量插座 控制風扇速度的前置作業部分 - 使用Sensor Template設定3個判斷用Sensor
sensor:
- platform: template
sensors:
fan_speed:
friendly_name: "電風扇風速"
value_template: >-
{% set consumption = states('sensor.qi_mei_feng_shan_cha_zuo_current_consumption')|float %}
{% set osc_on = is_state('binary_sensor.fan_osc', 'on') %}
{% if osc_on %}
{% if consumption < 4.7 %}
Speed 1
{% elif consumption < 5.0 %}
Speed 2
{% elif consumption < 6.5 %}
Speed 3
{% elif consumption < 8.5 %}
Speed 4
{% elif consumption < 15.0 %}
Speed 5
{% elif consumption < 19.5 %}
Speed 6
{% elif consumption < 25.0 %}
Speed 7
{% else %}
Unknown
{% endif %}
{% else %}
{% if consumption == 0 %}
Off
{% elif consumption <= 2.0 %}
Speed 1
{% elif consumption <= 2.4 %}
Speed 2
{% elif consumption <= 4.0 %}
Speed 3
{% elif consumption <= 6.2 %}
Speed 4
{% elif consumption <= 15.0 %}
Speed 5
{% elif consumption <= 18.0 %}
Speed 6
{% elif consumption <= 23.5 %}
Speed 7
{% else %}
Unknown
{% endif %}
{% endif %}
- platform: template
sensors:
fan_speed_percentage:
friendly_name: "電風扇風速百分比"
unit_of_measurement: "%"
value_template: >-
{% set fan_speed = states('sensor.fan_speed') %}
{% set speed_percentages = {'Off': 0, 'Speed 1': 14, 'Speed 2': 29, 'Speed 3': 43, 'Speed 4': 57, 'Speed 5': 71, 'Speed 6': 86, 'Speed 7': 100} %}
{% if fan_speed in speed_percentages %}
{{ speed_percentages[fan_speed] }}
{% else %}
Unknown
{% endif %}
- platform: template
sensors:
fan_osc:
friendly_name: "風扇擺頭 (顯示)"
value_template: "{{ 'True' if is_state('binary_sensor.fan_osc', 'on') else 'False' }}"
sensor.fan_speed 加上了擺頭的判斷請依照內容自己去調整相關的瓦數
sensor.fan_speed_percentage 用在 Fan template 裡面的 percentage_template
依照你自己的段數去調整
多設一個 sensor.fan_osc 是因為 Fan template 裡面的 oscillating_template 只能判斷 True False
所以才多加一個 sensor 來將 binary_sensor.fan_osc 輸出的 on off 轉換成 True False
試過直接將 binary_sensor.fan_osc 輸出設為True False
不過可能我功力不夠都是輸出 on off
- 設定含狀態的開關
switch:
- platform: template
switches:
fan_power:
friendly_name: "Fan Power"
value_template: "{{ states('sensor.qi_mei_feng_shan_cha_zuo_current_consumption')|float > 1.6 }}"
turn_on:
service: script.turn_on
data:
entity_id: script.fan_power
turn_off:
service: script.turn_on
data:
entity_id: script.fan_power
- platform: template
switches:
fan_osc:
friendly_name: "Fan osc"
value_template: "{{ is_state('binary_sensor.fan_osc', 'on') }}"
turn_on:
service: script.turn_on
data:
entity_id: script.fan_osc
turn_off:
service: script.turn_on
data:
entity_id: script.fan_osc
- platform: template
switches:
fan_speed_1:
friendly_name: "Fan Speed 1"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 1') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_1
turn_off:
- platform: template
switches:
fan_speed_2:
friendly_name: "Fan Speed 2"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 2') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_2
turn_off:
- platform: template
switches:
fan_speed_3:
friendly_name: "Fan Speed 3"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 3') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_3
turn_off:
- platform: template
switches:
fan_speed_4:
friendly_name: "Fan Speed 4"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 4') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_4
turn_off:
- platform: template
switches:
fan_speed_5:
friendly_name: "Fan Speed 5"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 5') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_5
turn_off:
- platform: template
switches:
fan_speed_6:
friendly_name: "Fan Speed 6"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 6') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_6
turn_off:
- platform: template
switches:
fan_speed_7:
friendly_name: "Fan Speed 7"
value_template: "{{ is_state('sensor.fan_speed', 'Speed 7') }}"
turn_on:
service: input_button.press
data:
entity_id: input_button.fan_speed_7
turn_off:
到此前置作業算是完成要弄的東西很多
風扇設定
fan:
- platform: template
fans:
chimei_fan:
friendly_name: "奇美風扇"
speed_count: 7
value_template: "{{ states('switch.fan_power') }}"
percentage_template: "{{ states('sensor.fan_speed_percentage') }}"
oscillating_template: "{{ states('sensor.fan_osc') }}"
turn_on:
- condition: state
entity_id: switch.fan_power
state: 'off'
- service: switch.turn_on
entity_id: switch.fan_power
turn_off:
- condition: state
entity_id: switch.fan_power
state: 'on'
- service: switch.turn_off
entity_id: switch.fan_power
set_percentage:
service_template: >
{% if percentage <= 15 %}
switch.turn_on
{% elif percentage <= 29 %}
switch.turn_on
{% elif percentage <= 43 %}
switch.turn_on
{% elif percentage <= 58 %}
switch.turn_on
{% elif percentage <= 72 %}
switch.turn_on
{% elif percentage <= 86 %}
switch.turn_on
{% else %}
switch.turn_on
{% endif %}
data_template:
entity_id: >
{% if percentage <= 15 %}
switch.fan_speed_1
{% elif percentage <= 29 %}
switch.fan_speed_2
{% elif percentage <= 43 %}
switch.fan_speed_3
{% elif percentage <= 58 %}
switch.fan_speed_4
{% elif percentage <= 72 %}
switch.fan_speed_5
{% elif percentage <= 86 %}
switch.fan_speed_6
{% else %}
switch.fan_speed_7
{% endif %}
set_oscillating:
- condition: state
entity_id: switch.chimei_dc_fan_power
state: 'on'
- service: script.turn_on
data:
entity_id: script.fan_osc
sensor.fan_speed_percentage 如果有調整過請調整 set_percentage 裡面的內容到對應的數值
custom:multiple-entity-row 設定
type: entities
entities:
- entity: fan.chimei_fan
- entity: switch.fan_power
type: custom:multiple-entity-row
name: 風扇控制
state_header: 電源
icon: mdi:fan
toggle: true
state_color: true
entities:
- entity: script.fan_speed_down
name: Down
icon: mdi:fan-minus
toggle: false
tap_action:
action: toggle
- entity: script.fan_speed_up
name: UP
icon: mdi:fan-plus
toggle: false
tap_action:
action: toggle
- entity: script.fan_timeopen
name: 開
icon: mdi:timer
toggle: false
tap_action:
action: toggle
- entity: script.fan_timeclose
name: 關
icon: mdi:timer-off
toggle: false
tap_action:
action: toggle
- entity: switch.fan_power
type: custom:multiple-entity-row
name: 風扇控制
state_header: 電源
icon: mdi:fan
toggle: true
state_color: true
entities:
- entity: binary_sensor.fan_osc
- entity: switch.chimei_dc_fan_osc
name: 擺頭
icon: mdi:sync
toggle: true
state_color: true
tap_action:
action: toggle
- entity: script.fan_eco
name: ECO
icon: mdi:leaf
toggle: false
tap_action:
action: toggle
- entity: script.fan_mode
name: 模式
icon: mdi:gesture-double-tap
toggle: false
tap_action:
action: toggle
- entity: switch.qi_mei_feng_shan_cha_zuo
type: custom:multiple-entity-row
name: 風扇功耗
state_header: Power
styles:
width: 30px
toggle: true
state_color: true
icon: mdi:power
entities:
- entity: sensor.qi_mei_feng_shan_cha_zuo_voltage
name: 電壓
styles:
width: 30px
- entity: sensor.qi_mei_feng_shan_cha_zuo_current
name: 電流
styles:
width: 30px
- entity: sensor.qi_mei_feng_shan_cha_zuo_current_consumption
name: 功耗
styles:
width: 30px
- entity: sensor.qi_mei_feng_shan_cha_zuo_today_s_consumption
name: 今日
styles:
width: 30px
- entity: sensor.qi_mei_feng_shan_cha_zuo_total_consumption
name: Total
styles:
width: 30px
- entity: switch.qi_mei_feng_shan_cha_zuo
type: custom:multiple-entity-row
toggle: true
name: 速度設定
state_header: 電源
state_color: true
icon: mdi:fan
entities:
- entity: sensor.fan_speed
name: 風速
- entity: sensor.fan_speed_percentage
name: ' '
- entity: switch.fan_speed_1
name: false
icon: mdi:numeric-1-box-outline
state_color: true
toggle: true
tap_action:
action: toggle
- entity: switch.fan_speed_2
name: false
icon: mdi:numeric-2-box-outline
state_color: true
toggle: true
tap_action:
action: toggle
- entity: switch.fan_speed_3
name: false
icon: mdi:numeric-3-box-outline
state_color: true
toggle: true
tap_action:
action: toggle
- entity: switch.qi_mei_feng_shan_cha_zuo
type: custom:multiple-entity-row
toggle: true
name: 速度設定
state_header: 電源
state_color: true
icon: mdi:fan
entities:
- entity: switch.fan_speed_4
name: false
icon: mdi:numeric-4-box-outline
state_color: true
toggle: true
tap_action:
action: toggle
- entity: switch.fan_speed_5
name: false
icon: mdi:numeric-5-box-outline
state_color: true
toggle: true
tap_action:
action: toggle
- entity: switch.fan_speed_6
name: false
icon: mdi:numeric-6-box-outline
state_color: true
toggle: true
tap_action:
action: toggle
- entity: switch.fan_speed_7
name: false
icon: mdi:numeric-7-box-outline
toggle: true
state_color: true
tap_action:
action: toggle
show_header_toggle: false
title: 電風扇
風扇功耗裡面的設定請改成自己的
switch.qi_mei_feng_shan_cha_zuo 改成你的插座
以上為本次分享 有問題可在群內提問