WLED/usermods/Animated_Staircase/Animated_Staircase.h

450 lines
15 KiB
C
Raw Normal View History

Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
/*
* Usermod for detecting people entering/leaving a staircase and switching the
* staircase on/off.
*
* Edit the Animated_Staircase_config.h file to compile this usermod for your
* specific configuration.
*
* See the accompanying README.md file for more info.
*/
#pragma once
#include "wled.h"
#include "Animated_Staircase_config.h"
#define USERMOD_ID_ANIMATED_STAIRCASE 1011
class Animated_Staircase : public Usermod {
private:
/* configuration (available in API and stored in flash) */
bool enabled = false; // Enable this usermod
unsigned long segment_delay_ms = 150; // Time between switching each segment
unsigned long on_time_ms = 5 * 1000; // The time for the light to stay on
int8_t topPIRorTriggerPin = -1; // disabled
int8_t bottomPIRorTriggerPin = -1; // disabled
int8_t topEchoPin = -1; // disabled
int8_t bottomEchoPin = -1; // disabled
bool useUSSensorTop = false; // using PIR or UltraSound sensor?
bool useUSSensorBottom = false; // using PIR or UltraSound sensor?
unsigned int topMaxTimeUs = 1749; // default echo timout, top
unsigned int bottomMaxTimeUs = 1749; // default echo timout, bottom
/* runtime variables */
bool initDone = false;
// Time between checking of the sensors
const int scanDelay = 50;
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
// Lights on or off.
// Flipping this will start a transition.
bool on = false;
// Swipe direction for current transition
#define SWIPE_UP true
#define SWIPE_DOWN false
bool swipe = SWIPE_UP;
// Indicates which Sensor was seen last (to determine
// the direction when swiping off)
#define LOWER false
#define UPPER true
bool lastSensor = LOWER;
// Time of the last transition action
unsigned long lastTime = 0;
// Time of the last sensor check
unsigned long lastScanTime = 0;
// Last time the lights were switched on or off
unsigned long lastSwitchTime = 0;
// segment id between onIndex and offIndex are on.
// controll the swipe by setting/moving these indices around.
// onIndex must be less than or equal to offIndex
byte onIndex = 0;
byte offIndex = 0;
// The maximum number of configured segments.
// Dynamically updated based on user configuration.
byte maxSegmentId = 1;
byte mainSegmentId = 0;
// These values are used by the API to read the
// last sensor state, or trigger a sensor
// through the API
bool topSensorRead = false;
bool topSensorWrite = false;
bool bottomSensorRead = false;
bool bottomSensorWrite = false;
void updateSegments() {
// mainSegmentId = strip.getMainSegmentId();
// WS2812FX::Segment mainsegment = strip.getSegment(mainSegmentId);
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
WS2812FX::Segment* segments = strip.getSegments();
for (int i = 0; i < MAX_NUM_SEGMENTS; i++, segments++) {
if (!segments->isActive()) {
maxSegmentId = i - 1;
break;
}
if (i >= onIndex && i < offIndex) {
segments->setOption(SEG_OPTION_ON, 1, 1);
// We may need to copy mode and colors from segment 0 to make sure
// changes are propagated even when the config is changed during a wipe
// segments->mode = mainsegment.mode;
// segments->colors[0] = mainsegment.colors[0];
} else {
segments->setOption(SEG_OPTION_ON, 0, 1);
}
// Always mark segments as "transitional", we are animating the staircase
segments->setOption(SEG_OPTION_TRANSITIONAL, 1, 1);
}
colorUpdated(NOTIFIER_CALL_MODE_DIRECT_CHANGE);
}
/*
* Detects if an object is within ultrasound range.
* signalPin: The pin where the pulse is sent
* echoPin: The pin where the echo is received
* maxTimeUs: Detection timeout in microseconds. If an echo is
* received within this time, an object is detected
* and the function will return true.
*
* The speed of sound is 343 meters per second at 20 degress Celcius.
* Since the sound has to travel back and forth, the detection
* distance for the sensor in cm is (0.0343 * maxTimeUs) / 2.
*
* For practical reasons, here are some useful distances:
*
* Distance = maxtime
* 5 cm = 292 uS
* 10 cm = 583 uS
* 20 cm = 1166 uS
* 30 cm = 1749 uS
* 50 cm = 2915 uS
* 100 cm = 5831 uS
*/
bool ultrasoundRead(uint8_t signalPin,
uint8_t echoPin,
unsigned int maxTimeUs) {
digitalWrite(signalPin, HIGH);
delayMicroseconds(10);
digitalWrite(signalPin, LOW);
return pulseIn(echoPin, HIGH, maxTimeUs) > 0;
}
void checkSensors() {
if ((millis() - lastScanTime) > scanDelay) {
lastScanTime = millis();
if (!useUSSensorBottom)
bottomSensorRead = bottomSensorWrite || (digitalRead(bottomPIRorTriggerPin) == HIGH);
else
bottomSensorRead = bottomSensorWrite || ultrasoundRead(bottomPIRorTriggerPin, bottomEchoPin, bottomMaxTimeUs);
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
if (!useUSSensorTop)
topSensorRead = topSensorWrite || (digitalRead(topPIRorTriggerPin) == HIGH);
else
topSensorRead = topSensorWrite || ultrasoundRead(topPIRorTriggerPin, topEchoPin, topMaxTimeUs);
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
// Values read, reset the flags for next API call
topSensorWrite = false;
bottomSensorWrite = false;
if (topSensorRead != bottomSensorRead) {
lastSwitchTime = millis();
if (on) {
lastSensor = topSensorRead;
} else {
// If the bottom sensor triggered, we need to swipe up, ON
swipe = bottomSensorRead;
if (swipe) {
DEBUG_PRINTLN(F("ON -> Swipe up."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
} else {
DEBUG_PRINTLN(F("ON -> Swipe down."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
if (onIndex == offIndex) {
// Position the indices for a correct on-swipe
if (swipe == SWIPE_UP) {
onIndex = mainSegmentId;
} else {
onIndex = maxSegmentId+1;
}
offIndex = onIndex;
}
on = true;
}
}
}
}
void autoPowerOff() {
if (on && ((millis() - lastSwitchTime) > on_time_ms)) {
// Swipe OFF in the direction of the last sensor detection
swipe = lastSensor;
on = false;
if (swipe) {
DEBUG_PRINTLN(F("OFF -> Swipe up."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
} else {
DEBUG_PRINTLN(F("OFF -> Swipe down."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
}
}
void updateSwipe() {
if ((millis() - lastTime) > segment_delay_ms) {
lastTime = millis();
// byte oldOnIndex = onIndex;
// byte oldOffIndex = offIndex;
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
if (on) {
// Turn on all segments
onIndex = MAX(mainSegmentId, onIndex - 1);
offIndex = MIN(maxSegmentId + 1, offIndex + 1);
} else {
if (swipe == SWIPE_UP) {
onIndex = MIN(offIndex, onIndex + 1);
} else {
offIndex = MAX(onIndex, offIndex - 1);
}
}
updateSegments();
}
}
void writeSensorsToJson(JsonObject& root) {
JsonObject staircase = root[F("staircase")];
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
if (staircase.isNull()) {
staircase = root.createNestedObject(F("staircase"));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
staircase[F("top-sensor")] = topSensorRead;
staircase[F("bottom-sensor")] = bottomSensorRead;
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
void readSensorsFromJson(JsonObject& root) {
JsonObject staircase = root[F("staircase")];
bottomSensorWrite = bottomSensorRead || (staircase[F("bottom-sensor")].as<bool>());
topSensorWrite = topSensorRead || (staircase[F("top-sensor")].as<bool>());
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
void enable(bool enable) {
if (enable) {
DEBUG_PRINTLN(F("Animated Staircase enabled."));
DEBUG_PRINT(F("Delay between steps: "));
DEBUG_PRINT(segment_delay_ms);
DEBUG_PRINT(F(" milliseconds.\nStairs switch off after: "));
DEBUG_PRINT(on_time_ms / 1000);
DEBUG_PRINTLN(F(" seconds."));
if (!useUSSensorBottom)
pinMode(bottomPIRorTriggerPin, INPUT);
else {
pinMode(bottomPIRorTriggerPin, OUTPUT);
pinMode(bottomEchoPin, INPUT);
}
if (!useUSSensorTop)
pinMode(topPIRorTriggerPin, INPUT);
else {
pinMode(topPIRorTriggerPin, OUTPUT);
pinMode(topEchoPin, INPUT);
}
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
} else {
// Restore segment options
// WS2812FX::Segment mainsegment = strip.getSegment(mainSegmentId);
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
WS2812FX::Segment* segments = strip.getSegments();
for (int i = 0; i < MAX_NUM_SEGMENTS; i++, segments++) {
if (!segments->isActive()) {
maxSegmentId = i - 1;
break;
}
segments->setOption(SEG_OPTION_ON, 1, 1);
}
colorUpdated(NOTIFIER_CALL_MODE_DIRECT_CHANGE);
DEBUG_PRINTLN(F("Animated Staircase disabled."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
enabled = enable;
}
public:
void setup() {
// allocate pins
if (topPIRorTriggerPin >= 0) {
if (!pinManager.allocatePin(topPIRorTriggerPin,useUSSensorTop))
topPIRorTriggerPin = -1;
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
if (topEchoPin >= 0) {
if (!pinManager.allocatePin(topEchoPin,false))
topEchoPin = -1;
}
if (bottomPIRorTriggerPin >= 0) {
if (!pinManager.allocatePin(bottomPIRorTriggerPin,useUSSensorBottom))
bottomPIRorTriggerPin = -1;
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
if (bottomEchoPin >= 0) {
if (!pinManager.allocatePin(bottomPIRorTriggerPin,false))
bottomEchoPin = -1;
}
// validate pins
if ( topPIRorTriggerPin < 0 || bottomPIRorTriggerPin < 0 ||
(useUSSensorTop && topEchoPin < 0) || (useUSSensorBottom && bottomEchoPin < 0) )
enabled = false;
enable(enabled);
initDone = true;
}
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
void loop() {
if (!enabled) return;
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
checkSensors();
autoPowerOff();
updateSwipe();
}
uint16_t getId() { return USERMOD_ID_ANIMATED_STAIRCASE; }
void addToJsonState(JsonObject& root) {
// writeSettingsToJson(root);
// writeSensorsToJson(root);
// DEBUG_PRINTLN(F("Staircase config exposed in API."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
/*
* Reads configuration settings from the json API.
* See void addToJsonState(JsonObject& root)
*/
void readFromJsonState(JsonObject& root) {
if (!initDone) return; // prevent crash on boot applyPreset()
JsonObject staircase = root[F("staircase")];
if (!staircase.isNull()) {
if (staircase[F("enabled")].is<bool>()) {
enabled = staircase[F("enabled")].as<bool>();
} else {
String str = staircase[F("enabled")]; // checkbox -> off or on
enabled = (bool)(str!="off"); // off is guaranteed to be present
}
}
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
/*
* Writes the configuration to internal flash memory.
*/
void addToConfig(JsonObject& root) {
JsonObject staircase = root[F("staircase")];
if (staircase.isNull()) {
staircase = root.createNestedObject(F("staircase"));
}
staircase[F("enabled")] = enabled;
staircase[F("segment-delay-ms")] = segment_delay_ms;
staircase[F("on-time-s")] = on_time_ms / 1000;
staircase[F("useTopUltrasoundSensor")] = useUSSensorTop;
staircase[F("topPIRorTrigger_pin")] = topPIRorTriggerPin;
staircase[F("topEcho_pin")] = topEchoPin;
staircase[F("useBottomUltrasoundSensor")] = useUSSensorBottom;
staircase[F("bottomPIRorTrigger_pin")] = bottomPIRorTriggerPin;
staircase[F("bottomEcho_pin")] = bottomEchoPin;
staircase[F("top-echo-us")] = topMaxTimeUs;
staircase[F("bottom-echo-us")] = bottomMaxTimeUs;
DEBUG_PRINTLN(F("Staircase config saved."));
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
/*
* Reads the configuration to internal flash memory before setup() is called.
*/
void readFromConfig(JsonObject& root) {
bool oldUseUSSensorTop = useUSSensorTop;
bool oldUseUSSensorBottom = useUSSensorBottom;
int8_t oldTopAPin = topPIRorTriggerPin;
int8_t oldTopBPin = topEchoPin;
int8_t oldBottomAPin = bottomPIRorTriggerPin;
int8_t oldBottomBPin = bottomEchoPin;
JsonObject staircase = root[F("staircase")];
if (!staircase.isNull()) {
if (staircase[F("enabled")].is<bool>()) {
enabled = staircase[F("enabled")].as<bool>();
} else {
String str = staircase[F("enabled")]; // checkbox -> off or on
enabled = (bool)(str!="off"); // off is guaranteed to be present
}
segment_delay_ms = staircase[F("segment-delay-ms")];
on_time_ms = (int)staircase[F("on-time-s")] * 1000;
if (staircase[F("useTopUltrasoundSensor")].is<bool>()) {
useUSSensorTop = staircase[F("useTopUltrasoundSensor")].as<bool>();
} else {
String str = staircase[F("useTopUltrasoundSensor")]; // checkbox -> off or on
useUSSensorTop = (bool)(str!="off"); // off is guaranteed to be present
}
topPIRorTriggerPin = staircase[F("topPIRorTrigger_pin")];
topEchoPin = staircase[F("topEcho_pin")];
useUSSensorBottom = staircase[F("useBottomUltrasoundSensor")].as<bool>();
if (staircase[F("useBottomUltrasoundSensor")].is<bool>()) {
useUSSensorBottom = staircase[F("useBottomUltrasoundSensor")].as<bool>();
} else {
String str = staircase[F("useBottomUltrasoundSensor")]; // checkbox -> off or on
useUSSensorBottom = (bool)(str!="off"); // off is guaranteed to be present
}
bottomPIRorTriggerPin = staircase[F("bottomPIRorTrigger_pin")];
bottomEchoPin = staircase[F("bottomEcho_pin")];
topMaxTimeUs = staircase[F("top-echo-us")];
bottomMaxTimeUs = staircase[F("bottom-echo-us")];
DEBUG_PRINTLN(F("Staircase config (re)loaded."));
} else {
DEBUG_PRINTLN(F("No config found. (Using defaults.)"));
}
if (!initDone) {
// first run: reading from cfg.json
} else {
// changing paramters from settings page
bool changed = false;
if ((oldUseUSSensorTop != useUSSensorTop) ||
(oldUseUSSensorBottom != useUSSensorBottom) ||
(oldTopAPin != topPIRorTriggerPin) ||
(oldTopBPin != topEchoPin) ||
(oldBottomAPin != bottomPIRorTriggerPin) ||
(oldBottomBPin != bottomEchoPin)) {
changed = true;
pinManager.deallocatePin(oldTopAPin);
pinManager.deallocatePin(oldTopBPin);
pinManager.deallocatePin(oldBottomAPin);
pinManager.deallocatePin(oldBottomBPin);
}
if (changed) setup();
}
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
}
/*
* Shows the delay between steps and power-off time in the "info"
* tab of the web-UI.
*/
void addToJsonInfo(JsonObject& root) {
JsonObject staircase = root["u"];
if (staircase.isNull()) {
staircase = root.createNestedObject("u");
}
if (enabled) {
JsonArray usermodEnabled = staircase.createNestedArray(F("Staircase enabled")); // name
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
usermodEnabled.add("yes"); // value
JsonArray segmentDelay = staircase.createNestedArray(F("Delay between stairs")); // name
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
segmentDelay.add(segment_delay_ms); // value
segmentDelay.add("ms"); // unit
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
JsonArray onTime = staircase.createNestedArray(F("Power-off stairs after")); // name
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
onTime.add(on_time_ms / 1000); // value
onTime.add("s"); // unit
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
} else {
JsonArray usermodEnabled = staircase.createNestedArray(F("Staircase enabled")); // name
Animated Staircase Usermod (#1763) * Initial version of the PIR Staircase wipe up/down. * Add pulldown reminder * Workaround for missing D6 and D7 definitions on esp32dev * Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino) * These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed. * Changed to not collide with led strip pins * PIR on GPIO 15 and 16 on esp32 d1 mini * Removed PIN number ifdefs, it is impossible to match all boards * Settings in flash, info and API * Update README.md * Small doc changes * Improved README * Fixed error in reading configuration * Add API documentation * Documentation and code cleanup * Add enable/disable to API settings * Restore segment state when disabling plugin * Add debounce * Set segments in animation mode * Set segments in animation mode * Add support for HR04 sensors * Add preliminary description for using an HR04 sensor * Fixed typenumber and linked to datasheet * Moved config away from defines to prevent user error * Trigger Sensors through API * Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac) * Bugfix for detection problems * Separated config from code * Renamed Signal to Trigger pin * Filename adjusted * Clarifications and additions to README * Fixed references to pio scripts * Fixed API trigger bug * Adjustments to README.md * More efficient use of flash cycles, better naming * Bugfix: bottom sensor was not read properly * Renamed to Animated_Staircase * Add note on ultrasonic sensor and esp32 * Better naming of defines * Bugfix: Swipe down started with two steps. * Removed upload port in nodemcuv2 section Co-authored-by: Rolf <rolf@phobos.local> Co-authored-by: Rolf <>
2021-02-25 09:52:48 +01:00
usermodEnabled.add("no"); // value
}
}
};