Page 1 of 3

WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 6:29 pm
by ecam
I have to reef angels.

One is setup with the new cloud attachment and the other is using my old WIFI attachment.

Both are connected but not sure any data. Is the Cloud using port 2000 to transmit? Since its not need port forwarding I thought I didn't need to change the port.

If I do need to change the port on one? Which one should it be and how do I do it

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 6:55 pm
by rimai
None of them need port forwarding to transmit data.
In order to connected to the standard WiFi from outside, you will need port forwarding.
The cloud WiFi doesn't need port forwarding as the connection is done through the cloud server.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 7:11 pm
by ecam
then I'm not getting any outlet data from the RA with wifi attachment

and the other RA with Cloud is just saying connected but no data displayed.

any guidance will be appreciated

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 7:14 pm
by ecam
Do I need to have to different user names for each one?

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 7:16 pm
by rimai
Yes

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 7:17 pm
by rimai
Did you reset your forum password?
If you are using this login for cloud WiFi, there is note that you must reset your password because this login was created much earlier than we launched the cloud server.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 7:57 pm
by ecam
I did reset the password but not the user name. How do I reset the user name on the WIFI attachment?

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 8:43 pm
by rimai
not the username. just password and only if you are using that username/password on the cloud wifi.
The regular wifi uses the code in your RA.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 8:45 pm
by rimai
According to the log, the portal has been getting data just fine for this username.
http://forum.reefangel.com/status/chart ... &filter=t1

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 9:06 pm
by ecam
yes the one that is registering is the WIFI cloud. that one is running now. only question I have is what app do I need to download on an android phone to get the uapp working.

to display on my tablet. or is this old meant for web browser

also the data is not showing on the uapp web browser says connected but no relays and all parameters are 0.0

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 9:08 pm
by rimai
http://forum.reefangel.com/uapp/
Bookmark to home screen.
It will look and feel just like a native app.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 9:36 pm
by ecam
Okay. I've changed the portal password at least 3x already. I'm still not getting any data on the uapp browser.
Any thoughts.

The user name and password is correct

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Tue Aug 22, 2017 10:30 pm
by rimai
Did you enable cloud WiFi when generating the code for your RA?
Are you using ecam for the cloud wifi or regular one?

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 4:57 am
by ecam
ecam for CLoud wifi yes.......

how do I enable Cloud WIFI.... I followed all the instructions on 2.0 manual and for coad upload it says to select Cloud wifi Attachment. However the port is not shown.. so I do not have an upload button.

Should I be select the RA unit to upload that code?

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 5:10 am
by ecam
So i got the something to work....

code was succesfully uploaded. but it gets stuck on attempting to upload code to RA_Cloud on local prt COM 5 (my correct port).

I am using manual 2.0

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 8:07 am
by rimai
which manual have you followed?
You have the rev 2 module. There is no code upload instruction in the manual for the attachment itself.
Either you download the wrong version or the instructions were not clear. If the later, please let me know which section you got confused, so I can make a better instruction set.
The rev 2 cloud WiFi attachments only need a cloud enabled code on your RA and the entire configuration of the attachment is done on your phone.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 11:09 am
by ecam
Here is what I did... I used rev 2.0... I connected reef angel and followed steps with reef angel wifi and got the light blinking cyan,... that was easy as heck... np easy to follow.

after that all hell breaks loose....
uploading code to RA controller
- following those steps I select WIFI attachment enter my information and encrypt.. however, I do not get the upload button because it is asking me for a com port... that doesn't exist because I do not have my ttl cable connected - as per instructions.

if I connect ttl. I get a com which in my case Is 5.. but it uploads to cloud then says trying to update to local Com 5. that breaks and doesn't wrk.....

testing it .... says connected but zero across the board with no relay information on outlets...

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 11:23 am
by rimai
Ok, I understand where the break down was.
I just assumed you knew how to upload codes to your RA using the webwizard, which is clear that it is not the case.
I'll update the manual, but in the mean time, the process of uploading code to your RA is virtually the same as using the Arduino IDE.
Connect the USB cable to your computer and RA.
Select the board and port
Click upload.
Just make sure you select cloud wifi and not the regular wifi.
What you are describing is what would happen is the upload fails. Just the same way as the Arduino IDE, if board or port is wrong or there is something wrong with your RA, it will fail.
Are you able to upload any code to that RA using the Arduino IDE? If so, you should also be able to upload using the webwizard to the exact same com port you selected on the IDE. Make sure you select RA+ (assuming you have RA+) on both IDE and webwizard.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 11:25 am
by rimai
And just to be sure you understood. If the code in the RA+ is not update, it is factual that you will not get anything on Uapp and thus you will see zeros.
RA+ not connected to cloud server means Uapp doesn't get any updates.
Uapp never getting any updates means evertyhing is zero.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 11:38 am
by rimai
Manual updated with webwizard page: http://forum.reefangel.com/viewtopic.php?f=8&t=6199

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 12:01 pm
by ecam
Getting this error on the code generated...

