/NodeMCUButtonPusher

RESTful Button Pusher Utilising NodeMCU

Primary LanguageSmarty

Node MCU Button Pusher

Purpose

Sets up a REST interface on a Node MCU to control a servo motor. Used as a low-cost button pusher to smart up appliances and light switches. This project is based on a tutorial by Antonio Mancuso.

Setup

Create a file called wlan.config with the following contents:

SSID=your_ssid
PASS=your_password

Then run bake.sh to create the .ino file from the template and bake the values into the appropriate variables (this is mostly me freaking out about accidentally pushing my password to the repo...).

I use a bunch of inexpensive servo motors which can easily be fixated to most appliances using neodymium magnets (I do recommend using more than one magnet to avoid the servo pushing itself up instead of pushing the button).

The D4 pin is being used as data line.

Usage

The RESTful interface offers two endpoints:

GET /servo

Retrieves the current state of the servo. Not really used.

POST /servo

Causes the servo to perform a button push. A JSON payload is expected to specify angle (in degree) and duration (in milliseconds).

curl -d '{"angle":"50", "duration":"500"}' -H "Content-Type: application/json" -X POST http://MYNODEMCU/servo

Performs a 50 degree pushdown for 500 milliseconds before going back to neutral position.

Integrating into Home Assistant

I use this tool to heat up my coffee maker in the morning using a Home Assistant script. For that I use the following entry in my configuration.yaml to use it as a script:

rest_command:
  get_servo_state:
    url: "http://MYNODEMCU/servo"
    method: "get"
  push_servo_button:
    url: "http://MYNODEMCU/servo"
    method: "post"
    content_type: "application/json; charset=utf-8"
    payload: "{'angle': '{{ angle }}', 'duration': '{{ duration }}'}"