56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
#include "wled.h"
|
|
/*
|
|
* This v1 usermod file allows you to add own functionality to WLED more easily
|
|
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
|
* EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in const.h)
|
|
* If you just need 8 bytes, use 2551-2559 (you do not need to increase EEPSIZE)
|
|
*
|
|
* Consider the v2 usermod API if you need a more advanced feature set!
|
|
*/
|
|
|
|
//Use userVar0 and userVar1 (API calls &U0=,&U1=, uint16_t)
|
|
|
|
// PIR sensor pin
|
|
const int MOTION_PIN = 16;
|
|
// MQTT topic for sensor values
|
|
const char MQTT_TOPIC[] = "/motion";
|
|
|
|
int prevState = LOW;
|
|
|
|
//gets called once at boot. Do all initialization that doesn't depend on network here
|
|
void userSetup()
|
|
{
|
|
pinMode(MOTION_PIN, INPUT);
|
|
}
|
|
|
|
//gets called every time WiFi is (re-)connected. Initialize own network interfaces here
|
|
void userConnected()
|
|
{
|
|
|
|
}
|
|
|
|
void publishMqtt(String state)
|
|
{
|
|
//Check if MQTT Connected, otherwise it will crash the 8266
|
|
if (mqtt != nullptr){
|
|
char subuf[38];
|
|
strcpy(subuf, mqttDeviceTopic);
|
|
strcat(subuf, MQTT_TOPIC);
|
|
mqtt->publish(subuf, 0, true, state.c_str());
|
|
}
|
|
}
|
|
|
|
//loop. You can use "if (WLED_CONNECTED)" to check for successful connection
|
|
void userLoop()
|
|
{
|
|
if (digitalRead(MOTION_PIN) == HIGH && prevState == LOW) { // Motion detected
|
|
publishMqtt("ON");
|
|
prevState = HIGH;
|
|
}
|
|
if (digitalRead(MOTION_PIN) == LOW && prevState == HIGH) { // Motion stopped
|
|
publishMqtt("OFF");
|
|
prevState = LOW;
|
|
}
|
|
}
|
|
|