WIFI Cloud and WIFI Attachment on 2 RA plusses

Expansion modules and attachments
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by rimai »

http://forum.reefangel.com/uapp/
Bookmark to home screen.
It will look and feel just like a native app.
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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?
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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?
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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.
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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...
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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.
Roberto.
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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.
Roberto.
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by rimai »

Manual updated with webwizard page: http://forum.reefangel.com/viewtopic.php?f=8&t=6199
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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);
          }
        }

ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecam »

Thanks for the continued patience and guidance on this Roberto!!!!!!!!!!
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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...
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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.
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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?
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecam »

under attachments in wizard all I Have is RA Net... nothing about cloud
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post 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.
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecam »

Hey roberto. Can you confirm if you are getting any info from
My new id. EcamFT. This would be under the old wifi not the cloud unit
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecam »

Thanks for that Roberto... now here is an interesting one. I fixed the original WIFI extender.

When I attach it to the controller it transmit information under ecam but doesn't transmit when I change the forum name to ecamFT. I'm probably going to change the name on the cloud wifi...

but wanted to know if there is some code embedded in the wifi module itself that holds on to my user name.

Also even if I upload code with ecamFT in the code. the module still transmits it under ecam.

Hope this makes sense


I'm about to start working on the cloud wifi next.. hopefully we can put this thread to rest....

Again thanks for all the help
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by rimai »

Which one are you talking about?
Regular wifi only uses information from RA.
Could wifi uses information from RA and attachment itself.
Roberto.
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecam »

The regular WIFI... I fixed it and placed it on my second controller. the one that I named ecamFT.

this will only work if I keep the name ecam. If I change it to ecamFT it doesn't matter and will not feed any data. it will only transmit under ecam.

Either way... I can control the second controller with the old wifi... I am happy...

now I will focus on getting the cloud wifi working. Only catch with that is that I have to use the ecamFT to make that work..... So here goes nothing... Get the popcorn ready!!!!!
ecamFT
Posts: 35
Joined: Tue Aug 22, 2017 8:00 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecamFT »

Okay here is the new code generated and uploaded from the web wizard. this was done as ecamFT But there is still no data being relayed to the server (still getting Connected but 0.0) and my cloud link is blinking cyan. Whats next boss

Code: Select all

#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>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <DCPump.h>
#include <PAR.h>
#include <ReefAngel.h>

////// Place global variable code below here


////// Place global variable code above here


void setup()
{
    // This must be the first line
    ReefAngel.Init();  //Initialize controller
    ReefAngel.AddStandardMenu();  // Add Standard Menu
    ReefAngel.Use2014Screen();  // Let's use 2014 Screen
    ReefAngel.AddSalinityExpansion();  // Salinity Expansion Module
    ReefAngel.AddPHExpansion();  // pH Expansion Module
    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = Port1Bit | Port6Bit | Port7Bit | Port8Bit;
    ReefAngel.FeedingModePortsE[0] = 0;
    ReefAngel.FeedingModePortsE[1] = Port3Bit | Port5Bit;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = Port1Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;
    ReefAngel.WaterChangePortsE[0] = 0;
    ReefAngel.WaterChangePortsE[1] = Port2Bit | Port3Bit | Port6Bit | Port7Bit;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = Port4Bit | Port6Bit | Port7Bit | Port8Bit;
    ReefAngel.OverheatShutoffPortsE[0] = 0;
    ReefAngel.OverheatShutoffPortsE[1] = Port1Bit | Port2Bit | Port3Bit | Port6Bit | Port7Bit;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = Port2Bit;
    ReefAngel.LightsOnPortsE[0] = 0;
    ReefAngel.LightsOnPortsE[1] = Port1Bit | Port4Bit | Port8Bit;
    // Use T1 probe as temperature and overheat functions
    ReefAngel.TempProbe = T1_PROBE;
    ReefAngel.OverheatProbe = T1_PROBE;
    // Set the Overheat temperature setting
    InternalMemory.OverheatTemp_write( 825 );

    // Ports that are always on
    ReefAngel.Relay.On( Port3 );
    ReefAngel.Relay.On( Port6 );
    ReefAngel.Relay.On( Port7 );
    ReefAngel.Relay.On( Port8 );
    ReefAngel.Relay.On( Box2_Port5 );

    ////// Place additional initialization code below here


    ////// Place additional initialization code above here
}

void loop()
{
    ReefAngel.StandardLights( Box2_Port1,13,30,21,0 );
    ReefAngel.StandardHeater( T1_PROBE,Port1,778,790 );
    ReefAngel.StandardLights( Port2,13,0,22,0 );
    ReefAngel.StandardHeater( T1_PROBE,Box2_Port2,778,0 );
    ReefAngel.Relay.DelayedOn( Box2_Port3,2 );
    ReefAngel.StandardLights( Port4,14,0,20,0 );
    ReefAngel.Relay.Set( Box2_Port4, !ReefAngel.Relay.Status( Port2 ) );
    ReefAngel.SingleATO( true,Port5,900,0 );
    ReefAngel.StandardHeater( T1_PROBE,Box2_Port6,770,0 );
    ReefAngel.CO2Control( Box2_Port7,725,720 );
    ReefAngel.StandardLights( Box2_Port8,13,30,21,30 );
    if ( ReefAngel.Relay.Status( Port6 ) ) ReefAngel.Relay.On( Port7 );
    if ( ReefAngel.Relay.Status( Port6 ) ) ReefAngel.Relay.On( Port8 );
    if ( ReefAngel.Relay.Status( Port6 ) ) ReefAngel.Relay.On( Box1_Port3 );
    if ( ReefAngel.Relay.Status( Port2 ) ) ReefAngel.Relay.Off( Box1_Port4 );
    if ( ReefAngel.HighATO.IsActive() == 1 ) ReefAngel.Relay.Off( Box1_Port3 );

    ////// Place your custom code below here


    ////// Place your custom code above here

    ReefAngel.CloudPortal();
    // This should always be the last line
    ReefAngel.ShowInterface();
}



// RA_STRING1=null
// RA_STRING2=null
// RA_STRING3=null
ecam
Posts: 229
Joined: Thu Nov 15, 2012 11:27 am

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecam »

Bump
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by rimai »

There was data right after you posted this.
http://forum.reefangel.com/status/chart ... &filter=t1
Then you did something yesterday that changed
Roberto.
ecamFT
Posts: 35
Joined: Tue Aug 22, 2017 8:00 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecamFT »

Roberto. Can you look at the post of my code. I don't know what to do from this point.

From my end portal still says 0. I introduced the code for reef angel cloud and I'm able to upload from webwizard.

But it still not working. What's missing ?
ecamFT
Posts: 35
Joined: Tue Aug 22, 2017 8:00 pm

Re: WIFI Cloud and WIFI Attachment on 2 RA plusses

Post by ecamFT »

[quote="rimai"]There was data right after you posted this.



Did this data come from cloud or regular wifi. I was messing around with the user names.

Ecam = is old wifi units. This is working no issues

EcamFT is cloud wifi now. Still no data for me from the cloud uapp
Post Reply