Code: Select all

Compiling code for RA_PLUS board

firmware.ino:29:26: error: 'MQTTServer' was not declared in this scope
PubSubClient CloudClient(MQTTServer, MQTTPORT, mqttcallback, mqttclient);
^
firmware.ino:29:38: error: 'MQTTPORT' was not declared in this scope
PubSubClient CloudClient(MQTTServer, MQTTPORT, mqttcallback, mqttclient);
^
firmware.ino: In function 'void loop()':
firmware.ino:52:22: error: 'WIFI_SSID' was not declared in this scope
Serial.println(WIFI_SSID); // print the network name (SSID);
^
firmware.ino:53:33: error: 'WIFI_PASS' was not declared in this scope
if (WiFi.begin(WIFI_SSID, WIFI_PASS) == WL_CONNECTED)
^
firmware.ino:128:38: error: 'PortalServer' was not declared in this scope
if (portalclient.connect(PortalServer, 80)) {
^
firmware.ino:152:40: error: 'CLOUD_USERNAME' was not declared in this scope
char pub_buffer[sizeof(CLOUD_USERNAME) + 5];
^
firmware.ino:153:25: error: 'pub_buffer' was not declared in this scope
sprintf(pub_buffer, "%s/out", CLOUD_USERNAME);
^
firmware.ino:189:30: error: 'CLOUD_USERNAME' was not declared in this scope
char sub_buffer[sizeof(CLOUD_USERNAME) + 6];
^
firmware.ino:193:15: error: 'sub_buffer' was not declared in this scope
sprintf(sub_buffer, "RA-%s", CLOUD_USERNAME);
^
firmware.ino:194:59: error: 'CLOUD_PASSWORD' was not declared in this scope
if (CloudClient.connect(sub_buffer, CLOUD_USERNAME, CLOUD_PASSWORD))
^
firmware.ino: In function 'void wdt_initialize()':
firmware.ino:258:3: error: 'GCLK' was not declared in this scope
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
^
firmware.ino:258:38: error: 'GCLK_GENDIV_ID' was not declared in this scope
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
^
firmware.ino:258:59: error: 'GCLK_GENDIV_DIV' was not declared in this scope
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
^
firmware.ino:259:40: error: 'GCLK_GENCTRL_ID' was not declared in this scope
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(2) |
^
firmware.ino:260:23: error: 'GCLK_GENCTRL_GENEN' was not declared in this scope
GCLK_GENCTRL_GENEN |
^
firmware.ino:261:23: error: 'GCLK_GENCTRL_SRC_OSCULP32K' was not declared in this scope
GCLK_GENCTRL_SRC_OSCULP32K |
^
firmware.ino:262:23: error: 'GCLK_GENCTRL_DIVSEL' was not declared in this scope
GCLK_GENCTRL_DIVSEL;
^
firmware.ino:264:23: error: 'GCLK_CLKCTRL_ID_WDT' was not declared in this scope
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID_WDT |
^
firmware.ino:265:23: error: 'GCLK_CLKCTRL_CLKEN' was not declared in this scope
GCLK_CLKCTRL_CLKEN |
^
firmware.ino:266:23: error: 'GCLK_CLKCTRL_GEN_GCLK2' was not declared in this scope
GCLK_CLKCTRL_GEN_GCLK2;
^
firmware.ino: In function 'void wdt_enable()':
firmware.ino:271:3: error: 'WDT' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino:271:21: error: 'WDT_CTRL_ENABLE' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino:273:39: error: 'WDT_CONFIG_PER' was not declared in this scope
WDT->CONFIG.reg = WDT_CONFIG_PER(0xA); // 0xA = 8192 ms
^
firmware.ino:275:24: error: 'WDT_INTENCLR_EW' was not declared in this scope
WDT->INTENCLR.reg |= WDT_INTENCLR_EW;
^
firmware.ino: In function 'void wdt_disable()':
firmware.ino:282:3: error: 'WDT' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino:282:21: error: 'WDT_CTRL_ENABLE' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino: In function 'void wdt_reset()':
firmware.ino:288:3: error: 'WDT' was not declared in this scope
WDT->CLEAR.reg = WDT_CLEAR_CLEAR_KEY;
^
firmware.ino:288:20: error: 'WDT_CLEAR_CLEAR_KEY' was not declared in this scope
WDT->CLEAR.reg = WDT_CLEAR_CLEAR_KEY;
^
exit status 1

Progress: 41.38%
Your code has some errors and couldn't be compiled.
Please fix the errors above and try again.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 12:02 pm
by ecam
code generated by wizard

Code: Select all

#include <SPI.h>
#include <WiFi101.h>
#include <PubSubClient.h>
#include <RA_CustomSettings.h>

//char ssid[32];
//char pass[32];
//char username[16];
//char password[16];

unsigned long client_timeout = millis();
unsigned long wifi_connection = millis();
unsigned long serial_timeout = millis();
unsigned long led_blink = millis();
unsigned long MQTTReconnectmillis = millis();

boolean LED_status = false;
boolean PortalConnection = false;
boolean power_status = true;
boolean data_ready = false;
int status = WL_IDLE_STATUS;
WiFiServer server(2000);
WiFiClient client;
WiFiClient portalclient;
WiFiClient mqttclient;

void mqttcallback(char* topic, byte* payload, unsigned int length);

PubSubClient CloudClient(MQTTServer, MQTTPORT, mqttcallback, mqttclient);

String currentLine = "";                // make a String to hold incoming data from the client

void setup() {
  Serial.begin(57600);      // initialize serial communication
  Serial1.begin(57600);      // initialize serial communication
  pinMode(6, OUTPUT);      // set the LED pin mode
  pinMode(7, OUTPUT);      // set the LED pin mode
  wdt_initialize();
  wdt_enable();
}

void loop() {
  wdt_reset();
  status = WiFi.status();
  while ( status != WL_CONNECTED) {
    digitalWrite(6, true);
    digitalWrite(7, false);
    if (millis() - wifi_connection > 1000)
    {
      wifi_connection = millis();
      Serial.print("Attempting to connect to Network named: ");
      Serial.println(WIFI_SSID);                   // print the network name (SSID);
      if (WiFi.begin(WIFI_SSID, WIFI_PASS) == WL_CONNECTED)
      {
        status = WiFi.status();
        server.begin();                           // start the web server on port 2000
        printWifiStatus();                        // you're connected now, so print out the status
        digitalWrite(6, false);
        digitalWrite(7, true);
      }
      Serial.println("Not connected...");
    }
    wdt_reset();
  }

  client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println(F("new incoming client"));           // print a message out the serial port
    client_timeout = millis();
    while (client.connected()) {            // loop while the client's connected
      if (millis() - client_timeout > 2000) client.stop();
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        Serial1.write(c);                   // send to Reef Angel
      }
      if (Serial1.available())
      {
        char c = Serial1.read();
        //Serial.write(c);
        currentLine += c;
        serial_timeout = millis();
        if (currentLine.length() == 255) {
          SendData();
        }
      }
      if (millis() - serial_timeout > 400)
      {
        if (currentLine.length() > 0) {
          SendData();
          Serial.println();
          client.println();
        }
      }
      if (millis() - led_blink > 50)
      {
        led_blink = millis();
        LED_status = !LED_status;
        digitalWrite(6, LED_status);
      }
    }
    // close the connection:
    client.stop();
    Serial.println(F("incoming client disconnected"));
    digitalWrite(6, false);
  }
  else
  {
    while (Serial1.available())
    {
      char c = Serial1.read();
      currentLine += c;
      if(c==10) data_ready=true;
      serial_timeout = millis();
      digitalWrite(6, true);
      if (millis() - serial_timeout > 200 || data_ready)
      {
        if (currentLine.length() > 0) 
        {
          data_ready=false;
          serial_timeout = millis();
          //        Serial.print(currentLine);
          if (currentLine.startsWith("GET"))
          {
            PortalConnection = true;
            Serial.println(F("Connecting to Portal Server"));
            if (portalclient.connect(PortalServer, 80)) {
              Serial.println(F("Connected"));
              // Make a HTTP request:
              portalclient.print(currentLine);
              portalclient.println(F(" HTTP/1.1"));
              portalclient.println(F("Host: forum.reefangel.com"));
              portalclient.println(F("Connection: close"));
              portalclient.println();
            }
            else
            {
              Serial.println(F("Failed to connect"));
            }
          }
          if (currentLine.startsWith("CLOUD:"))
          {
            //Serial.print(currentLine);
            if (currentLine.length() < 32)
            {
              if (CloudClient.connected())
              {
                //Serial.println(F("Publishing "));
                currentLine.replace("CLOUD:", "");
                Serial.print(currentLine);
                char pub_buffer[sizeof(CLOUD_USERNAME) + 5];
                sprintf(pub_buffer, "%s/out", CLOUD_USERNAME);
                char pub_msg[currentLine.length() + 1];
                currentLine.toCharArray(pub_msg, currentLine.length() + 1);
                CloudClient.publish(pub_buffer, pub_msg);
              }
            }
            else
            {
              Serial.print(F("Error on incoming data: "));
              Serial.println(currentLine.length());
            }
          }
          currentLine = "";
          digitalWrite(6, false);
        }
      }
    }
    digitalWrite(6, false);    
    while (portalclient.available()) {
      char c = portalclient.read();
      //      Serial.write(c);
    }
    if (PortalConnection && !portalclient.connected()) {
      PortalConnection = false;
      //      Serial.println();
      Serial.println(F("Disconnecting from Portal Server"));
      digitalWrite(6, false);
      portalclient.stop();
    }
  }

  CloudClient.loop();
  if (millis() - MQTTReconnectmillis > 5000)
  {
    if (!CloudClient.connected())
    {
      char sub_buffer[sizeof(CLOUD_USERNAME) + 6];
      MQTTReconnectmillis = millis();
      digitalWrite(6, true);
      Serial.println(F("MQTT Connecting..."));
      sprintf(sub_buffer, "RA-%s", CLOUD_USERNAME);
      if (CloudClient.connect(sub_buffer, CLOUD_USERNAME, CLOUD_PASSWORD))
      {
        sprintf(sub_buffer, "%s/in/#", CLOUD_USERNAME);
        Serial.println(F("MQTT succeeded"));
        CloudClient.subscribe(sub_buffer);
      }
      else
      {
        MQTTReconnectmillis = millis();
        Serial.println(F("MQTT failed"));
        CloudClient.disconnect();
      }
      digitalWrite(6, false);
    }
  }
  if (analogRead(0) < 600 && power_status)
  {
    power_status = false;
  }
  if (analogRead(0) > 600 && !power_status)
  {
    power_status = true;
  }
}

void SendData()
{
  serial_timeout = millis();
  //  Serial.print(currentLine);
  client.print(currentLine);
  currentLine = "";
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

void mqttcallback(char* topic, byte* payload, unsigned int length)
{
  Serial1.print("cloud:");
  for (int a=0;a<length;a++)
  {
    Serial1.write(payload[a]);
    Serial.write(payload[a]);
  }
  Serial1.print(" ");
  Serial.println();
}

void wdt_initialize()
{
  GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
  GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(2) |
                      GCLK_GENCTRL_GENEN |
                      GCLK_GENCTRL_SRC_OSCULP32K |
                      GCLK_GENCTRL_DIVSEL;
  while (GCLK->STATUS.bit.SYNCBUSY);  // Syncronize write to GENCTRL reg.
  GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID_WDT |
                      GCLK_CLKCTRL_CLKEN |
                      GCLK_CLKCTRL_GEN_GCLK2;
}

void wdt_enable()
{
  WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
  while (WDT->STATUS.bit.SYNCBUSY);  // Syncronize write to CTRL reg.
  WDT->CONFIG.reg = WDT_CONFIG_PER(0xA);  // 0xA = 8192 ms
  while (WDT->STATUS.bit.SYNCBUSY);  // Syncronize write to CONFIG reg.
  WDT->INTENCLR.reg |= WDT_INTENCLR_EW;
  WDT->CTRL.reg |= WDT_CTRL_ENABLE;
  while (WDT->STATUS.bit.SYNCBUSY);  // Syncronize write to CTRL reg.
}

void wdt_disable()
{
  WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
  while (WDT->STATUS.bit.SYNCBUSY);  // Syncronize write to CTRL reg.
}

void wdt_reset()
{
  WDT->CLEAR.reg = WDT_CLEAR_CLEAR_KEY;
  while (WDT->STATUS.bit.SYNCBUSY);  // Syncronize write to CLEAR reg.
}



// RA_STRING1=U2FsdGVkX1859UVHjcA82FKL34O7gI0+3D0wze1dIOM=
// RA_STRING2=U2FsdGVkX18RIQkGAAF0rkdVJ2ruvQy7RqGUkgMpI9M0ehuHpb/kUDEUu11GcIxK
// RA_STRING3=FiOS-R7W45

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 12:03 pm
by ecam
my current code

Code: Select all

    #include <Salinity.h>
    #include <Relay.h>
    #include <RA_ATO.h>
    #include <RF.h>
    #include <ReefAngel_Features.h>
    #include <Globals.h>
    #include <RA_Wifi.h>
    #include <Wire.h>
    #include <OneWire.h>
    #include <Time.h>
    #include <DS1307RTC.h>
    #include <InternalEEPROM.h>
    #include <RA_NokiaLCD.h>
    #include <RA_ATO.h>
    #include <RA_Joystick.h>
    #include <LED.h>
    #include <RA_TempSensor.h>
    #include <Relay.h>
    #include <RA_PWM.h>
    #include <Timer.h>
    #include <Memory.h>
    #include <InternalEEPROM.h>
    #include <RA_Colors.h>fa
    #include <RA_CustomColors.h>f
    #include <RF.h>
    #include <IO.h>
    #include <ORP.h>
    #include <PH.h>
    #include <WaterLevel.h>
    #include <ReefAngel.h>

    ////// Place global variable code below here
        byte myRFMode=0;
        byte myRFDuration=0;
        byte myRFSpeed=0;
    ////// Place global variable code above here

    void setup()
    {
        // This must be the first line
          ReefAngel.Init();  //Initialize controller

        // Ports toggled 
      ReefAngel.WaterChangePorts = Port5 |Port6; // Turn off Return, UV, Skimmer, Heater, Sump Equipment, ATO
      ReefAngel.FeedingModePorts = Port6; // Turn off Return and Skimmer
      ReefAngel.LightsOnPorts = Port2|Port4|Box1_Port1|Box1_Port8; //Turn on ATI lights, Fan and Fuge Light
      ReefAngel.OverheatShutoffPorts = Port1 |Port4|Port6| Box1_Port1| Box1_Port4|Box1_Port6;
      ReefAngel.TempProbe = T2_PROBE;
        ReefAngel.OverheatProbe = T2_PROBE;
                InternalMemory.OverheatTemp_write( 825 );   // Set the Overheat temperature setting
          
        // Ports that are always on
       ////// Place additional initialization code above here
    }

//           ReefAngel.StandardLights( Port3,23,0,12,0 );                      // Fuge Light
//           ReefAngel.Relay.On(Port3);                                       //  Port3 Return Pump -- Always on
          //ReefAngel.StandardLights( Port2,10,0,23,0 );                      // ReefBrites
         //   ReefAngel.Relay.Off( Port4);                                      //  11 Box1_Port3 UV - Only turn on UV Sterilizer between 11pm and 4am
//  if ( (hour() >= 7) && (hour() < 23) )  
                 //     ReefAngel.Relay.Off(Port4);
                   //   else ReefAngel.Relay.On(Port4);
     
//           ReefAngel.StandardLights( Port4,12,00,20,30 );                      //  Light --- Actinic  12 to 8:30
           //ReefAngel.Relay.On(Port5);                                      //  Port5 Saltwater Change 

//           ReefAngel.Relay.On(Port6);                                           //ATO
   //     ReefAngel.Relay.Set(Port6, ReefAngel.HighATO.IsActive());          //Turns port 6 off when High ATO is on 

          //ReefAngel.StandardHeater(Port7,777,790 );                         //  9 Box1_Port1 Heater   
//          // ReefAngel.Relay.On (Port7);                             //  Port7 Frag Tank -- Always on
           //ReefAngel.Relay.On( Port8);                            //  Port8 Skimmer -- 5 min delay start
         
    void loop()
      {
           //Box1
          ReefAngel.StandardHeater(Port1,778,790 );                        // 1 Heater  
          ReefAngel.StandardLights( Port2,13,0,22,0 );                      // 2 ReefBrites
          ReefAngel.Relay.Off(Port3) ;                                       // 3 Saltwater Pump
          ReefAngel.StandardLights( Port4,14,0,20,0 );                      // 4 Daylights
          ReefAngel.SingleATO( true,Port5,900,0 );                          // 5 ATO - RODI
          ReefAngel.Relay.On(Port6) ;                                        // 6 Return Pump
          ReefAngel.Relay.Set(Port7,ReefAngel.Relay.Status(Port6));         // 7 UV Pump
          ReefAngel.Relay.Set(Port8,ReefAngel.Relay.Status(Port6));         // 8 Calcium Reactor faPump
          
    ReefAngel.UseFlexiblePhCalibration();         
    
          //box 2 (Box1_Portxx)
//!flips the status of the port for conditional statements
          ReefAngel.StandardLights( Box1_Port1,13,30,21,0 );                    // 9 Actinics
          ReefAngel.StandardHeater( Box1_Port2,778,790 );                      // 10 Heater   
          ReefAngel.Relay.Set(Box1_Port3,ReefAngel.Relay.Status(Port6));       //  11 Skimmer
          ReefAngel.Relay.Set(Box1_Port4,!ReefAngel.Relay.Status(Port2));       //  12 Fuge Lights
          ReefAngel.Relay.On(Box1_Port5);                                      //  13 Ecotech Pumps
          ReefAngel.StandardHeater(Box1_Port6,770,790 );                       //  14 Heater
          ReefAngel.CO2Control( Box1_Port7,720,725);                           //  15 Box1_Port7 Regulator   (PhLow,PhHigh)
          ReefAngel.StandardLights( Box1_Port8,12,0,21,45 );                   //  16 Box1_Port8 Fan

          


//    ReefAngel.StandardLights( Port1,12,0,19,0 );
  //  ReefAngel.StandardLights( Port2,9,0,19,0 );

                          // Old Code
                              //moonlight dimming
                                     //    if (hour()>=6 && hour()<10) ReefAngel.PWM.SetDaylight( PWMParabola(6,0,10,0,9,100,9) ); // Moonlight Between 5-10am turn the relay on
                                     //    if (hour()>=20 && hour()<=23) ReefAngel.PWM.SetDaylight( PWMParabola(20,0,23,0,100,0,100) ); // From 8pm-Midnight turn the relay on
                                     //    else ReefAngel.PWM.SetDaylight(0);
                                     //  ReefAngel.Relay.Set( Port2, !ReefAngel.Relay.Status( Port4 ) ); //Refuge opposite of Actinic
                                     //  ReefAngel.Relay.Off( Box1_Port3); // Start with the relay off       Port #11 Moonlight
                                        //if (hour()>=5 && hour()<10) ReefAngel.Relay.On(Box1_Port3); // Moonlight Between 5-10am turn the relay on  
                                        //if (hour()>=20 && hour()<=23) ReefAngel.Relay.On(Box1_Port3); // From 8pm-Midnight turn the relay 
                                     //    ReefAngel.PWM.SetDaylight( PWMSlope(20,0,23,0,100,0,180,100) );
                                     //   ReefAngel.PWM.SetDaylight( PWMSlope(6,0,10,0,9,100,240,9) );  
                                     //ReefAngel.Relay.off(Box1_Port3);
                                     //  if (hour()>=10 || hour()<20) ReefAngel.PWM.SetDaylight(0);
                                     //    ReefAngel.PWM.SetDaylight( MoonPhase()+10 );
                                    // ReefAngel.PWM.SetDaylight(PWMParabola(20,0,23,0,0, MoonPhase(),0 ));
                                    //ReefAngel.PWM.SetDaylight(PWMSlope(6,0,23,0,0,100,240,0));
                                    //if (hour()>=5 && hour()<20) ReefAngel.PWM.SetDaylight(0);
                                    //ReefAngel.PWM.SetDaylight( PWMParabola(20,0,23,0,100,0,100) );
                                    //ReefAngel.PWM.SetDaylight( PWMParabola(6,0,10,0,9,100,9) );

////// Place your custom code below here
       
       
  //     ReefAngel.RF.UseMemory = false;
   //       if (hour()>=6 && hour()<11)
     //       myRFSetMode(ReefCrest,85,10);
       //   else if (hour()>=11 && hour()<13)
         //   myRFSetMode(ReefCrest,85,10);
          //else if (hour()>=13 && hour()<16)
            //myRFSetMode(Smart_NTM,85,50);
          //else if (hour()>=16 && hour()<19)
            //myRFSetMode(ReefCrest,65,10);
          //else
           // myRFSetMode(Lagoon,40,10);
             
                    
        // Hardcode PH calibrations
         //ReefAngel.PHMin=544; // PH7.0
         //ReefAngel.PHMax=830; // PH10.0

      //   RunDosingPumps();
       //  LogDosingPumps();
        ////// Place your custom code above here

        // This should always be the last line
        ReefAngel.Portal( "ecam" );
        ReefAngel.ShowInterface();
    }

void DrawCustomMain()
{
  ReefAngel.LCD.DrawDate(6, 122);
  pingSerial();

        // Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
 ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params,
 ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue()
 );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
 ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
//sALINITY
  pingSerial();
  char text[10];
  ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
  strcat(text,"  ");
  ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,15,50,"Salinity:");
  ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,75,50,text);
              
