This is the source-code for the LightYSwitch (LYS).
The key-feature is a simple design and a sensor-response to get the real switch-state.
Take a look at the hardware-chapter and the functions-chapter.
Install the WeMos D1-Mini library for your Arduino-Workspace.
[I hope this one is the correct tutorial: https://wiki.wemos.cc/tutorials:get_started:get_started_in_arduino]
To adapt it, change the Pin-definitions and most important the "ssid" and "password" for your WiFi-Network.
If you don't like to change the code:
A button should be connected between GND and Pin 14 (switchPin).
A reed-contact or any other detection-switch schould be connectet between GND and Pin 5 (detectPin).
The servo-motor should be connected to a PWM-compatible Pin. I'd choose Pin 4 (servoPin).
There is already an LED on the WeMos-Board. Therefore we don't have to connect anything. Pin 2 (ledPin).
- Move the servo to it off-position (only if on before): http://IP_ADRESS/0
- Move the servo to it on-position (only if off before): http://IP_ADRESS/1
- Get the switch-state: http://IP_ADRESS/stat
- Check if the button was pressed before: http://IP_ADRESS/button
- Reset the button-state: http://IP_ADRESS/b_reset
- The servo moves to a center-position after each movement.
- The servo is software-detached after each action to minimize noisy sounds.
The system is currently based on a server, which is polling the LYS based on a cronjob.
To trigger a event on the server with the button (in my case disabling all lights) I should use a service between LYS and the server to make it realtime capable.
If there is someone who like to do it, feel free to make a pull-request.
The code could be cleaned up, because there are many double codelines.