Advertisement
FALLINGAWAY38

stepper motor blind controller

Jun 9th, 2025
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 4.24 KB | None | 0 0
  1. esphome:
  2.   name: pergola
  3.   friendly_name: pergola
  4.  
  5. esp8266:
  6.   board: nodemcuv2
  7.  
  8. logger:
  9. ota:
  10.   platform: esphome
  11.    
  12.  
  13. api:
  14.   encryption:
  15.     key: "**********"
  16.   services:
  17.     - service: control_blind
  18.       variables:
  19.         target: int
  20.       then:
  21.         - stepper.set_target:
  22.             id: ${device_id}_stepper
  23.             target: !lambda 'return target;'
  24.         - sensor.template.publish:
  25.             id: ${device_id}_position
  26.             state: !lambda 'return target;'  
  27.  
  28. captive_portal:
  29. web_server:
  30.   port: 80
  31.   version: 3
  32.   auth:
  33.     password: "Password"
  34.     username: "Username"
  35.  
  36.  
  37. cover:
  38.   - platform: template
  39.     name: "${friendly_name}"
  40.     id: ${device_id}_cover_component
  41.     device_class: blind
  42.    
  43.     open_action:
  44.       - delay: .05s
  45.       - stepper.set_target:
  46.           id: ${device_id}_stepper
  47.           target: 1234  ## Change this number to total steps yours uses to fully Open from Closed
  48.       - sensor.template.publish:
  49.           id: ${device_id}_position
  50.           state: !lambda return id(${device_id}_stepper).target_position;
  51.       - delay: 60s
  52.  
  53.     close_action:
  54.       - delay: .05s
  55.       - stepper.set_target:
  56.           id: ${device_id}_stepper
  57.           target: 0
  58.       - delay: 60s
  59.       - sensor.template.publish:
  60.             id: ${device_id}_position
  61.             state: !lambda return id(${device_id}_stepper).target_position;
  62.    
  63.     stop_action:
  64.       - stepper.set_target:
  65.           id: ${device_id}_stepper
  66.           target: !lambda return id(${device_id}_stepper).current_position;
  67.       - sensor.template.publish:
  68.             id: ${device_id}_position
  69.             state: !lambda return id(${device_id}_stepper).current_position;
  70.     optimistic: true
  71.     assumed_state: true
  72.  
  73. sensor:
  74.   - platform: template
  75.     name: ${friendly_name} Position
  76.     id: ${device_id}_position
  77.  
  78.   - platform: wifi_signal
  79.     name: ${friendly_name} WiFi Signal
  80.     id: wifi_signal_db
  81.     update_interval: 60s
  82.     entity_category: "diagnostic"
  83.  
  84.   - platform: copy
  85.     source_id: wifi_signal_db
  86.     name: ${friendly_name} WiFi Signal Percent
  87.     filters:
  88.       - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
  89.     unit_of_measurement: "Signal %"
  90.     entity_category: "diagnostic"
  91.  
  92.   - platform: uptime
  93.     name: ${friendly_name} Uptime
  94.  
  95. text_sensor:
  96.   - platform: wifi_info
  97.     ip_address:
  98.       name: ${friendly_name} IP Address
  99.     ssid:
  100.       name: ${friendly_name} SSID
  101.     bssid:
  102.       name: ${friendly_name} BSSID
  103.     mac_address:
  104.       name: ${friendly_name} Mac Address
  105.  
  106. stepper:
  107.   - platform: a4988
  108.     id: my_stepper
  109.     step_pin: D2
  110.     dir_pin: D1
  111.     sleep_pin: D3
  112.     max_speed: 250 steps/s
  113.     acceleration: inf
  114.     deceleration: inf
  115.  
  116. binary_sensor:
  117.   - platform: status
  118.     name: ${friendly_name} Status
  119.  
  120.   - platform: gpio
  121.     pin:
  122.       number: D3   ## Change to GPIO you're using for OPEN button
  123.       inverted: TRUE
  124.       mode:
  125.         input: TRUE
  126.         pullup: TRUE
  127.     name: ${friendly_name} Open Button
  128.     filters:
  129.       - delayed_on: 10ms
  130.     on_multi_click:
  131. #SINGLE CLICK
  132.       - timing:
  133.          - ON for at most 0.5s
  134.           - OFF for at least 0.5s
  135.         then:
  136.           - delay: .05s
  137.           - stepper.set_target:
  138.               id: ${device_id}_stepper
  139.               target: 0
  140.           - delay: 60s
  141.           - sensor.template.publish:
  142.                 id: ${device_id}_position
  143.                 state: !lambda return id(${device_id}_stepper).target_position;
  144.  
  145.  
  146.   - platform: gpio
  147.     pin:
  148.       number: D4  ## Change to GPIO you're using for CLOSE button
  149.       inverted: TRUE
  150.       mode:
  151.         input: TRUE
  152.         pullup: TRUE
  153.     name: ${friendly_name} Close Button
  154.     filters:
  155.       - delayed_on: 10ms
  156.     on_multi_click:
  157. #SINGLE CLICK
  158.       - timing:
  159.          - ON for at most 0.5s
  160.           - OFF for at least 0.5s
  161.         then:
  162.           - delay: .05s
  163.           - stepper.set_target:
  164.               id: ${device_id}_stepper
  165.               target: 1234  ## Change this number to total steps yours uses to fully Open from Closed
  166.           - sensor.template.publish:
  167.               id: ${device_id}_position
  168.               state: !lambda return id(${device_id}_stepper).target_position;
Tags: esp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement