diff --git a/README.md b/README.md index 80d6628..462086e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,172 @@ # aciremote -ESPhome remote for AC Infinity wired fan, using USB-C connector \ No newline at end of file +ESPhome remote for AC Infinity wired fan, using USB-C connector + +# ESPHome configuration + +``` +esphome: + name: aci-fan + friendly_name: aci-fan + +esp32: + variant: esp32c6 + framework: + type: esp-idf + +logger: + +api: + encryption: + key: ********************************************* + +ota: + - platform: esphome + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + ap: + ssid: aci-fan Fallback Hotspot + password: ************** + +captive_portal: + +script: + - id: handle_fan_change + then: + - lambda: | + float level = (id(fan_speed).state?id(fan_speed).speed:0) / 20.0; + esphome::light::LightState* ids[] = {id(led1), id(led2), id(led3), id(led4)}; + for (int i = 0; i < 4; i++) { + float brightness = level * 4 - i; + if (brightness < 0) + brightness = 0; + if (brightness > 1) + brightness = 1; + ids[i]->turn_on().set_brightness(brightness).perform(); + } + +output: + - platform: ledc + pin: GPIO19 + id: fan_pwm + inverted: true + frequency: 4882Hz + min_power: "0.1" + zero_means_zero: true + - platform: ledc + pin: GPIO20 + id: led_led1 + frequency: 4882Hz + - platform: ledc + pin: GPIO21 + id: led_led2 + frequency: 4882Hz + - platform: ledc + pin: GPIO22 + id: led_led3 + frequency: 4882Hz + - platform: ledc + pin: GPIO23 + id: led_led4 + frequency: 4882Hz + +light: + - platform: monochromatic + id: led1 + output: led_led1 + internal: true + default_transition_length: 0s + - platform: monochromatic + id: led2 + output: led_led2 + internal: true + default_transition_length: 0s + - platform: monochromatic + id: led3 + output: led_led3 + internal: true + default_transition_length: 0s + - platform: monochromatic + id: led4 + output: led_led4 + internal: true + default_transition_length: 0s + +sensor: + - platform: pulse_counter + name: "Fan RPM" + pin: GPIO18 + id: fan_rpm + device_class: speed + unit_of_measurement: RPM + filters: + - multiply: 0.33333333333333 + accuracy_decimals: 0 + update_interval: 5s + +fan: + - platform: speed + name: Fan Speed + id: fan_speed + output: fan_pwm + speed_count: 20 + restore_mode: RESTORE_DEFAULT_ON + on_speed_set: + - then: + - script.execute: handle_fan_change + on_state: + - then: + - script.execute: handle_fan_change +binary_sensor: + - platform: gpio + name: Up + id: button_up + internal: true + pin: + number: GPIO0 + inverted: true + mode: + input: true + pullup: true + on_press: + - then: + - lambda: | + if (id(fan_speed).state) { + id(fan_speed).turn_on().set_speed(id(fan_speed).speed + 1).perform(); + } else { + id(fan_speed).turn_on().set_speed(1).perform(); + } + filters: + - delayed_on: 50ms + - autorepeat: + delay: 500ms + time_off: 100ms + time_on: 150ms + - platform: gpio + name: Down + id: button_down + internal: true + pin: + number: GPIO1 + inverted: true + mode: + input: true + pullup: true + on_press: + - then: + - lambda: | + int current_speed = id(fan_speed).speed; + if (current_speed > 1) { + id(fan_speed).turn_on().set_speed(current_speed - 1).perform(); + } else { + id(fan_speed).turn_off().perform(); + } + filters: + - delayed_on: 50ms + - autorepeat: + delay: 500ms + time_off: 100ms + time_on: 150ms +```