//PH Expansion

 pingSerial();
  ConvertNumToString(text, ReefAngel.Params.PHExp, 1);
  strcat(text,"  ");
  ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,15,60,"pH_Expan:");
  ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,75,60,text);

  pingSerial();
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  //ReefAngel.LCD.DrawOutletBox(12, 103, TempRelay);
  
   
         // Main Relay Box

        TempRelay &= ReefAngel.Relay.RelayMaskOff;
        TempRelay |= ReefAngel.Relay.RelayMaskOn;
        ReefAngel.LCD.DrawOutletBox( 12, 102, TempRelay );
        pingSerial();

        // Date and Time
        ReefAngel.LCD.DrawDate( 6, 122 );
        pingSerial();
    }

    /////////////////////////////////////////
    // Define Your dosing pumps
    /////////////////////////////////////////
    //#define numDPumps 3
// byte pumpRelays[numDPumps]={ Box1_Port2};
  //  int DPVolume[numDPumps]={ 0, 25,28} ; // 1ml for each alk and calcium - total volume for the day
    //int DPRepeat[numDPumps]={ 360, 240, 240 } ; // Repeat every 4 hrs 6x a day --- in mins
    /////////////////////////////////////////
    // Define Calibration here
    /////////////////////////////////////////
   // int CalTime[numDPumps]={ 600, 600, 600 }; // 10 minutes / 10 minutes
    //int CalVol[numDPumps]={ 350, 300,384 }; // 350ml / 300ml... .58 / .5/.64


    /////////////////////////////////////////
    // Function: RunDosingPumps()
    /////////////////////////////////////////
    //void RunDosingPumps() {
      //float rate;
      //int calcTime[numDPumps];

