I can't find the WifiSendAlert() function in the libraries.

Requests for new functions or software apps
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Mon Jun 03, 2013 5:23 pm
mudcat1 wrote:
lnevo wrote:Ok a few strange things i noticed.

One is you have all that code in setup() and not in loop()...not sure why that would make a difference, but something worth correcting, I had a block of code in setup and it was behaving completely different than what I'd expect.

Second you have your wifi alarm variables as globals and static which might cause it to behave strangely. Try taking off the static or leaving it but putting it inside setup or eventually to loop.


Lee,
I tried to make my code similar to yours, however, I was not sure how to use the #include statement as you did so I copied the wifialert() code immediately following the include statements. I added the static declaration because I saw it in your ino but I will remove it shortly.


The main thing I'm concerned about is your custom code should all be inside loop() not inside setup() which is what you showed. But the static thing is easy to fix.

Posts: 133
Joined: Sun Dec 09, 2012 7:23 pm
PostPosted: Mon Jun 03, 2013 5:41 pm
Sorry Lee, i didn't read your post closely enough. I do have my custom code in the void loop() section, I just forgot to copy it in the snippet section that I provided.

Code: Select all
    // ************ PLACE GLOBAL VARIABLE CODE BELOW HERE *******************

    class WiFiAlert
    {
    public:
      WiFiAlert();
      void Send(char *message, char *key);
      inline void Send(char *message) { Send(message,""); }
      inline void SetDelay(int delay) { AlertDelay=delay; }
    private:
      int AlertDelay;
      time_t LastAlert;
      boolean IsAlert();
      void WiFiSendAlert(char *message, char *key);
    };

    WiFiAlert::WiFiAlert()
    {
      AlertDelay=900;
      LastAlert=0;
    }

    boolean WiFiAlert::IsAlert()
    {
      if (now()-LastAlert >= AlertDelay)
      {
        return true;
      }
      return false;
    }

    void WiFiAlert::Send(char *message, char *key)
    {
      if (IsAlert())
      {
        LastAlert=now();
        WiFiSendAlert(message, key);
      }
    }

    void WiFiAlert::WiFiSendAlert(char *message, char *key)
    {
      Serial.print("GET /status/wifialert.aspx?id=");
      Serial.print(ReefAngel.portalusername);
      Serial.print("&key=");
      Serial.print(key);
      Serial.print("&msg=");
      Serial.println(message);
      Serial.println("\n\n");
    }

    // Initialize Buzzer variables
    byte buzzer=0;
    byte overheatflag=0;
    byte atoflag=0;

    // Declare variables for Wifi Alert
    WiFiAlert sumpOverflowAlarm, tempAlarm;
    WiFiAlert atoEmptyAlarm;

    void setup()
   
    void loop()
   {
     
    // Added buzzer 1-19-13   
    // Sound buzzer if any flag is set.
    // Added 1-19-13 - Uncomment when I purchase the IO expansion module.
    //   buzzer = overheatflag + atoflag + iochannel0flag + iochannel1flag + iochannel2flag + iochannel3flag + iochannel4flag + iochannel5flag;
       buzzer = overheatflag + atoflag;
       if ( buzzer >= 1 ){
         buzzer = InternalMemory.read(buzzer_volume); // Set value of buzzer volume.
    } else {
         ReefAngel.PWM.SetDaylight(0);
       }
    //   Do not sound the buzzer for empty ATO reservior between 7:00 am and 10:00 pm.
       if (!ReefAngel.LowATO.IsActive() && ( hour() >= 7 && hour() < 22)) {
          ReefAngel.PWM.SetDaylight( buzzer );
          atoEmptyAlarm.SetDelay(3600); // delay SMS text alert for 1 hour.
          atoEmptyAlarm.Send("ATO_container_empty","xxxxxxxxxx");
    } else {   
          ReefAngel.PWM.SetDaylight(0);
          if (!ReefAngel.HighATO.IsActive()) {
            ReefAngel.PWM.SetDaylight( buzzer );
            sumpOverflowAlarm.SetDelay(300); // delay SMS alert for 5 minutes.
            sumpOverflowAlarm.Send("Sump_WaterLevel_too_high","xxxxxxxxxx");
        } else {
            ReefAngel.PWM.SetDaylight(0);
          }
       }   


Sorry for the confusion.
John

Posts: 133
Joined: Sun Dec 09, 2012 7:23 pm
PostPosted: Mon Jun 03, 2013 5:49 pm
Another thing that I noticed is that the time on the SMS text alert is incorrect. The text message that I receive says ...

"(Reef Angel - Alert) Reef Angel Controller AlertTime: 6/3/2013 5:46:46 PM IP Address: xxx.xxx.xxx.xxx ATO_container_empty"

The actual time is 7:46 PM. Is there a date setting that can be adjusted so that the time on the alert is correct?
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Mon Jun 03, 2013 6:07 pm
That doesn't even make sense. Unless the float switch is getting triggered for a blip not enough to trigger the buzzer.

Can you add a Serial.println(buzzer); before the atoAlarm.Send(); and monitor for a bit through Serial Monitor?

Posts: 11981
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Mon Jun 03, 2013 6:33 pm
mudcat1 wrote:Another thing that I noticed is that the time on the SMS text alert is incorrect. The text message that I receive says ...

"(Reef Angel - Alert) Reef Angel Controller AlertTime: 6/3/2013 5:46:46 PM IP Address: xxx.xxx.xxx.xxx ATO_container_empty"

The actual time is 7:46 PM. Is there a date setting that can be adjusted so that the time on the alert is correct?

That would have to be modified in the server to accept GMT offset.
Currently, it will use the server's local time.
Roberto.

Posts: 133
Joined: Sun Dec 09, 2012 7:23 pm
PostPosted: Tue Jun 04, 2013 4:06 pm
lnevo wrote:That doesn't even make sense. Unless the float switch is getting triggered for a blip not enough to trigger the buzzer.

Can you add a Serial.println(buzzer); before the atoAlarm.Send(); and monitor for a bit through Serial Monitor?


Lee,
I added the Serial.println(buzzer); before the atoAlarm.Send() and received the following output from Serial Monitor.
Code: Select all
GET /status/submitp.aspx?t1=793&t2=739&t3=0&ph=1045&id=mudcat1&em=0&rem=0&key=xxxxxxxxxx&atohigh=1&atolow=1&r=49&ron=0&roff=255&pwma=45&pwmd=0&c0=160&c1=160&c2=50&c3=0&c4=50&c5=15&c6=45&c7=45


0
GET /status/wifialert.aspx?id=mudcat1&key=xxxxxxxxxx&msg=ATO_container_empty



0
0


Eventually the ATO container was actually empty so that buzzer sounded but when I checked the Reef Angel it appeared to be locked up and the Reef Angel display was black, so I did not receive the Serial Monitor output for the actual alarm. I just cycled power to the Reef Angel and will run Serial Monitor a little longer.
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Tue Jun 04, 2013 4:18 pm
I think you are getting noise on your float switch that may not be causing your buzzer to go off...maybe for one millisecond..thats the only way those Serial.print would get triggered....unless some bracket is missing somewhere causing the code blocks to be messed up...
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Tue Jun 04, 2013 4:23 pm
Actually you can see in the output the reason your buzzer is not going off is because the volume is 0.

However, your float is definitely getting triggered.... You can even see the Serial.print happen followed by the alarm.
You can then see subsequent triggering of the Serial.print followed by no alarm. It looks like the alert is working properly...
Code: Select all
0
GET /status/wifialert.aspx?id=mudcat1&key=xxxxxxxxxx&msg=ATO_container_empty



0
0


What condition do you set the volume of the buzzer maybe you can add the additional checks in this block of code. You could even wrap the atoEmptyAlarm.Send() like this:

if(buzzer > 0) atoEmptyAlarm.Send();

I think thats your best course of action..

Posts: 133
Joined: Sun Dec 09, 2012 7:23 pm
PostPosted: Tue Jun 04, 2013 5:23 pm
lnevo wrote:Actually you can see in the output the reason your buzzer is not going off is because the volume is 0.

However, your float is definitely getting triggered.... You can even see the Serial.print happen followed by the alarm.
You can then see subsequent triggering of the Serial.print followed by no alarm. It looks like the alert is working properly...
Code: Select all
0
GET /status/wifialert.aspx?id=mudcat1&key=xxxxxxxxxx&msg=ATO_container_empty



0
0


What condition do you set the volume of the buzzer maybe you can add the additional checks in this block of code. You could even wrap the atoEmptyAlarm.Send() like this:

if(buzzer > 0) atoEmptyAlarm.Send();

I think thats your best course of action..


Thanks Lee. I will try your suggestions.
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Mon Jun 17, 2013 10:10 am
Hey Roberto,

I've definitely been having some odd issues since adding in this code to my INO. I been having some strange issues like today I noticed that the portal hasn't updated since 6/15. I had some odd alerts at that time I was getting power outage alarms which I got to silence by resetting the expansion bus. Reading from the controller was working but obviously it was not sending to the portal.

Also, in troubleshooting code with another user and adding Serial.print's he was having the wifi not work at all. I'm wondering if there is something I'm missing after an alert to reset the wifi module or something and maybe it's not in the right state.

Anyway, the occasional wifi lockups. Any insight? I'd love to submit a patch to include this in the libs.
PreviousNext

Return to Requests

Who is online

Users browsing this forum: No registered users and 1 guest