So, the problem I have is that that fan speed does not fall into regulation based on the temperature ranges specified until the unit moves from one range to another. I set the preliminary speed to 100% until that happens at boot. I have been trying to find a way set set a bogus value into the temperature value so the code will quickly see a window change and start regulating speed, I have had no luck. Can this even be done?
substitutions:
name: apple-fan
friendly_name: Apple Fan Controller
devicename: apple-fan
esphome_platform: esp32
esphome_board: esp32dev
esphome_project_name: "Apple.temperature_control"
esphome_project_version: "apple-fan-v.1"
esphome:
name: "apple-fan"
friendly_name: Apple Fan Controller
name_add_mac_suffix: false
project:
name: $esphome_project_name
version: $esphome_project_version
on_boot:
# Power up fan at boot
priority: 800
then:
- if:
condition:
api.connected: null
then:
- logger.log: API is connected! Now we can trigger what we want!
else:
- delay: 1s
- output.set_level:
id: apple_pwm_speed
level: 1.0 # 100% pwm speed until temp is taken
esp32:
board: esp32dev
framework:
type: esp-idf
# Enable logging
logger:
level: debug
logs:
sht3xd.component: info
# Enable Home Assistant API
api:
reboot_timeout: 0s
# Allow Over-The-Air updates
ota:
- platform: esphome
wifi:
domain: .home
ssid: !secret wifi_ssid
password: !secret wifi_password
# Set up a wifi access point
ap:
ssid: "${friendly_name}"
password: "12345678"
dashboard_import:
package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
import_full_config: true
web_server:
include_internal: True
status_led:
pin:
number: GPIO2
inverted: false
i2c:
- id: bus_a
sda: GPIO21
scl: GPIO22
scan: true
frequency: 100kHz
- id: bus_b
sda: GPIO16
scl: GPIO17
scan: true
frequency: 100kHz
#display:
# - platform: lcd_pcf8574
# id: mydisplay
# dimensions: 16x2
# i2c_id: bus_b
# address: 0x27
output:
- platform: ledc
id: apple_pwm_speed
pin: GPIO27
frequency: 25000Hz
number:
- platform: template
name: "Pwm Fan Slider"
id: slider
min_value: 15
max_value: 100
step: 1
optimistic: true
unit_of_measurement: "%"
set_action:
then:
- output.set_level:
id: apple_pwm_speed
level: !lambda "return x/100;"
text_sensor:
# Send IP Address
- platform: wifi_info
ip_address:
name: $friendly_name IP Address
# Send Uptime in raw seconds
- platform: template
name: $friendly_name Uptime
id: uptime_human
icon: mdi:clock-start
sensor:
- platform: sht3xd
temperature:
name: "Apple Internal Temperature"
id: sht30t
internal: false
accuracy_decimals: 1
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
# on_value:
# then:
# - logger.log: "testing..."
on_value_range:
- above: 74.0
then:
- logger.log: "Set fan level 100 over 72"
- number.set:
id: slider
value: 100
- output.set_level:
id: apple_pwm_speed
level: 100%
- above: 72.0
below: 74
then:
- logger.log: "Set fan level 66 for above 68 below 72"
- number.set:
id: slider
value: 75
- output.set_level:
id: apple_pwm_speed
level: 75%
- above: 68.0
below: 72
then:
- logger.log: "Set fan level 66 for above 68 below 72"
- number.set:
id: slider
value: 66
- output.set_level:
id: apple_pwm_speed
level: 66%
- above: 65.0
below: 68.0
then:
- logger.log: "Set fan level 33 for above 65 below 68"
- number.set:
id: slider
value: 33
- output.set_level:
id: apple_pwm_speed
level: 33%
- above: 63.0
below: 65.0
then:
- logger.log: "Set fan level 66 for above 65 below 63"
- number.set:
id: slider
value: 25
- output.set_level:
id: apple_pwm_speed
level: 25%
- below: 63.0
then:
- logger.log: "Set fan level 15 below 63F"
- number.set:
id: slider
value: 15
- output.set_level:
id: apple_pwm_speed
level: 15%
humidity:
name: "Apple Internal Humidity"
id: sht30h
internal: false
accuracy_decimals: 0
filters:
- sliding_window_moving_average:
window_size: 15
send_every: 15
i2c_id: bus_a
address: 0x44
update_interval: 30s
# Fan Speed
- platform: pulse_counter
pin:
number: GPIO25
mode:
input: true
pullup: true
name: PWM Fan RPM
id: fan_pulse
unit_of_measurement: 'RPM'
internal: false
accuracy_decimals: 1
filters:
- multiply: 0.5
count_mode:
rising_edge: INCREMENT
falling_edge: DISABLE
update_interval: 3s
# Send WiFi signal strength & uptime to HA
- platform: wifi_signal
name: $friendly_name WiFi Strength
update_interval: 60s
- platform: uptime
name: $friendly_name Uptime
id: uptime_sensor
update_interval: 60s
on_raw_value:
then:
- text_sensor.template.publish:
id: uptime_human
# Custom C++ code to generate the result
state: !lambda |-
int seconds = round(id(uptime_sensor).raw_state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return (
(days ? to_string(days) + "d " : "") +
(hours ? to_string(hours) + "h " : "") +
(minutes ? to_string(minutes) + "m " : "") +
(to_string(seconds) + "s")
).c_str();
switch:
- platform: restart
name: "Restart"