//      for (int i=0;i < numDPumps; i++) {
    //    rate=(float)CalVol[i]/CalTime[i];
  //      calcTime[i]=DPVolume[i]/rate/(1440/DPRepeat[i]);

        // Run the pumps
      //  ReefAngel.DosingPumpRepeat(pumpRelays[i], i*5, DPRepeat[i], calcTime[i]); // Offset between each pump is 5 minutes
//      }

      // Display Time calculated in portal
     // ReefAngel.CustomVar[0]=calcTime[0];
     // ReefAngel.CustomVar[1]=calcTime[1];
      ///ReefAngel.CustomVar[2]=calcTime[2];
//    }

    /////////////////////////////////////////
    // Function: LogDosingPumps()
    /////////////////////////////////////////
    //void LogDosingPumps() {
      //static time_t pumpTimer[numDPumps];
      //static boolean pumpStatus[numDPumps];
      //float rate;

      //for (int i=0;i< numDPumps;i++) {
       // if (ReefAngel.Relay.Status(pumpRelays[i])) {
        //  if (!pumpStatus[i]) {
          //  pumpTimer[i]=now()-pumpTimer[i]; // Pump was off, timer is now a time
            //pumpStatus[i]=true;
//          }
//        } else {
  //        if (pumpStatus[i]) {
    //        pumpTimer[i]=now()-pumpTimer[i]; // Pump was on, timer is now a timer
      //      pumpStatus[i]=false;
       
        //    rate=(float)CalVol[i]/CalTime[i];

            // Report How much volume has been dosed per day.fa
            // Could make this in minutes... excercise for the reader..
          //  ReefAngel.CustomVar[3]=pumpTimer[0]*rate;
            //ReefAngel.CustomVar[4]=pumpTimer[1]*rate; 
            //ReefAngel.CustomVar[5]=pumpTimer[2]*rate; 
