Created
July 14, 2021 10:16
-
-
Save grischard/831e3c0d083527aa7b7ba2e12ef7520b to your computer and use it in GitHub Desktop.
Hob2Hood for esphome with four relays. Works with esphome 1.16.0, needs updating for more recent versions. Three push buttons: light, fan up, fan down. Four relays: light, fan 1, fan 2, fan 3.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
substitutions: | |
device: smarthood | |
name: Smart Hood | |
reboot_timeout: 1h | |
update_interval: 60s | |
delayed_on_off: 20ms | |
pin_relay_lamp: D0 | |
pin_relay_fan1: D3 | |
pin_relay_fan2: D2 | |
pin_relay_fan3: D1 | |
pin_button_lamp: D4 | |
pin_button_up: D5 | |
pin_button_down: D6 | |
pin_IR: D7 | |
# D8 empty, output only, and locks on start if I connect it to a relay (pulled high) | |
esphome: | |
name: ${device} | |
platform: ESP8266 | |
board: nodemcuv2 | |
# Boilerplate: wifi, api, ota, web server, text sensors | |
<<: !include common/common.yaml | |
# Boilerplate: logging | |
<<: !include common/logger.yaml | |
# Boilerplate: wifi signal, uptime | |
<<: !include common/sensors.yaml | |
remote_receiver: | |
pin: | |
number: ${pin_IR} | |
# Don't invert, despite what the log says | |
mode: INPUT_PULLUP | |
# dump: all | |
switch: | |
- platform: gpio | |
id: fan_low_relay | |
pin: | |
number: ${pin_relay_fan1} | |
inverted: yes | |
restore_mode: ALWAYS_OFF | |
interlock: &interlock_group [fan_low, fan_med, fan_high] | |
interlock_wait_time: 100ms | |
- platform: gpio | |
id: fan_med_relay | |
pin: | |
number: ${pin_relay_fan2} | |
inverted: yes | |
restore_mode: ALWAYS_OFF | |
interlock: *interlock_group | |
interlock_wait_time: 100ms | |
- platform: gpio | |
id: fan_high_relay | |
pin: | |
number: ${pin_relay_fan3} | |
inverted: yes | |
restore_mode: ALWAYS_OFF | |
interlock: *interlock_group | |
interlock_wait_time: 100ms | |
- platform: gpio | |
id: relay_light | |
name: Light | |
restore_mode: ALWAYS_OFF | |
pin: | |
inverted: yes | |
number: ${pin_relay_lamp} | |
- platform: template | |
id: fan_off | |
lambda: |- | |
if (id(fan_hood).state){ | |
return false; | |
} else { | |
return true; | |
} | |
turn_on_action: | |
- fan.turn_off: | |
id: fan_hood | |
- platform: template | |
id: fan_low | |
turn_on_action: | |
- fan.turn_on: | |
id: fan_hood | |
speed: LOW | |
- platform: template | |
id: fan_med | |
turn_on_action: | |
- fan.turn_on: | |
id: fan_hood | |
speed: MEDIUM | |
- platform: template | |
id: fan_high | |
turn_on_action: | |
- fan.turn_on: | |
id: fan_hood | |
speed: HIGH | |
binary_sensor: | |
- !include common/binary_sensor/status.yaml | |
- platform: gpio | |
pin: | |
number: ${pin_button_up} | |
mode: INPUT_PULLUP | |
inverted: yes | |
id: button_up | |
filters: | |
- delayed_on_off: ${delayed_on_off} | |
on_press: | |
then: | |
- lambda: |- | |
if (id(fan_hood).state) { | |
if (id(fan_hood).speed == 0) { | |
id(fan_med).turn_on(); | |
ESP_LOGD("main", "Fan set to Medium"); | |
} else { | |
if (id(fan_hood).speed == 1){ | |
id(fan_high).turn_on(); | |
ESP_LOGD("main", "Fan set to High"); | |
} else { | |
ESP_LOGD("main", "Captain, I'm giving her all she's got!"); | |
} | |
} | |
} else { | |
id(fan_low).turn_on(); | |
ESP_LOGD("main", "Fan set to Low"); | |
} | |
- platform: gpio | |
pin: | |
number: ${pin_button_down} | |
mode: INPUT_PULLUP | |
inverted: yes | |
filters: | |
- delayed_on_off: ${delayed_on_off} | |
id: button_down | |
on_press: | |
then: | |
- lambda: |- | |
if (id(fan_hood).state) { | |
if (id(fan_hood).speed == 0) { | |
id(fan_off).turn_on(); | |
ESP_LOGD("main", "Fan set to Off"); | |
} else { | |
if (id(fan_hood).speed == 1){ | |
id(fan_low).turn_on(); | |
ESP_LOGD("main", "Fan set to Low"); | |
} else { | |
id(fan_med).turn_on(); | |
ESP_LOGD("main", "Fan set to Medium"); | |
} | |
} | |
} else { | |
ESP_LOGD("main", "He's dead, Jim"); | |
} | |
- platform: gpio | |
pin: | |
number: ${pin_button_lamp} | |
mode: INPUT_PULLUP | |
inverted: yes | |
id: button_light | |
filters: | |
- delayed_on_off: ${delayed_on_off} | |
on_press: | |
then: | |
- switch.toggle: relay_light | |
# IR codes from https://github.com/JameZUK/hob2hood-RAW-IR-Codes | |
- platform: remote_receiver | |
id: Hob2Hood_Speed_Off | |
raw: | |
code: [-720, 1468, -722, 1470, -2114, 1472, -722, 1470, -1416, 2218, -724, 1470, -724, 720, -698] | |
on_press: | |
then: | |
- fan.turn_off: | |
id: fan_hood | |
- platform: remote_receiver | |
id: Hob2Hood_Speed_Low | |
raw: | |
code: [-1416, 1494, -722, 1570, -1974, 1510, -722, 1468, -726, 718, -724, 1468, -724, 2216, -696] | |
on_press: | |
then: | |
- fan.turn_on: | |
id: fan_hood | |
speed: LOW | |
- platform: remote_receiver | |
id: Hob2Hood_Speed_Medium | |
raw: | |
code: [-1440, 1472, -724, 2936, -752, 2190, -3530, 2224, -2114] | |
on_press: | |
then: | |
- fan.turn_on: | |
id: fan_hood | |
speed: MEDIUM | |
- platform: remote_receiver | |
id: Hob2Hood_Speed_High | |
raw: | |
code: [-696, 2240, -2784, 2968, -2116, 750, -724, 2216, -2114] | |
on_press: | |
then: | |
- fan.turn_on: | |
id: fan_hood | |
speed: HIGH | |
- platform: remote_receiver | |
id: Hob2Hood_Speed_Turbo | |
raw: | |
code: [-1416, 2244, -1418, 722, -1418, 2216, -1418, 1470, -724, 2216, -722, 722, -1392] | |
on_press: | |
then: | |
- fan.turn_on: | |
id: fan_hood | |
speed: HIGH | |
- platform: remote_receiver | |
id: Hob2Hood_Light_On | |
raw: | |
#code: [-654, 1525, -626, 802, -1330, 802, -626, 1524, -627, 774, -1354, 2975, -626, 800, -627, 800, -1327] | |
code: [-718, 1472, -720, 726, -1388, 752, -718, 1472, -694, 750, -1390, 2994, -720, 724, -720, 726, -1386] | |
on_press: | |
then: | |
- switch.turn_on: | |
id: relay_light | |
- platform: remote_receiver | |
id: Hob2Hood_Light_Off | |
raw: | |
code: [-684, 1488, -658, 778, -684, 758, -686, 2278, -660, 788, -628, 1532, -688, 1504, -686, 786, -658] | |
on_press: | |
then: | |
- switch.turn_off: | |
id: relay_light | |
output: | |
- platform: template | |
id: fanoutput | |
type: float | |
write_action: | |
- if: | |
condition: | |
lambda: return ((state < 0.33)); | |
then: | |
# action for off | |
- switch.turn_off: fan_low_relay | |
- switch.turn_off: fan_med_relay | |
- switch.turn_off: fan_high_relay | |
- if: | |
condition: | |
lambda: return ((state > 0) && (state < .34)); | |
then: | |
# action for low | |
- switch.turn_off: fan_med_relay | |
- switch.turn_off: fan_high_relay | |
- switch.turn_on: fan_low_relay | |
- if: | |
condition: | |
lambda: return ((state > .34) && (state < .7)); | |
then: | |
# action for medium | |
- switch.turn_off: fan_low_relay | |
- switch.turn_off: fan_high_relay | |
- switch.turn_on: fan_med_relay | |
- if: | |
condition: | |
lambda: return ((state > 0.99)); | |
then: | |
# action for high | |
- switch.turn_off: fan_low_relay | |
- switch.turn_off: fan_med_relay | |
- switch.turn_on: fan_high_relay | |
fan: | |
- platform: speed | |
output: fanoutput | |
id: fan_hood | |
name: "Fan" |
This would definitely be a different thread, but, as you obviously have a good understanding on how esphome works with the hob2hood protocol, do you mind attempting making a yaml for a hob2hood ir transmitter? I would be more than happy to test it if required. Thank you!
@mihaimdinca unfortunately I don't have a transmitter to test anymore. You should be able to ask chatgpt to convert https://github.com/JameZUK/hob2hood-RAW-IR-Codes for you.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oh cool! Were you able to reverse engineer the wifi protocol it uses?