aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--kauf-plug-factory.yaml308
1 files changed, 308 insertions, 0 deletions
diff --git a/kauf-plug-factory.yaml b/kauf-plug-factory.yaml
new file mode 100644
index 0000000..09a03b7
--- /dev/null
+++ b/kauf-plug-factory.yaml
@@ -0,0 +1,308 @@
+substitutions:
+
+ # **** CHANGE FRIENDLY NAME TO SOMETHING UNIQUE PER DEVICE ****
+ friendly_name: Kauf Plug
+
+
+
+esphome:
+
+ # **** CHANGE DEVICE NAME TO SOMETHING UNIQUE PER DEVICE ****
+ name: kauf-plug # **** RENAME YAML FILE TO SAME NAME ****
+
+ platform: ESP8266
+ board: esp01_1m
+
+ esp8266_restore_from_flash: true
+
+ # remove next line if renaming to something unique above
+ name_add_mac_suffix: true
+
+
+ project:
+ name: "kauf.plf10"
+ version: "1.5a"
+
+
+
+
+ # checking if wifi has ever been configured. Cranking up ap timeout to a week if so.
+ on_boot:
+ then:
+ - if:
+ condition:
+ lambda: |-
+ return id(wifi_configured_before);
+ then:
+ - logger.log: "------------------->>>>>>>>>>>>>>>>> wifi configured before, ap timeout to 2500h"
+ - lambda: |-
+ wifi_wificomponent->set_ap_timeout(9000000000ULL);
+
+ else:
+ - logger.log: "------------------->>>>>>>>>>>>>>>>> wifi not configured before, leaving ap timeout as 25s"
+ - wait_until:
+ wifi.connected
+ - logger.log: "------------------->>>>>>>>>>>>>>>>> wifi connected, setting wifi_configured_before variable and cranking up ap timeout"
+ - globals.set:
+ id: wifi_configured_before
+ value: 'true'
+ - lambda: |-
+ wifi_wificomponent->set_ap_timeout(9000000000ULL);
+
+
+globals:
+ - id: wifi_configured_before
+ type: bool
+ restore_value: yes
+ initial_value: 'false'
+
+
+
+
+
+
+wifi:
+ ssid: initial_ap2
+ password: asdfasdfasdfasdf
+
+ # Uncomment below to set a static IP
+ # manual_ip:
+ # static_ip: !secret kauf_bulb_ip_address
+ # gateway: !secret wifi_gateway
+ # subnet: !secret wifi_subnet
+ # dns1: !secret wifi_dns1
+
+ # use_address allows wireless programming through dashboard. remove after programming.
+ # use_address: 192.168.1.3
+
+ # default is 20, 17 is recommended.
+ output_power: 17
+
+
+ ap:
+ ssid: ${friendly_name} Hotspot
+ ap_timeout: 25s
+
+
+captive_portal: # for fallback wifi hotspot
+
+logger: # Enable logging
+# baud_rate: 0 # Disable UART logging since TX pad not easily available
+
+api: # Enable Home Assistant API
+ # password: !secret api_password # optional password field for Home Assistant API.
+
+ota:
+ # password: !secret ota_password # optional password for OTA updates.
+
+
+debug: # outputs additional debug info when logs start
+
+
+
+web_server: # web server allows access to device with a web browser
+ # auth: # optional login details for web interface
+ # username: admin
+ # password: !secret web_server_password
+
+
+
+
+# red led, blink when not connected to wifi or Home Assistant
+status_led:
+ pin:
+ number: GPIO0
+ inverted: true
+
+
+
+
+
+binary_sensor:
+
+ # button input toggles relay and thereby blue led
+ - platform: gpio
+ id: button
+ pin:
+ number: GPIO13
+ mode: INPUT_PULLUP
+ inverted: true
+
+ on_click:
+
+ - min_length: 35ms
+ max_length: 2s
+ then:
+ - switch.toggle: relay
+
+ # if button is held >5s, restart AP.
+ - min_length: 5s
+ max_length: 30s
+ then:
+ - logger.log: "------------------->>>>>>>>>>>>>>>>> HELD BUTTON 5 SECONDS, CLEARING VARIABLE AND STARTING AP"
+ - globals.set:
+ id: wifi_configured_before
+ value: 'false'
+ - lambda: |-
+ wifi_wificomponent->set_ap_timeout(10000);
+ - script.execute: blink_led
+ - wait_until:
+ wifi.connected
+ - logger.log: "------------------->>>>>>>>>>>>>>>>> wifi connected, setting wifi_configured_before variable and cranking up ap timeout"
+ - globals.set:
+ id: wifi_configured_before
+ value: 'true'
+ - lambda: |-
+ wifi_wificomponent->set_ap_timeout(9000000000ULL);
+ - while:
+ condition:
+ script.is_running: blink_led
+ then:
+ script.stop: blink_led
+ # still need to set blue led to relay state
+ - if:
+ condition:
+ lambda: 'return id(relay).state;'
+ then:
+ - switch.turn_on: blue_led
+ else:
+ - switch.turn_off: blue_led
+
+
+
+
+ - platform: template
+ id: in_use
+ name: ${friendly_name} Device In Use
+
+
+
+
+script:
+ - id: blink_led
+ mode: queued
+ then:
+ - switch.toggle: blue_led
+ - delay: 250ms
+ - script.execute: blink_led
+
+
+
+
+
+
+switch:
+
+ # blue LED follows relay power state
+ - platform: gpio
+ id: blue_led
+ pin:
+ number: GPIO2
+ inverted: true
+
+ # relay output
+ - platform: gpio
+ id: relay
+ name: $friendly_name
+ pin: GPIO4
+
+ # automatically make blue led equal relay state
+ on_turn_on:
+ - switch.turn_on: blue_led
+ on_turn_off:
+ - switch.turn_off: blue_led
+
+
+
+# clock input from Home Assistant used for total daily energy
+time:
+ - platform: homeassistant
+ id: homeassistant_time
+
+
+
+sensor: # Power monitoring sensors output to Home Assistant
+ - platform: hlw8012
+ sel_pin:
+ number: GPIO12
+ inverted: True
+ cf_pin: GPIO5
+ cf1_pin: GPIO14
+ current_resistor: 0.001 # The value of the shunt resistor for current measurement.
+ voltage_divider: 2401 # The value of the voltage divider on the board as (R_upstream + R_downstream) / R_downstream.
+ power:
+ name: ${friendly_name} Power
+ unit_of_measurement: W
+ id: wattage
+ filters:
+ - calibrate_linear:
+ - 0.0 -> 0.0
+ - 333.8 -> 60 # value with 60W bulb.
+ on_value: # set or clear in_use template binary sensor depending on whether power usage is over threshold
+ - if:
+ condition:
+ lambda: 'return (x >= id(threshold).state);'
+ then:
+ - binary_sensor.template.publish:
+ id: in_use
+ state: ON
+ else:
+ - binary_sensor.template.publish:
+ id: in_use
+ state: OFF
+ current:
+ name: ${friendly_name} Current
+ unit_of_measurement: A
+ filters:
+ - calibrate_linear:
+ - 0.0 -> 0.0
+ - 0.6 -> 0.515 # value with 60W bulb.
+ voltage:
+ name: ${friendly_name} Voltage
+ unit_of_measurement: V
+ filters:
+ - calibrate_linear:
+ - 0.0 -> 0.0
+ - 302.1 -> 117.1 # Tested using a meter
+ change_mode_every: 1
+ update_interval: 10s # 20 second effective update rate for Power, 40 second for Current and Voltage.
+
+# Reports the total Power so-far each day, resets at midnight, see 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
+
+
+number:
+ - platform: template
+ name: ${friendly_name} Use Threshold
+ min_value: 1
+ max_value: 100
+ step: 1
+ initial_value: 2
+ id: threshold
+ optimistic: true # required for changing value from home assistant
+ restore_value: true
+ on_value:
+ - if: # set or clear in_use template binary sensor depending on whether power usage is above threshold
+ condition:
+ lambda: 'return (id(wattage).state >= x);'
+ then:
+ - binary_sensor.template.publish:
+ id: in_use
+ state: ON
+ else:
+ - binary_sensor.template.publish:
+ id: in_use
+ state: OFF
+
+
+
+# Send IP Address to HA
+text_sensor:
+ - platform: wifi_info
+ ip_address:
+ name: $friendly_name IP Address \ No newline at end of file