//          }
 //      }
     
        // Clear timer at end of day
//        if (now()%SECS_PER_DAY==SECS_PER_DAY-1) pumpTimer[i]=0;
   //   } 
   // }


        void DrawCustomGraph()
        {
        }

        void myRFSetMode(byte m, byte s, byte d)
        {
          if (m!=myRFMode || s!=myRFSpeed || d!=myRFDuration || millis()<5000)
          {
            myRFMode=m;
            myRFSpeed=s;
            myRFDuration=d;
            ReefAngel.RF.SetMode(m,s,d);
          }
        }


Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 12:04 pm
by ecam
Thanks for the continued patience and guidance on this Roberto!!!!!!!!!!

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 12:05 pm
by rimai
Once again, your cloud wifi attachment is Rev2. There is no need to upload any code to it.
You need to update your RA+ controller and not the cloud wifi

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 12:17 pm
by ecam
ecam wrote:Getting this error on the code generated...

Code: Select all

Compiling code for RA_PLUS board

firmware.ino:29:26: error: 'MQTTServer' was not declared in this scope
PubSubClient CloudClient(MQTTServer, MQTTPORT, mqttcallback, mqttclient);
^
firmware.ino:29:38: error: 'MQTTPORT' was not declared in this scope
PubSubClient CloudClient(MQTTServer, MQTTPORT, mqttcallback, mqttclient);
^
firmware.ino: In function 'void loop()':
firmware.ino:52:22: error: 'WIFI_SSID' was not declared in this scope
Serial.println(WIFI_SSID); // print the network name (SSID);
^
firmware.ino:53:33: error: 'WIFI_PASS' was not declared in this scope
if (WiFi.begin(WIFI_SSID, WIFI_PASS) == WL_CONNECTED)
^
firmware.ino:128:38: error: 'PortalServer' was not declared in this scope
if (portalclient.connect(PortalServer, 80)) {
^
firmware.ino:152:40: error: 'CLOUD_USERNAME' was not declared in this scope
char pub_buffer[sizeof(CLOUD_USERNAME) + 5];
^
firmware.ino:153:25: error: 'pub_buffer' was not declared in this scope
sprintf(pub_buffer, "%s/out", CLOUD_USERNAME);
^
firmware.ino:189:30: error: 'CLOUD_USERNAME' was not declared in this scope
char sub_buffer[sizeof(CLOUD_USERNAME) + 6];
^
firmware.ino:193:15: error: 'sub_buffer' was not declared in this scope
sprintf(sub_buffer, "RA-%s", CLOUD_USERNAME);
^
firmware.ino:194:59: error: 'CLOUD_PASSWORD' was not declared in this scope
if (CloudClient.connect(sub_buffer, CLOUD_USERNAME, CLOUD_PASSWORD))
^
firmware.ino: In function 'void wdt_initialize()':
firmware.ino:258:3: error: 'GCLK' was not declared in this scope
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
^
firmware.ino:258:38: error: 'GCLK_GENDIV_ID' was not declared in this scope
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
^
firmware.ino:258:59: error: 'GCLK_GENDIV_DIV' was not declared in this scope
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2) | GCLK_GENDIV_DIV(4);
^
firmware.ino:259:40: error: 'GCLK_GENCTRL_ID' was not declared in this scope
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(2) |
^
firmware.ino:260:23: error: 'GCLK_GENCTRL_GENEN' was not declared in this scope
GCLK_GENCTRL_GENEN |
^
firmware.ino:261:23: error: 'GCLK_GENCTRL_SRC_OSCULP32K' was not declared in this scope
GCLK_GENCTRL_SRC_OSCULP32K |
^
firmware.ino:262:23: error: 'GCLK_GENCTRL_DIVSEL' was not declared in this scope
GCLK_GENCTRL_DIVSEL;
^
firmware.ino:264:23: error: 'GCLK_CLKCTRL_ID_WDT' was not declared in this scope
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID_WDT |
^
firmware.ino:265:23: error: 'GCLK_CLKCTRL_CLKEN' was not declared in this scope
GCLK_CLKCTRL_CLKEN |
^
firmware.ino:266:23: error: 'GCLK_CLKCTRL_GEN_GCLK2' was not declared in this scope
GCLK_CLKCTRL_GEN_GCLK2;
^
firmware.ino: In function 'void wdt_enable()':
firmware.ino:271:3: error: 'WDT' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino:271:21: error: 'WDT_CTRL_ENABLE' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino:273:39: error: 'WDT_CONFIG_PER' was not declared in this scope
WDT->CONFIG.reg = WDT_CONFIG_PER(0xA); // 0xA = 8192 ms
^
firmware.ino:275:24: error: 'WDT_INTENCLR_EW' was not declared in this scope
WDT->INTENCLR.reg |= WDT_INTENCLR_EW;
^
firmware.ino: In function 'void wdt_disable()':
firmware.ino:282:3: error: 'WDT' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino:282:21: error: 'WDT_CTRL_ENABLE' was not declared in this scope
WDT->CTRL.reg &= ~WDT_CTRL_ENABLE;
^
firmware.ino: In function 'void wdt_reset()':
firmware.ino:288:3: error: 'WDT' was not declared in this scope
WDT->CLEAR.reg = WDT_CLEAR_CLEAR_KEY;
^
firmware.ino:288:20: error: 'WDT_CLEAR_CLEAR_KEY' was not declared in this scope
WDT->CLEAR.reg = WDT_CLEAR_CLEAR_KEY;
^
exit status 1

