diff options
Diffstat (limited to 'test-yamls/kauf-plug-no-options.yaml')
-rw-r--r-- | test-yamls/kauf-plug-no-options.yaml | 1066 |
1 files changed, 1066 insertions, 0 deletions
diff --git a/test-yamls/kauf-plug-no-options.yaml b/test-yamls/kauf-plug-no-options.yaml new file mode 100644 index 0000000..5d85de4 --- /dev/null +++ b/test-yamls/kauf-plug-no-options.yaml @@ -0,0 +1,1066 @@ +# https://esphome.io/guides/configuration-types.html#substitutions +substitutions: + + # substitutions can be changed here if you are using this file directly in the ESPHome dashboard. The better approach is + # to incorporate this file as a package using the following packages: configuration, and then overwrite these substitutions + # in your local yaml file by redefining them. + # + # packages: + # kauf.plf10: github://KaufHA/PLF10/kauf-plug.yaml + # + + name: kauf-plug # **** CHANGE DEVICE NAME TO SOMETHING UNIQUE PER DEVICE. RENAME YAML FILE TO SAME NAME. **** + # **** USE DASHES (-) INSTEAD OF SPACES OR UNDERSCORE (_). USE ONLY LOWER CASE LETTERS. **** + friendly_name: Kauf Plug # **** CHANGE FRIENDLY NAME TO SOMETHING UNIQUE PER DEVICE **** + + # https://esphome.io/components/esphome.html#esphome-creators-project + project_name: Kauf.PLF10 + project_ver_num: "2.02" + project_ver_let: y + + disable_entities: "true" # set to "false" to have all entities show up in Home Assistant automatically + disable_webserver: "false" # set to "true" to disable the webserver listening on port 80. + + # substitutions for button actions. on_press and on_release implement a timer scheme with configurable delay. + # on_hold_30s re-enables the AP and captive portal for the precompiled update binary. + # any length of hold can be implemented with just on_press and on_release using the following directions. This + # is basically how this yaml file works. + # * have a delay for the desired hold in the on_press script + # * stop the on_press script in the on_release script + # * place actions in the on_press script after the delay to perform them while still holding the button + # * place actions in the on_release script, with the condition that the on_press script is not running, to + # perform them on release of the button. + sub_on_press: script_do_nothing # executes right when button is initially pressed + sub_on_release: script_do_nothing # executes right when button is released + sub_on_hold_30s: script_force_ap # executes right when button has been held for 5s, while button is still being held + + sub_on_turn_on: script_do_nothing + sub_on_turn_off: script_do_nothing + + # an extra script that, if running, will stop the relay from toggling on button release. + # used to not toggle when WiFi AP is re-enabled on update bin file. + sub_toggle_check: script_force_ap + + # made this a substitution so that the update bin file and yaml compiled versions can have different defaults + default_button_config: "Toggle on Press" + + # substitutions for power monitoring calibration. Allows end users to change calibration in their yaml and still + # incorporate this file as a package to get all the updates we release. + current_resistor_val: "0.001" + voltage_divider_val: "2401" + sub_hlw_model: HLW8012 + power_cal_val1_in: "0.0" + power_cal_val1_out: "0.0" + power_cal_val2_in: "333.8" + power_cal_val2_out: "60" + current_cal_val1_in: "0.0" + current_cal_val1_out: "0.0" + current_cal_val2_in: "0.6" + current_cal_val2_out: "0.515" + voltage_cal_val1_in: "0.0" + voltage_cal_val1_out: "0.0" + voltage_cal_val2_in: "302.1" + voltage_cal_val2_out: "117.1" + + # GPIO definitions + sub_pm_sel_pin: GPIO12 + sub_pm_cf_pin: GPIO5 + sub_pm_cf1_pin: GPIO14 + sub_button_pin: GPIO13 + sub_blue_led_pin: GPIO2 + sub_red_led_pin: GPIO0 + sub_relay_pin: GPIO4 + + + ################################################### + ## THE FOLLOWING SUBSTITUTIONS IMPLEMENT OPTIONS ## + ## THAT WERE REMOVED IN THIS YAML FILE. ## + ################################################### + + # API Reboot Timeout. Defaults to off now. ESPHome default is 15 min. + sub_api_reboot_timeout: 0s + + # Button Debounce Time. + sub_debounce_time: "100ms" + + # Power Monitoring Update Interval + sub_update_interval: 10s + + # Scale variables, scales power monitoring sensors. + sub_scale_power: "1.0" + sub_scale_current: "1.0" + sub_scale_voltage: "1.0" + + # default boot up behavior of relay + # https://esphome.io/components/switch/gpio.html?highlight=restore_mode + sub_restore_mode: RESTORE_DEFAULT_ON + + +# https://esphome.io/components/esp8266.html +esp8266: + board: esp01_1m + restore_from_flash: true + early_pin_init: false + start_free: 76 + global_addr: global_forced_addr + + +# https://esphome.io/guides/automations.html#global-variables +globals: + - id: global_forced_addr + type: int + restore_value: no + initial_value: '12345' + + # REMOVED OPTION: Global Press Time Variable + # - id: global_press_time + # type: int + # restore_value: no + # initial_value: '0' + + # REMOVED OPTION: Debounce Boolean + # - id: global_has_debounce + # type: boolean + # restore_value: no + # initial_value: "false" + + +# https://esphome.io/components/esphome.html#adjusting-flash-writes +preferences: + # setting interval to 5 minutes since this defines writing total daily energy to flash, which will occur + # every interval length 24/7/365. Created a specific save script that is executed for things that need + # to save more quickly. + flash_write_interval: 5min + + +# https://esphome.io/components/esphome.html +esphome: + name: $name + + project: + name: $project_name + version: $project_ver_num($project_ver_let) + + on_boot: + then: + # implementing on_boot automation as a script makes it run in parallel + # with any other on_boot scripts. + + # REMOVED OPTION: Set Power LEDs at Boot + # - script.execute: script_set_power_leds + - script.execute: on_wifi_connect + + +# https://esphome.io/components/external_components.html +external_components: + - source: + type: git + url: https://github.com/KaufHA/common + ref: v2022.12.07.2 + refresh: 365250d + + +# https://esphome.io/components/wifi.html +wifi: + + # **** ENTER WI-FI CREDENTIALS HERE, USING SECRETS.YAML RECOMMENDED **** + ssid: initial_ap # !secret wifi_ssid + password: asdfasdfasdfasdf # !secret wifi_password + + # using fast_connect as default since it is required for hidden networks. + fast_connect: true + + # enable wifi ap with ridiculous timeout so it does not normally turn on. + ap: + ap_timeout: 2147483647ms # maximum 32 bit value. About 3.5 weeks in milliseconds. + + forced_addr: 8 + global_addr: global_forced_addr + + +# https://esphome.io/components/captive_portal.html +captive_portal: + + +# https://esphome.io/components/logger.html +logger: + + +# https://esphome.io/components/api.html +api: + id: kauf_api + reboot_timeout: $sub_api_reboot_timeout + +# https://esphome.io/components/ota.html +ota: + on_error: + - button.press: restart_button + +# REMOVED OPTION: Hard Status LED +status_led: + pin: $sub_red_led_pin + +# https://esphome.io/components/web_server.html +web_server: + local: true + disable: $disable_webserver + + +# https://esphome.io/components/binary_sensor/index.html +binary_sensor: + + # button input toggles relay and thereby power led + # https://esphome.io/components/binary_sensor/gpio.html + - platform: gpio + id: button_in + name: $friendly_name Button + pin: + number: $sub_button_pin + mode: + input: true + pullup: true + inverted: true + + # REMOVED OPTION: Add Debounce as Filter + filters: + - delayed_on: $sub_debounce_time + on_press: + # REMOVED OPTION: On Press Lambda + # - lambda: |- + + # // REMOVED OPTION: Press Duration on Press + # // store time of press and clear duration sensor + # // id(global_press_time) = millis(); + # // id(sensor_press_duration).publish_state(0); + + # // REMOVED OPTION: Toggle on Press + # // toggle if configured for toggle on press + # // if (id(select_button).state == "Toggle on Press") { + # // id(relay).toggle(); } + - script.execute: $sub_on_press + - script.execute: script_30s_timer + on_release: + - lambda: |- + // REMOVED OPTION: Press Duration on Release + // set duration sensor + // id(sensor_press_duration).publish_state(millis() - id(global_press_time) + id(number_debounce).state); + + // REMOVED OPTION: Always Toggle on Release + // toggle if configured on release and toggle check script is not running. + if ( /*(id(select_button).state == "Toggle on Release") && */ !id($sub_toggle_check).is_running() ) { + id(relay).toggle(); + } + - script.execute: $sub_on_release + - script.stop: script_30s_timer + + + # REMOVED OPTION: Device In Use Binary Sensor + # indicates whether plugged-in device is running based on configurable threshold. + # https://esphome.io/components/binary_sensor/template.html + # - platform: template + # id: in_use + # name: ${friendly_name} Device In Use + + +# https://esphome.io/guides/automations.html#script-component +script: + + # REMOVED OPTION: Set Power LED Script + # sets LEDs to proper state based on LED configuration and relay state + # - id: script_set_power_leds + # then: + # - lambda: |- + # auto call = id(blue_led).make_call(); + + # // if blue led follows power status + # if ( (id(select_bled).state == "Power Status") || (id(select_bled).state == "Error and Power") ) { + # call.set_state(id(relay).state); + # } + + # // if blue led follows inverse of power status + # else if ( (id(select_bled).state == "Invert Power Status") || (id(select_bled).state == "Error and Invert Power") ) { + # call.set_state(!id(relay).state); + # } + + # // if blue led is set to not change on power status (error only or disabled), performing an empty call does nothing. + # call.perform(); + + # // same as blue but for red led + # call = id(red_led).make_call(); + # if ( (id(select_rled).state == "Power Status") || (id(select_rled).state == "Error and Power") ) { + # call.set_state(id(relay).state); } + # else if ( (id(select_rled).state == "Invert Power Status") || (id(select_rled).state == "Error and Invert Power") ) { + # call.set_state(!id(relay).state); } + # call.perform(); + + # - script.execute: script_save_changes + + # REMOVED OPTION: Blink Status LED Script + # - id: blink_status_led + # mode: queued + # then: + + # - lambda: |- + # // turn on blue LED if configured for error status + # if ( (id(select_bled).state == "Error Status") || + # (id(select_bled).state == "Error and Power") || + # (id(select_bled).state == "Error and Invert Power") ) { + # auto call = id(blue_led).turn_on(); + # call.set_save(false); + # call.perform(); + # } + + # // turn on red LED if configured for error status + # if ( (id(select_rled).state == "Error Status") || + # (id(select_rled).state == "Error and Power") || + # (id(select_rled).state == "Error and Invert Power") ) { + # auto call = id(red_led).turn_on(); + # call.set_save(false); + # call.perform(); + # } + + # - delay: 350ms + + # - lambda: |- + # // turn off blue LED if configured for error status + # if ( (id(select_bled).state == "Error Status") || + # (id(select_bled).state == "Error and Power") || + # (id(select_bled).state == "Error and Invert Power") ) { + # auto call = id(blue_led).turn_off(); + # call.set_save(false); + # call.perform(); + # } + + # // turn off red LED if configured for error status + # if ( (id(select_rled).state == "Error Status") || + # (id(select_rled).state == "Error and Power") || + # (id(select_rled).state == "Error and Invert Power") ) { + # auto call = id(red_led).turn_off(); + # call.set_save(false); + # call.perform(); + # } + + # - delay: 1150ms + + # - if: + # condition: + # - lambda: return ( ( (App.get_app_state() & STATUS_LED_ERROR) != 0u) || ((App.get_app_state() & STATUS_LED_WARNING) != 0u) ); + # then: + # - script.execute: blink_status_led # repeat as long as error/warning exists + # else: + # - script.execute: script_set_power_leds # done with status LED, restore light power status + + - id: script_setting_reboot + mode: restart # only reboot plug settings are static for 10s. Another change restarts timer. + then: + - lambda: ESP_LOGCONFIG("kauf-plug.yaml","Setting change requiring reboot detected, rebooting in 10 seconds to effect change."); + - delay: 10s + - button.press: restart_button + + - id: script_30s_timer + then: + + # REMOVED OPTION: Don't Subtract Debounce Time + - delay: !lambda return (30000 /*-id(number_debounce).state */); + - script.execute: $sub_on_hold_30s + + - id: on_wifi_connect + then: + + # wait until wifi connects + - wait_until: wifi.connected + + - lambda: |- + ESP_LOGD("KAUF on_boot","------------------->>>>>>>>>>>>>>>>> wifi connected, cranking ap timeout back up"); + wifi_wificomponent->set_ap_timeout(2147483647); + + - id: script_force_ap + then: + - logger.log: "------------------->>>>>>>>>>>>>>>>> HELD BUTTON 30 SECONDS, FORCING AP" + + # overwrite software defined credentials to force ap to turn on. + - lambda: wifi::global_wifi_component->save_wifi_sta("initial_ap","asdfasdfasdfasdf"); + + # blink LED for 10s then restart to get captive portal to turn on. + - script.execute: blink_led + - delay: 10s + - button.press: restart_button + + + # REMOVED OPTION: Toggle Blue LED as Switch not Light + # blink LED forever. Used when button is held to re-enable AP. Stops blinking because plug restarts. + - id: blink_led + mode: queued + then: + - switch.toggle: blue_led +# - light.toggle: blue_led + - delay: 333ms + - script.execute: blink_led + + - id: script_do_nothing + then: + - lambda: return; + + - id: script_save_changes + mode: restart + then: + - delay: 3s + - lambda: global_preferences->sync(); + + +# REMOVED OPTION: Output Section +# pwm outputs for LEDs so they can be dimmed +# https://esphome.io/components/output/esp8266_pwm.html +# output: + + # REMOVED OPTION: Blue LED Output + # - platform: esp8266_pwm + # id: blue_led_pwm + # frequency: 200 Hz + # pin: $sub_blue_led_pin + # inverted: true + + # REMOVED OPTION: Red LED Output + # - platform: esp8266_pwm + # id: red_led_pwm + # frequency: 200 Hz + # pin: $sub_red_led_pin + # inverted: true + + +# REMOVED OPTION: Light Section +# light entities for blue and red LEDs +# https://esphome.io/components/light/index.html +# https://esphome.io/components/light/monochromatic.html +# light: + + # REMOVED OPTION: Blue LED Light + # - platform: monochromatic + # name: $friendly_name Blue LED + # id: blue_led + # output: blue_led_pwm + # entity_category: config + # default_transition_length: 0s + # forced_hash: 3831461887 + # forced_addr: 44 + # global_addr: global_forced_addr + # effects: + # - flicker: + # name: Flicker + # alpha: 90% + # intensity: 10% + + # Removed Option: Red LED Light + # - platform: monochromatic + # name: $friendly_name Red LED + # id: red_led + # output: red_led_pwm + # entity_category: config + # default_transition_length: 0s + # forced_hash: 261191305 + # forced_addr: 62 + # global_addr: global_forced_addr + # effects: + # - flicker: + # name: Flicker + # alpha: 90% + # intensity: 10% + + +# https://esphome.io/components/switch/index.html +switch: + + # relay output + # https://esphome.io/components/switch/gpio.html + - platform: gpio + id: relay + name: $friendly_name + pin: $sub_relay_pin + entity_category: '' + forced_hash: 41191675 + forced_addr: 2 + global_addr: global_forced_addr + restore_mode: $sub_restore_mode + + # REMOVED OPTION: Hard Code Blue LED Power Status + on_turn_on: + - script.execute: script_save_changes + - switch.turn_on: blue_led +# - script.execute: script_set_power_leds + - script.execute: $sub_on_turn_on + on_turn_off: + - script.execute: script_save_changes + - switch.turn_off: blue_led +# - script.execute: script_set_power_leds + - script.execute: $sub_on_turn_off + + - platform: gpio + id: blue_led + pin: $sub_blue_led_pin + + # REMOVED OPTION: Reboot Timeout + # # https://esphome.io/components/switch/template.html + # - platform: template + # id: switch_no_hass + # name: $friendly_name No HASS + # optimistic: true + # restore_state: true + # entity_category: config + # disabled_by_default: $disable_entities + # icon: mdi:toggle-switch-off-outline + # on_turn_on: + # - lambda: |- + # id(kauf_api).set_reboot_timeout(0); // 0 disables auto rebooting and also new status led blinking. doesn't stop current status led blinking + # id(kauf_api).status_clear_warning(); // stops current status led blinking, timeout 0 keeps it from restarting + # - script.execute: script_save_changes + # on_turn_off: + # - lambda: id(kauf_api).set_reboot_timeout(900000); + # - script.execute: script_save_changes + # forced_hash: 657159011 + # forced_addr: 42 + # global_addr: global_forced_addr + + +# https://esphome.io/components/button/index.html +# https://esphome.io/components/button/restart.html +button: + - platform: restart + id: restart_button + name: $friendly_name Restart Firmware + entity_category: diagnostic + disabled_by_default: $disable_entities + + +# clock input from Home Assistant used to calculate total daily energy +# https://esphome.io/components/time.html#home-assistant-time-source +time: + - platform: homeassistant + id: homeassistant_time + + +# https://esphome.io/components/sensor/index.html +sensor: # Power monitoring sensors output to Home Assistant + + # https://esphome.io/components/sensor/hlw8012.html + - platform: kauf_hlw8012 + id: hlw_main + sel_pin: + number: $sub_pm_sel_pin + inverted: True + cf_pin: $sub_pm_cf_pin + cf1_pin: $sub_pm_cf1_pin + current_resistor: $current_resistor_val + voltage_divider: $voltage_divider_val + + update_interval: $sub_update_interval + + model: $sub_hlw_model + + power: + name: ${friendly_name} Power + unit_of_measurement: W + id: wattage + filters: + - calibrate_linear: + - $power_cal_val1_in -> $power_cal_val1_out + - $power_cal_val2_in -> $power_cal_val2_out + + # REMOVED OPTION: Hard Scale Power +# - lambda: return x * id(scale_power).state/100.0f; + - lambda: return x * $sub_scale_power; + + # REMOVED OPTION: Setting In Use Binary Sensor + # on_value: # set or clear in_use template binary sensor depending on whether power usage is over threshold + # - lambda: id(in_use).publish_state(x >= id(threshold).state); + + current: + name: ${friendly_name} Current + unit_of_measurement: A + id: current + filters: + - calibrate_linear: + - $current_cal_val1_in -> $current_cal_val1_out + - $current_cal_val2_in -> $current_cal_val2_out + + # REMOVED OPTION: Hard Scale Current +# - lambda: return x * id(scale_current).state/100.0f; + - lambda: return x * $sub_scale_current; + + voltage: + name: ${friendly_name} Voltage + unit_of_measurement: V + id: voltage + filters: + - calibrate_linear: + - $voltage_cal_val1_in -> $voltage_cal_val1_out + - $voltage_cal_val2_in -> $voltage_cal_val2_out + + # REMOVED OPTION: Hard Scale Voltage +# - lambda: return x * id(scale_voltage).state/100.0f; + - lambda: return x * $sub_scale_voltage; + + # Reports the total Power so-far each day, resets at midnight + # https://esphome.io/components/sensor/total_daily_energy.html + - platform: total_daily_energy + name: ${friendly_name} Total Daily Energy + power_id: wattage + filters: + - multiply: 0.001 ## convert Wh to kWh + unit_of_measurement: kWh + forced_hash: 1903527169 + forced_addr: 6 + global_addr: global_forced_addr + + + # REMOVED OPTION: Uptime Sensor + # # https://esphome.io/components/sensor/uptime.html + # - platform: uptime + # name: $friendly_name Uptime + # update_interval: 60s + # entity_category: diagnostic + # disabled_by_default: $disable_entities + + # REMOVED OPTION: Button Press Duration Sensor + # # https://esphome.io/components/sensor/template.html + # - platform: template + # name: $friendly_name Button Press Duration + # id: sensor_press_duration + # entity_category: diagnostic + # disabled_by_default: $disable_entities + # unit_of_measurement: ms + # icon: mdi:timer-outline + + + +# REMOVED OPTION: Number Section +# https://esphome.io/components/number/index.html +# https://esphome.io/components/number/template.html +#number: # used as a threshold for whether the plugged-in devices is running. + + # REMOVED OPTION: In Use Threshold + # - platform: template + # name: ${friendly_name} Use Threshold + # min_value: 1 + # max_value: 100 + # step: 1 + # initial_value: 3 + # id: threshold + # entity_category: config + # optimistic: true + # restore_value: true + # unit_of_measurement: Watt(s) + # mode: box + # disabled_by_default: $disable_entities + # forced_hash: 3932521563 + # forced_addr: 4 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # on_value: # set or clear in_use template binary sensor depending on whether power usage is above threshold + # - lambda: id(in_use).publish_state(id(wattage).state >= x); + + # REMOVED OPTION: Scale Power + # - platform: template + # name: ${friendly_name} Scale Power + # min_value: 50 + # max_value: 200 + # step: .1 + # initial_value: 100 + # id: scale_power + # entity_category: config + # optimistic: true + # restore_value: true + # unit_of_measurement: "%" + # mode: box + # disabled_by_default: $disable_entities + # forced_hash: 3565176138 + # forced_addr: 56 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # on_value: # republish value. Sensor automation applies new scaling factor. + # - lambda: id(wattage).publish_state(id(wattage).get_raw_state()); + + # REMOVED OPTION: Scale Current + # - platform: template + # name: ${friendly_name} Scale Current + # min_value: 50 + # max_value: 200 + # step: .1 + # initial_value: 100 + # id: scale_current + # entity_category: config + # optimistic: true + # restore_value: true + # unit_of_measurement: "%" + # mode: box + # disabled_by_default: $disable_entities + # forced_hash: 2293595686 + # forced_addr: 58 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # on_value: # republish value. Sensor automation applies new scaling factor. + # - lambda: id(current).publish_state(id(current).get_raw_state()); + + # REMOVED OPTION: Scale Voltage + # - platform: template + # name: ${friendly_name} Scale Voltage + # min_value: 50 + # max_value: 200 + # step: .1 + # initial_value: 100 + # id: scale_voltage + # entity_category: config + # optimistic: true + # restore_value: true + # unit_of_measurement: "%" + # mode: box + # disabled_by_default: $disable_entities + # forced_hash: 254525215 + # forced_addr: 60 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # on_value: # republish value. Sensor automation applies new scaling factor. + # - lambda: id(voltage).publish_state(id(voltage).get_raw_state()); + + + # REMOVED OPTION: Debounce Time + # - platform: template + # name: ${friendly_name} Debounce Time + # min_value: $sub_min_debounce + # max_value: 2000 + # step: 1 + # initial_value: $sub_default_debounce + # id: number_debounce + # entity_category: config + # optimistic: true + # restore_value: true + # unit_of_measurement: "ms" + # mode: box + # disabled_by_default: $disable_entities + # forced_hash: 2232959069 + # forced_addr: 40 + # global_addr: global_forced_addr + # set_action: # currently rebooting plug to apply new delayed_on time + # - script.execute: script_save_changes + # - script.execute: script_setting_reboot + # on_value: + # - lambda: |- + # // add a delayed_on filter to the button binary_sensor with time argument from number_debounce. + # if ( !id(global_has_debounce) ) { + # binary_sensor::DelayedOnFilter *button_delayedonfilter; + # button_delayedonfilter = new binary_sensor::DelayedOnFilter(id(number_debounce).state); + # button_delayedonfilter->set_component_source("binary_sensor"); + # App.register_component(button_delayedonfilter); + # id(button_in).add_filters({button_delayedonfilter}); + # id(global_has_debounce) = true; + # } + +# REMOVED OPTION: Select Section +# https://esphome.io/components/select/index.html +# https://esphome.io/components/select/template.html +select: + + # REMOVED OPTION: Legacy Button Configuration + # legacy select button configuration; remove June 1, 2023 + # removed name, so won't show up in UI. This is kept so that previous + # setting can be migrated to new select entities. + # new entity is saved at same address with incremented hash so once the new + # one is saved, this one won't be loaded next time. + # - platform: template + # id: select_button_old + # optimistic: true + # options: + # - Toggle if Pressed For 20ms + # - Disable Button + # - Toggle if Pressed For 100ms + # - Toggle if Pressed For 250ms + # - Toggle if Pressed For 1s + # - Toggle if Released After 20ms + # - Toggle if Released After 100ms + # - Toggle if Released After 250ms + # - Toggle if Released After 1s + # - Didn't Restore + # initial_option: Didn't Restore + # restore_value: true + # forced_hash: 3616613942 + # forced_addr: 34 + # global_addr: global_forced_addr + # on_value: + # - wait_until: # wait until new select entity is setup so set_option won't get overwritten with default value on setup + # lambda: return ( id(select_button).has_state() ); + # - lambda: |- + # if ( x == "Didn't Restore" ) { + # id(select_button_old).set_restore_value(false); // don't let old select save over new select + # ESP_LOGD("Kauf Config Migration", "No legacy button configuration to migrate."); + # } else { + # ESP_LOGD("Kauf Config Migration", "Found legacy button configuration, migrating to new format."); + + # // set button config select entity based on press/release/disabled + # auto call_sel = id(select_button).make_call(); + # if ( i == 1 ) { call_sel.set_option("Don't Toggle"); } + # else if ( i >= 5 ) { call_sel.set_option("Toggle on Release"); } + # else { call_sel.set_option("Toggle on Press"); } + # call_sel.perform(); + + # // set number_debounce if configured for longer than 100ms. + # std::size_t found = x.find("250ms"); + # if (found != std::string::npos) { + # auto call_num = id(number_debounce).make_call(); + # call_num.set_value(250); + # call_num.perform(); } + # found = x.find("1s"); + # if (found != std::string::npos) { + # auto call_num = id(number_debounce).make_call(); + # call_num.set_value(1000); + # call_num.perform(); } + + # // go ahead and trigger a reboot on every config restoration + # id(script_save_changes).execute(); + # id(script_setting_reboot).execute(); + + # } + + # REMOVED OPTION: Button Config, hard coded to toggle on release now + # - platform: template + # name: $friendly_name Button Config + # id: select_button + # optimistic: true + # options: + # - Toggle on Press + # - Toggle on Release + # - Don't Toggle + # initial_option: $default_button_config + # restore_value: true + # icon: mdi:circle-double + # entity_category: config + # forced_hash: 3616613943 + # forced_addr: 34 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + + # REMOVED OPTION: Blue LED Config + # - platform: template + # name: $friendly_name Blue LED Config + # id: select_bled + # optimistic: true + # entity_category: config + # options: + # - Power Status + # - No Automation + # - Invert Power Status + # - Error Status + # - Error and Power + # - Error and Invert Power + # initial_option: Power Status + # restore_value: true + # icon: mdi:led-on + # forced_hash: 3104663617 + # forced_addr: 36 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # on_value: + # - if: + # condition: + # - lambda: return ( x == "Error Status" ); + # then: + # - light.turn_off: blue_led + # - script.execute: script_set_power_leds + + # REMOVED OPTION: Red LED Config + # - platform: template + # name: $friendly_name Red LED Config + # id: select_rled + # optimistic: true + # entity_category: config + # options: + # - Power Status + # - No Automation + # - Invert Power Status + # - Error Status + # - Error and Power + # - Error and Invert Power + # initial_option: Error Status + # restore_value: true + # icon: mdi:led-on + # forced_hash: 261191305 + # forced_addr: 38 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # on_value: + # - if: + # condition: + # - lambda: return ( x == "Error Status" ); + # then: + # - light.turn_off: red_led + # - script.execute: script_set_power_leds + + + # REMOVED OPTION: Legacy Monitor Mode + # legacy select monitor mode configuration; remove December 1, 2023 + # removed name, so won't show up in UI. This is kept so that previous + # setting can be migrated to new select entities. + # new entity is saved at same address with incremented hash so once the new + # one is saved, this one won't be loaded next time. + # - platform: template + # id: select_monitor_mode_old + # optimistic: true + # options: + # - "10s P / 20s V,I" + # - "10s P,I Only" + # - "10s P,V Only" + # - " 2s P,I Only" + # - " 2s P,V Only" + # - "YAML Configured" + # - " 2s P / 4s V,I" + # - "Didn't Restore" + # initial_option: "Didn't Restore" + # restore_value: true + # icon: mdi:wrench-clock + # entity_category: config + # disabled_by_default: $disable_entities + # forced_hash: 1025003090 + # forced_addr: 0 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # - script.execute: script_setting_reboot + # on_value: + # - wait_until: # wait until new select entity is setup so it won't get overwritten with default value on setup + # lambda: return ( id(select_monitor_interval).has_state() ); + # - lambda: |- + # if ( x == "Didn't Restore" ) { + # id(select_monitor_mode_old).set_restore_value(false); // don't let old select save over new select + # ESP_LOGD("Kauf Config Migration", "No legacy monitor mode configuration to migrate."); + # } else { + # ESP_LOGD("Kauf Config Migration", "Found legacy monitor mode configuration, migrating to new format."); + + # // set monitor mode config select entity. 10s is default so just need to + # auto call_sel = id(select_monitor_interval).make_call(); + # if ( str_startswith(x,"10s") ) { call_sel.set_option("10s"); } + # else if ( str_startswith(x," 2s") ) { call_sel.set_option("2s"); } + # else { call_sel.set_option("YAML Configured"); } + # call_sel.perform(); + + # // go ahead and trigger a reboot on every config restoration + # id(script_save_changes).execute(); + # id(script_setting_reboot).execute(); + # } + + + # REMOVED OPTION: Power Monitoring Update Interval + # change update interval for power monitoring sensors + # - platform: template + # name: $friendly_name Monitoring Update Interval + # id: select_monitor_interval + # optimistic: true + # options: + # - 60s + # - 30s + # - 10s + # - 5s + # - 2s + # - YAML Configured ($sub_update_interval) + # initial_option: $sub_pm_initial_option + # restore_value: true + # icon: mdi:wrench-clock + # entity_category: config + # disabled_by_default: $disable_entities + # forced_hash: 1025003091 + # forced_addr: 0 + # global_addr: global_forced_addr + # set_action: + # - script.execute: script_save_changes + # - script.execute: script_setting_reboot + # on_value: + # - lambda: |- + # if ( x == "60s" ) { id(hlw_main).set_update_interval(60000); } + # else if ( x == "30s" ) { id(hlw_main).set_update_interval(30000); } + # else if ( x == "10s" ) { id(hlw_main).set_update_interval(10000); } + # else if ( x == "5s" ) { id(hlw_main).set_update_interval(5000); } + # else if ( x == "2s" ) { id(hlw_main).set_update_interval(2000); } + + + # REMOVED OPTION: Boot State Select + # - platform: template + # name: $friendly_name Boot State + # id: select_boot_state + # optimistic: true + # options: + # - "Restore Power Off State" + # - "Invert Power Off State" + # - "Always On" + # - "Always Off" + # - "YAML Configured ($sub_restore_mode)" + # initial_option: "Restore Power Off State" + # restore_value: true + # icon: mdi:restart-alert + # entity_category: config + # forced_hash: 2390278151 + # forced_addr: 74 + # global_addr: global_forced_addr + # on_value: + # - lambda: |- + # if ( x == "Restore Power Off State") + # relay->set_restore_mode(SWITCH_RESTORE_DEFAULT_OFF); + # else if ( x == "Invert Power Off State") + # relay->set_restore_mode(SWITCH_RESTORE_INVERTED_DEFAULT_OFF); + # else if ( x == "Always On") + # relay->set_restore_mode(SWITCH_ALWAYS_ON); + # else if ( x == "Always Off") + # relay->set_restore_mode(SWITCH_ALWAYS_OFF); + # else + # relay->set_restore_mode(SWITCH_$sub_restore_mode); + + # // republish state so it gets saved if necessary + # // but make sure relay already set up, don't want to publish here on boot + # if ( id(relay).is_setup() ) id(relay).publish_state(id(relay).state, true); + + # - script.execute: script_save_changes + + +# REMOVED OPTION: IP Address Sensor +# Send IP Address to HA +# https://esphome.io/components/text_sensor/wifi_info.html +# text_sensor: +# - platform: wifi_info +# ip_address: +# name: $friendly_name IP Address +# disabled_by_default: $disable_entities + + +# REMOVED OPTION: Using Stock Status LED +# emulate status_led +# https://esphome.io/guides/automations.html#interval-component +# interval: +# - interval: 5s +# then: +# - lambda: |- +# if ( ( ((App.get_app_state() & STATUS_LED_ERROR ) != 0u) || +# ((App.get_app_state() & STATUS_LED_WARNING) != 0u) ) +# && !id(blink_status_led).is_running() ) +# id(blink_status_led).execute(); + + +# Current reserved flash memory: +# 00-01: Power Monitoring Mode +# 02-03: Relay output +# 04-05: Use Threshold +# 06-07: Total Daily Energy +# 08-33: Wi-Fi Credentials +# 34-35: Button Config select entity +# 36-37: Blue LED select entity +# 38-39: Red LED select entity +# 40-41: Debounce number entity +# 42-43: No HASS switch +# 44-55: Blue LED light entity +# 56-57: Scale Power +# 58-59: Scale Current +# 60-61: Scale Voltage +# 62-73: Red LED light entity +# 74-75: Boot State select entity |