Setting Reminders
Posted: Sat Mar 14, 2015 9:39 am
Is there a tutorial for setting reminders? I would like to learn more about this.
Community discussion about Reef Angel Controllers and reefing related subjects
https://forum.reefangel.com/
Ok. Well, if there was a set schedule that you perform things then that could be done. Say for example, every month on the first, you always do your monthly maintenance, you could setup a WifiAlert to be sent out at say 5pm (after work) on that day (or whatever time you wanted) and it could just say "Monthly maintenance reminder".fishflipper wrote:I would like it for scheduled maintenance reminders, water changes and so on.
Sent from my SAMSUNG-SM-G900A using Tapatalk
Here's a rough outline that is started for you. I added some comments to the functions but they are pretty straight forward. You may have to tweak the WifiAlert function call....I'm just not 100% on the exact syntax of it, but I think I have it correct.fishflipper wrote:Yes, that is exactly what I want. I want it to send me a reminder for let's say every Monday and Thursday at 10pm to add my trace elements and every Wednesday at 8pm to do a water change. I would also like it to send a monthly reminder to change my filter pads.
Sent from my SAMSUNG-SM-G900A using Tapatalk
Code: Select all
void checkReminders()
{
// grab the current time and use it for processing the reminders
// do it this way to prevent rollover errors...just in case
time_t t = now();
remindTraceElements(t);
remindWaterChange(t);
remindMonthly(t);
}
void remindTraceElements(time_t t)
{
// Sunday = 1, Monday = 2, etc
if ((weekday(t) == 2) || (weekday(t) == 5)) {
// Every monday and thursday at 10pm
if ((hour(t) == 22) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Add+Trace+Elements");
}
}
}
void remindWaterChange(time_t t)
{
if (weekday() == 4) {
// Every wednesday at 8pm
if ((hour(t) == 20) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Water+Change+Time");
}
}
}
void remindMonthly(time_t t)
{
// Every 1st of the month at 8pm
if (day(t) == 1) {
if ((hour(t) == 20) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Change+filter+pads");
}
}
}
void sendReminder(char* msg)
{
static WifiAlert r;
// No delay, for immediate sending
r.SetDelay(0);
// No spaces are allowed in the msg
r.Send(msg);
}
makes sense.lnevo wrote:Awesome work Curt, but there's a major flaw in your code that's easily fixable. Do NOT set the delay to 0. Especially as you wrote the code only using seconds which could cause that function to be called quite a few times during that second. The default delay for the WiFiAlert is 15 minutes to prevent spamming yourself. I would just remove the delay and send the message and it will only get sent once. I guess delay is misleading but its delay between sends. It will always send the first time. The other problem is that since you have three different messages i would have 3 different WiFiAlerts declared and they are at the same time then you may want the delay 0 but then you'd have to track if you sent yourself with a static boolean. You could also Set the delay to one minute and offset each reminder. Sorry if Im throwing you off...
Yeah, I wasn't sure about how it works exactly. I didn't realize those possibilities. Thanks again for feedback.lnevo wrote:Plus you haven't used wifialert much so it's all good. I figured the chances were low but just wanted to point out the possibility
no. they will be sent through the portal not the app. you will also need the portal(...) line added to your code. then from the portal, you will enter your email address and you can get email messages with these alerts (some carriers have a special email address that sends you a txt message to your phone).fishflipper wrote:Thank you both for this!
Just so I'm clear, these alerts are going to alert me through the app? Right? Is there a way to do text messages?
Sent from my SAMSUNG-SM-G900A using Tapatalk
Code: Select all
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.SetTemperatureUnit( Celsius ); // set to Celsius Temperature
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port2Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port4Bit | Port5Bit | Port6Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
// Ports that are always on
ReefAngel.Relay.On( Port8 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.Relay.DelayedOn( Port1 );
ReefAngel.Relay.DelayedOn( Port2 );
ReefAngel.StandardHeater( Port3 );
ReefAngel.StandardHeater( Port4 );
ReefAngel.ActinicLights( Port5 );
ReefAngel.DayLights( Port6 );
ReefAngel.MoonLights( Port7 );
ReefAngel.PWM.SetDaylight( MoonPhase() );
ReefAngel.PWM.SetActinic( MoonPhase() );
ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = AntiSync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
////// Place your custom code below here
checkReminders();
////// Place your custom code above here
void checkReminders()
{
// grab the current time and use it for processing the reminders
// do it this way to prevent rollover errors...just in case
time_t t = now();
remindTraceElements(t);
remindWaterChange(t);
remindMonthly(t);
}
void remindTraceElements(time_t t)
{
// Sunday = 1, Monday = 2, etc
if ((weekday(t) == 2) || (weekday(t) == 5)) {
// Every monday and thursday at 10pm
if ((hour(t) == 22) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Add+Trace+Elements");
}
}
}
void remindWaterChange(time_t t)
{
if (weekday() == 4) {
// Every wednesday at 8pm
if ((hour(t) == 20) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Water+Change+Time");
}
}
}
void remindMonthly(time_t t)
{
// Every 1st of the month at 8pm
if (day(t) == 1) {
if ((hour(t) == 20) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Change+filter+pads");
}
}
}
void sendReminder(char* msg)
{
static WifiAlert r;
// No delay, for immediate sending
r.SetDelay(0);
// No spaces are allowed in the msg
r.Send(msg);
}
// This should always be the last line
ReefAngel.Portal( "GreenVF" );
ReefAngel.ShowInterface();
}
Your code cuts off the closing of the file. You placed all of the code inside the loop when only checkReminders(); needed to be in there. Here's what it should look like:GreenVF wrote:Hi Inevo
Thanks for your response.
I think my problem is where in my code to add "checkReminders(); in my main loop and also were to add the function.
My code is all from the wizard. except where I tried to add the reminders. I'm a total noob when it comes down to coding. I do have the wifi module , and reef angel plus.
and then the errors
sketch_aug03a.cpp: In function 'void loop()':
sketch_aug03a:86: error: 'checkReminders' was not declared in this scope
sketch_aug03a:91: error: a function-definition is not allowed here before '{' token
sketch_aug03a:101: error: a function-definition is not allowed here before '{' token
sketch_aug03a:145: error: expected `}' at end of input
Code: Select all
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.SetTemperatureUnit( Celsius ); // set to Celsius Temperature
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port2Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port4Bit | Port5Bit | Port6Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
// Ports that are always on
ReefAngel.Relay.On( Port8 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.Relay.DelayedOn( Port1 );
ReefAngel.Relay.DelayedOn( Port2 );
ReefAngel.StandardHeater( Port3 );
ReefAngel.StandardHeater( Port4 );
ReefAngel.ActinicLights( Port5 );
ReefAngel.DayLights( Port6 );
ReefAngel.MoonLights( Port7 );
ReefAngel.PWM.SetDaylight( MoonPhase() );
ReefAngel.PWM.SetActinic( MoonPhase() );
ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = AntiSync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
////// Place your custom code below here
checkReminders(); // functions are defined below
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "GreenVF" );
ReefAngel.ShowInterface();
}
// Reminder Code is listed below
void checkReminders()
{
// grab the current time and use it for processing the reminders
// do it this way to prevent rollover errors...just in case
time_t t = now();
remindTraceElements(t);
remindWaterChange(t);
remindMonthly(t);
}
void remindTraceElements(time_t t)
{
// Sunday = 1, Monday = 2, etc
if ((weekday(t) == 2) || (weekday(t) == 5)) {
// Every monday and thursday at 10pm
if ((hour(t) == 22) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Add+Trace+Elements");
}
}
}
void remindWaterChange(time_t t)
{
if (weekday() == 4) {
// Every wednesday at 8pm
if ((hour(t) == 20) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Water+Change+Time");
}
}
}
void remindMonthly(time_t t)
{
// Every 1st of the month at 8pm
if (day(t) == 1) {
if ((hour(t) == 20) && (minute(t) == 0) && (second(t) == 0)) {
// send reminder, No Spaces Allowed in message
sendReminder("Change+filter+pads");
}
}
}
void sendReminder(char* msg)
{
static WifiAlert r;
// No delay, for immediate sending
r.SetDelay(0);
// No spaces are allowed in the msg
r.Send(msg);
}