Progress: 41.38%
Your code has some errors and couldn't be compiled.
Please fix the errors above and try again.

Roberto in this first line it say updating to RA board.. I am connecting to board through Webwizard.

can you send me a sample code you want me to upload thorught IDE or Web wizard that initiates the Cloud wifi... completely loss now...

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 1:08 pm
by rimai
When you click the wizard, you have an option to pick which controller you want to generate codes.
You are selecting cloud WiFi. You don't need to generate nor upload code for cloud WiFi. You are picking the wrong thing.
Again, you need to update the code of your RA and not cloud wifi. Just make sure that you pick cloud WiFi on the attachment section and not the standard WiFi. This wizard is just like the one from Arduino IDE. Go through the pages and pick what you want.
You have to make sure the code on your RA is cloud enabled.

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 1:12 pm
by ecam
okay... so I can now upload to RA wizard using the web wizard...

there must be some initiate command I need to put on the top to activate cloud. What is that... and do I leave the
reef angel.(cam). - old wifi. still in code?

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 1:21 pm
by ecam
under attachments in wizard all I Have is RA Net... nothing about cloud

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Posted: Wed Aug 23, 2017 1:32 pm
by rimai
Huh??
What is "reef angel.(cam). - old wifi"?
Just use the web wizard to generate your code.
Post a picture of your attachments options.