Page 1 of 1

both ph probes completely berserk

Posted: Mon Jul 01, 2013 4:42 pm
by rossbryant1956
I have been traveling a lot lately and haven't been able to care for my tanks like I'd like. My RA and my Cam's stayed up during my travels so I could keep an eye on things.

My issue is that both my standard and my expansion PH's started giving totally bogus readings. The standard PH starting going down down down and was reading in the 4's by the time I got home. The PH expansion unit started going up up up and is currently in the 14's.

Via my camera I could see all was well, no acid or alkanity baths, fish jumping from the tanks, etc. Once home, all water tested 8.4 as expected.

The main ph is now in a glass of RODI yet still the portal says it is 6.13. On inspection (rinsing) all looks well with the probe but the barrel of the probe appears to be full of water (or some fluid)

I haven't removed the PH expansion unit (currently at 14) but will get to that tonite or tomorrow. What do you guys think? Seems weird that both PH units would go bad at approximately the same time (honestly about 3 weeks apart)

Thx

Re: both ph probes completely berserk

Posted: Mon Jul 01, 2013 6:32 pm
by nbelohlav
following along as mine has been reading low lately too. i just figured that i need to recalibrate mine or buy a new one...

Re: both ph probes completely berserk

Posted: Wed Jul 03, 2013 8:55 am
by Piper
rossbryant1956 wrote:The main ph is now in a glass of RODI yet still the portal says it is 6.13. On inspection (rinsing) all looks well with the probe but the barrel of the probe appears to be full of water (or some fluid)
That pH looks accurate for RO water. Is it staying at 6.13 when you have it in the glass or does it still fluctuate? Try it in a glass of tank water too.

I had the same issue and it turned out to be a bad float switch. Others have had stray voltage leaking into the tank from other devices (power heads, etc.) causing inaccurate readings. If the pH is stable in the glass of RO/tank water put the probe back in the tank and start unplugging devices one by one till you find the one causing the problem. If you run out of devices check your float switches. Stray voltage is more common that bad floats.

Being that both probes are not reading correctly it's more than likely not a probe issue.

~Charlie

Re: both ph probes completely berserk

Posted: Wed Jul 03, 2013 10:57 am
by rossbryant1956
I will work on this over the holiday weekend. My RA is currently unplugged and the pumps are hardwired to keep flow because the other night it just started rebooting over and over again. No clue why. I'll keep everyone in the loop. Thanks.

Re: both ph probes completely berserk

Posted: Wed Jul 03, 2013 3:37 pm
by Piper
Post your code when you get a chance. Sometimes you'll get crazy reboots like that if there is something off in the code. Also check all of your connections. The same thing happen to me when I first put my RA together. I had a bad connection on one of the USB cables if I remember correctly. Or maybe it was the VGA com cable... Can't remember exactly which cable but once I secure it all my random reboot problems went away.

~Charlie

Re: both ph probes completely berserk

Posted: Wed Jul 03, 2013 4:58 pm
by rossbryant1956
Here is my code, love your input, but not sure the problem lies here. While not fully and completely tested, it is a compilation of some of the better coders on this board. This code has been running for months.

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 <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <IO.h>
#include <Salinity.h>
#include <PH.h>
#include <ReefAngel.h>

// Set global variables 
    boolean PowerOutage=false;
    boolean DelayedPowerOutage=false;

// Globals for Params on Custom Main
byte x,y;
char text[10];

// Custom Menu
#include <avr/pgmspace.h>
prog_char menu0_label[] PROGMEM = "Turn Lights On";
prog_char menu1_label[] PROGMEM = "Turn Lights Off";
prog_char menu2_label[] PROGMEM = "Start Feeding";
prog_char menu3_label[] PROGMEM = "Start Water Change";
prog_char menu4_label[] PROGMEM = "Clear Overheat";
prog_char menu5_label[] PROGMEM = "Calibrate pH";
prog_char menu6_label[] PROGMEM = "Calibrate Salinity";
PROGMEM const char *menu_items[] = {
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label, menu6_label  };

void MenuEntry1()
{
ReefAngel.DisplayMenuEntry("Item 1");ReefAngel.Relay.RelayMaskOn = ReefAngel.LightsOnPorts;
#ifdef RelayExp
for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
{
    ReefAngel.Relay.RelayMaskOnE[i] = ReefAngel.LightsOnPortsE[i];
}
#endif  // RelayExp
ReefAngel.Relay.Write();

}
void MenuEntry2()
{
ReefAngel.DisplayMenuEntry("Item 2");ReefAngel.Relay.RelayMaskOn = 0;
#ifdef RelayExp
for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
{
    ReefAngel.Relay.RelayMaskOnE[i] = 0;
}
#endif  // RelayExp
ReefAngel.Relay.Write();

}
void MenuEntry3()
{
ReefAngel.DisplayMenuEntry("Item 3");ReefAngel.FeedingModeStart();

}
void MenuEntry4()
{
ReefAngel.DisplayMenuEntry("Item 4");ReefAngel.WaterChangeModeStart();

}
void MenuEntry5()
{
ReefAngel.DisplayMenuEntry("Item 5");ReefAngel.OverheatClear();

}
void MenuEntry6()
{
ReefAngel.DisplayMenuEntry("Item 6");ReefAngel.SetupCalibratePH();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;

}
void MenuEntry7()
{
ReefAngel.DisplayMenuEntry("Item 7");ReefAngel.SetupCalibrateSalinity();

}
// End Custom Menu Globals

void setup() {
    ReefAngel.Init();  //Initialize controller
    ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items)); // Initialize the menu
    ReefAngel.FeedingModePorts = Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off DT-LWM, GT-LWM, GT-Pump, and DT-Pump when feeding mode is activated is activated on Box1
    ReefAngel.FeedingModePortsE[0] = Port5Bit | Port6Bit | Port7Bit; // Turn off DT-RWM, GT-RWM, and Skimmer when feeding mode is activated is activated on Box2
    ReefAngel.WaterChangePorts = Port3Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off DT-Heat, DT-LWM, GT-Pump, and DT-Pump when water change mode is activated
    ReefAngel.TempProbe = T2_PROBE;  // Set the 2nd plug to be DT Main temp 
    ReefAngel.OverheatProbe = T2_PROBE;  // to monitor the overheat and temperatures
    ReefAngel.OverheatShutoffPorts = Port1Bit | Port3Bit;  // DT-Lights and DT-Heat turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPortsE[0] = Port7Bit; //Skimmer turned off if overheat
    InternalMemory.OverheatTemp_write( 829 ); // Set the DT Overheat temperature setting
    ReefAngel.LightsOnPorts = Port1Bit | Port2Bit; // Toggle DT Lights
    ReefAngel.LightsOnPortsE[0] = Port3Bit | Port4Bit; // Toggle GT Lights
}

void loop()
{

// Specific functions
    ReefAngel.Relay.On(Port8); // Turn on Pump
    ReefAngel.Relay.On(Port7); // Turn on GT Pump
// Ports that are delayed on Power Cycle & Feeding & Water Change
    if (PowerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
    {
      PowerOutage=false;
      DelayedPowerOutage=false;
      LastStart=now();
    }
    ReefAngel.Relay.DelayedOn( Port7,2 ); //GT-Pump -set to 2 min for testing CHANGE TO 4MINS
    ReefAngel.Relay.DelayedOn( Port8,1 ); //DT-Pump -set to 1 min for testing CHANGE TO 2MINS
    // ReefAngel.Relay.DelayedOn( Box1_Port7,3 ); //Skimmer -set to 1 min for testing CHANGE TO 6MINS
    ReefAngel.Relay.On(Box1_Port8); // power the PH expansion hub
    ReefAngel.StandardLights( Port1,14,00,22,00 ); // DT Lights on at 2:00pm and off at 10:00pm
    // ReefAngel.StandardLights( Port2,22,00,01,00 ); // DT-Moon Lights on at 10:00am and off at 1:00am
    ReefAngel.StandardLights( Box1_Port1,0,0,6,0 ); //Turn on reservoir between 12 AM and 6 AM
    ReefAngel.StandardLights( Box1_Port3,14,00,21,45 );  //GT Lights Main 2:00pm - 9:45pm
    ReefAngel.StandardLights( Box1_Port4,15,00,22,30 ); //GT Lights Actinic 3:00pm - 10:30pm
    ReefAngel.WavemakerRandom( Port5,60,100 );
    ReefAngel.Relay.Set( Box1_Port5, !ReefAngel.Relay.Status( Port5 ) ); //Randomize DT powerheads 
    ReefAngel.WavemakerRandom1( Port6,60,100 );
    ReefAngel.Relay.Set( Box1_Port6, !ReefAngel.Relay.Status( Port6 ) ); //Randomize GT powerheads 
    ReefAngel.StandardHeater(Port3,779,791); //DT-Heat
    StandardHeater2( Port4,779,791 ); //GT-Heat  
    
// if the hour is 2p or 8p, minute is 55 and seconds is 0, start the feeding mode
		if ( ((hour() == 14) || (hour() == 20)) && 
		(minute() == 55) && 
		(second() == 0) ) 
                {
		ReefAngel.FeedingModeStart();
		}	
     
 //turn off port 8 - DT pump when switch is tripped and sound buzzer 
     ReefAngel.Relay.Set(Port8,ReefAngel.IO.GetChannel(0));
     ReefAngel.PWM.SetDaylight(100-(ReefAngel.IO.GetChannel(0)*100)); 
    
//turn off port 7 - GT pump when switch is tripped and sound buzzer 
     ReefAngel.Relay.Set(Port7,ReefAngel.IO.GetChannel(1));
     ReefAngel.PWM.SetDaylight(100-(ReefAngel.IO.GetChannel(1)*100)); 
          
//tell the portal we have a overflow problem
     ReefAngel.CustomVar[0]=ReefAngel.IO.GetChannel(0);
     ReefAngel.CustomVar[1]=ReefAngel.IO.GetChannel(1);
     ReefAngel.CustomVar[7]=1;
     
//set up dosing pump one to run twice a week for 4 minutes
     //ReefAngel.Relay.Set(Box1_Port2,((weekday()==1||weekday()==4) && hour()==14 && minute()<6));
     //ReefAngel.Relay.Set (Box1_Port3,(hour()%2==0)); //stir chemicals in water top off unit

// Power Outage - Only DT,GT LWM & Heat ports on
     if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) PowerOutage=true; //Exp1 Relay NOT present
     if (!PowerOutage)
     {  
      ReefAngel.Timer[1].Start();
     }  
     if (ReefAngel.Timer[1].IsTriggered())
     {  
      DelayedPowerOutage=true;
     }
     if (DelayedPowerOutage)
     {
      ReefAngel.Relay.Off (Port1); //DT Lights 1
      ReefAngel.Relay.Off (Port2); //DT Lights 2
      ReefAngel.Relay.Off (Port7); //GT Pump
      ReefAngel.Relay.Off (Port8); //DT Pump
      
     }
     // Skimmer off when Return pump is off.
     if (bitRead(ReefAngel.Relay.RelayMaskOff,7)==0) //Return
     {
        bitClear(ReefAngel.Relay.RelayMaskOffE[0],6); //Skimmer
     }     
  
         
    ReefAngel.Portal("rossbryant1956");
    ReefAngel.ShowInterface();
}

void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp) //Heater for Grow Tank
{
    if (ReefAngel.Params.Temp[T1_PROBE] == 0) return;  // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T1_PROBE] <= LowTemp && ReefAngel.Params.Temp[T1_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay);  // If sensor temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T1_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay);  // If sensor temperature >= HighTemp - turn off heater
}

void DrawCustomMain()
{
  int x,y;
  //char text[10];
  // Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 40, ReefAngel.Params,
  ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 40, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
  pingSerial();

   // pH Expansion
  ReefAngel.LCD.DrawText( COLOR_MEDIUMSEAGREEN,DefaultBGColor,15,75, "GT pH:" );
  char text[7];
  ConvertNumToString(text, ReefAngel.Params.PHExp, 100);
  ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN, DefaultBGColor, 55, 75, text);
  
  // Main Relay Box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox( 12, 93, TempRelay );
  pingSerial();

   // Relay Expansion
  TempRelay = ReefAngel.Relay.RelayDataE[0];
  TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
  TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
  ReefAngel.LCD.DrawOutletBox( 12, 107, TempRelay );
  pingSerial();

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

void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph( 5, 5 );
}
While it might be code I think it is hardware. My salinity probe has never worked properly and now this issue with the ph probes. At any rate, I have it all ripped out now, only thing plugged in is one pH probe (in a glass of tank water) and the wireless. It has stopped the constant rebooting. However the pH still reads 6.07

Should I re-calibrate the ph probe? Hasn't been done in a while. Appreciate the input. Thx

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 7:07 am
by bencollinz
rossbryant1956 wrote:Here is my code, love your input, but not sure the problem lies here. While not fully and completely tested, it is a compilation of some of the better coders on this board. This code has been running for months.

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 <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <IO.h>
#include <Salinity.h>
#include <PH.h>
#include <ReefAngel.h>

// Set global variables 
    boolean PowerOutage=false;
    boolean DelayedPowerOutage=false;

// Globals for Params on Custom Main
byte x,y;
char text[10];

// Custom Menu
#include <avr/pgmspace.h>
prog_char menu0_label[] PROGMEM = "Turn Lights On";
prog_char menu1_label[] PROGMEM = "Turn Lights Off";
prog_char menu2_label[] PROGMEM = "Start Feeding";
prog_char menu3_label[] PROGMEM = "Start Water Change";
prog_char menu4_label[] PROGMEM = "Clear Overheat";
prog_char menu5_label[] PROGMEM = "Calibrate pH";
prog_char menu6_label[] PROGMEM = "Calibrate Salinity";
PROGMEM const char *menu_items[] = {
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label, menu6_label  };

void MenuEntry1()
{
ReefAngel.DisplayMenuEntry("Item 1");ReefAngel.Relay.RelayMaskOn = ReefAngel.LightsOnPorts;
#ifdef RelayExp
for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
{
    ReefAngel.Relay.RelayMaskOnE[i] = ReefAngel.LightsOnPortsE[i];
}
#endif  // RelayExp
ReefAngel.Relay.Write();

}
void MenuEntry2()
{
ReefAngel.DisplayMenuEntry("Item 2");ReefAngel.Relay.RelayMaskOn = 0;
#ifdef RelayExp
for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
{
    ReefAngel.Relay.RelayMaskOnE[i] = 0;
}
#endif  // RelayExp
ReefAngel.Relay.Write();

}
void MenuEntry3()
{
ReefAngel.DisplayMenuEntry("Item 3");ReefAngel.FeedingModeStart();

}
void MenuEntry4()
{
ReefAngel.DisplayMenuEntry("Item 4");ReefAngel.WaterChangeModeStart();

}
void MenuEntry5()
{
ReefAngel.DisplayMenuEntry("Item 5");ReefAngel.OverheatClear();

}
void MenuEntry6()
{
ReefAngel.DisplayMenuEntry("Item 6");ReefAngel.SetupCalibratePH();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;

}
void MenuEntry7()
{
ReefAngel.DisplayMenuEntry("Item 7");ReefAngel.SetupCalibrateSalinity();

}
// End Custom Menu Globals

void setup() {
    ReefAngel.Init();  //Initialize controller
    ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items)); // Initialize the menu
    ReefAngel.FeedingModePorts = Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off DT-LWM, GT-LWM, GT-Pump, and DT-Pump when feeding mode is activated is activated on Box1
    ReefAngel.FeedingModePortsE[0] = Port5Bit | Port6Bit | Port7Bit; // Turn off DT-RWM, GT-RWM, and Skimmer when feeding mode is activated is activated on Box2
    ReefAngel.WaterChangePorts = Port3Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off DT-Heat, DT-LWM, GT-Pump, and DT-Pump when water change mode is activated
    ReefAngel.TempProbe = T2_PROBE;  // Set the 2nd plug to be DT Main temp 
    ReefAngel.OverheatProbe = T2_PROBE;  // to monitor the overheat and temperatures
    ReefAngel.OverheatShutoffPorts = Port1Bit | Port3Bit;  // DT-Lights and DT-Heat turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPortsE[0] = Port7Bit; //Skimmer turned off if overheat
    InternalMemory.OverheatTemp_write( 829 ); // Set the DT Overheat temperature setting
    ReefAngel.LightsOnPorts = Port1Bit | Port2Bit; // Toggle DT Lights
    ReefAngel.LightsOnPortsE[0] = Port3Bit | Port4Bit; // Toggle GT Lights
}

void loop()
{

// Specific functions
    ReefAngel.Relay.On(Port8); // Turn on Pump
    ReefAngel.Relay.On(Port7); // Turn on GT Pump
// Ports that are delayed on Power Cycle & Feeding & Water Change
    if (PowerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
    {
      PowerOutage=false;
      DelayedPowerOutage=false;
      LastStart=now();
    }
    ReefAngel.Relay.DelayedOn( Port7,2 ); //GT-Pump -set to 2 min for testing CHANGE TO 4MINS
    ReefAngel.Relay.DelayedOn( Port8,1 ); //DT-Pump -set to 1 min for testing CHANGE TO 2MINS
    // ReefAngel.Relay.DelayedOn( Box1_Port7,3 ); //Skimmer -set to 1 min for testing CHANGE TO 6MINS
    ReefAngel.Relay.On(Box1_Port8); // power the PH expansion hub
    ReefAngel.StandardLights( Port1,14,00,22,00 ); // DT Lights on at 2:00pm and off at 10:00pm
    // ReefAngel.StandardLights( Port2,22,00,01,00 ); // DT-Moon Lights on at 10:00am and off at 1:00am
    ReefAngel.StandardLights( Box1_Port1,0,0,6,0 ); //Turn on reservoir between 12 AM and 6 AM
    ReefAngel.StandardLights( Box1_Port3,14,00,21,45 );  //GT Lights Main 2:00pm - 9:45pm
    ReefAngel.StandardLights( Box1_Port4,15,00,22,30 ); //GT Lights Actinic 3:00pm - 10:30pm
    ReefAngel.WavemakerRandom( Port5,60,100 );
    ReefAngel.Relay.Set( Box1_Port5, !ReefAngel.Relay.Status( Port5 ) ); //Randomize DT powerheads 
    ReefAngel.WavemakerRandom1( Port6,60,100 );
    ReefAngel.Relay.Set( Box1_Port6, !ReefAngel.Relay.Status( Port6 ) ); //Randomize GT powerheads 
    ReefAngel.StandardHeater(Port3,779,791); //DT-Heat
    StandardHeater2( Port4,779,791 ); //GT-Heat  
    
// if the hour is 2p or 8p, minute is 55 and seconds is 0, start the feeding mode
		if ( ((hour() == 14) || (hour() == 20)) && 
		(minute() == 55) && 
		(second() == 0) ) 
                {
		ReefAngel.FeedingModeStart();
		}	
     
 //turn off port 8 - DT pump when switch is tripped and sound buzzer 
     ReefAngel.Relay.Set(Port8,ReefAngel.IO.GetChannel(0));
     ReefAngel.PWM.SetDaylight(100-(ReefAngel.IO.GetChannel(0)*100)); 
    
//turn off port 7 - GT pump when switch is tripped and sound buzzer 
     ReefAngel.Relay.Set(Port7,ReefAngel.IO.GetChannel(1));
     ReefAngel.PWM.SetDaylight(100-(ReefAngel.IO.GetChannel(1)*100)); 
          
//tell the portal we have a overflow problem
     ReefAngel.CustomVar[0]=ReefAngel.IO.GetChannel(0);
     ReefAngel.CustomVar[1]=ReefAngel.IO.GetChannel(1);
     ReefAngel.CustomVar[7]=1;
     
//set up dosing pump one to run twice a week for 4 minutes
     //ReefAngel.Relay.Set(Box1_Port2,((weekday()==1||weekday()==4) && hour()==14 && minute()<6));
     //ReefAngel.Relay.Set (Box1_Port3,(hour()%2==0)); //stir chemicals in water top off unit

// Power Outage - Only DT,GT LWM & Heat ports on
     if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) PowerOutage=true; //Exp1 Relay NOT present
     if (!PowerOutage)
     {  
      ReefAngel.Timer[1].Start();
     }  
     if (ReefAngel.Timer[1].IsTriggered())
     {  
      DelayedPowerOutage=true;
     }
     if (DelayedPowerOutage)
     {
      ReefAngel.Relay.Off (Port1); //DT Lights 1
      ReefAngel.Relay.Off (Port2); //DT Lights 2
      ReefAngel.Relay.Off (Port7); //GT Pump
      ReefAngel.Relay.Off (Port8); //DT Pump
      
     }
     // Skimmer off when Return pump is off.
     if (bitRead(ReefAngel.Relay.RelayMaskOff,7)==0) //Return
     {
        bitClear(ReefAngel.Relay.RelayMaskOffE[0],6); //Skimmer
     }     
  
         
    ReefAngel.Portal("rossbryant1956");
    ReefAngel.ShowInterface();
}

void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp) //Heater for Grow Tank
{
    if (ReefAngel.Params.Temp[T1_PROBE] == 0) return;  // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T1_PROBE] <= LowTemp && ReefAngel.Params.Temp[T1_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay);  // If sensor temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T1_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay);  // If sensor temperature >= HighTemp - turn off heater
}

void DrawCustomMain()
{
  int x,y;
  //char text[10];
  // Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 40, ReefAngel.Params,
  ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 40, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
  pingSerial();

   // pH Expansion
  ReefAngel.LCD.DrawText( COLOR_MEDIUMSEAGREEN,DefaultBGColor,15,75, "GT pH:" );
  char text[7];
  ConvertNumToString(text, ReefAngel.Params.PHExp, 100);
  ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN, DefaultBGColor, 55, 75, text);
  
  // Main Relay Box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox( 12, 93, TempRelay );
  pingSerial();

   // Relay Expansion
  TempRelay = ReefAngel.Relay.RelayDataE[0];
  TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
  TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
  ReefAngel.LCD.DrawOutletBox( 12, 107, TempRelay );
  pingSerial();

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

void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph( 5, 5 );
}
While it might be code I think it is hardware. My salinity probe has never worked properly and now this issue with the ph probes. At any rate, I have it all ripped out now, only thing plugged in is one pH probe (in a glass of tank water) and the wireless. It has stopped the constant rebooting. However the pH still reads 6.07

Should I re-calibrate the ph probe? Hasn't been done in a while. Appreciate the input. Thx
"all ripped out" meaning temp probes too?

and try hardcoding your ph like so

Code: Select all

        ReefAngel.PHMin=576; // PH7.0
        ReefAngel.PHMax=842; // PH10.0
let me know what your ph is after that.

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 8:08 am
by rossbryant1956
Yes, everything. So as an update I left the old pH probe running in that glass of tank water last night and it maintained a constant 6.15 except for three anomalies where it dropped to 4.5 at 8:00 PM, 10 PM, and 2:00 AM.

This morning I replaced the probe with another one I had and it jumped to 7.57 and for now is staying constant. I am still considering whether I should calibrate.

I had seen references to this code block before but do not really understand what it does...can someone please explain it to me? And if I should do it, should I use the numbers from my last calibration? Thx in advance.

Code: Select all

 ReefAngel.PHMin=576; // PH7.0
ReefAngel.PHMax=842; // PH10.0

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 2:29 pm
by rossbryant1956
So I went ahead and re-calibrated my pH and got values of 541 and 838 respectively. This brought my pH reading to 7.79 to 7.82 on both the portal and on the client. This reading is back in the range of where these particular apps always reported my pH prior to all these troubles but it has never been up in the 8.X's where all my testing has always said it was testing.

What now? I am wondering about using the commands above to set a basis for pH to where the test kits say it should be and then monitor from there. I imagine i would just experiment and upload until I drove the pH numbers up to the 8.4 that my kits believe it to be.

Hope to hear your thoughts on this...

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 2:57 pm
by Piper
I suspect the probe is accurate. Probably more accurate than your test kits. The pH will drop in the jar without any agitation or circulation. Are you testing the same water (in the jar) with the test kit and the probe?

But aside from that, the pH stays constant and no problems with the controller rebooting? What happens if you put the probe back in tank water? I'm still leaning towards stray voltage. It certainly could be a hardware issue as well.

~Charlie

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 3:19 pm
by rossbryant1956
no more rebooting, pH is stable, probe still in the glass of tank water. I'll put the probe back in the tank before leaving for tonite's festivities and see what happens while I'm gone.

I bought a multimeter, also thinking about stray voltage, but have no clue how to use it. For AC voltage it has two settings, 200V and 600V, not clear on which one to use. Any advice would be welcome.

I did a google search and posted it here: http://forum.reefangel.com/viewtopic.php?f=2&t=3097 on how to do this sort of thing but I am the sort that like specific instructions, especially around electricity.

Finally, if you are right and the probe is accurate, shouldn't I be doing some dosing to raise my pH?

Again, thanks to all contributing...

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 3:23 pm
by lnevo
8.4 is pretty high pH wise. Are you sure your test kit is good? I would try with another. Whats your Ca and Alk? Are you taking water near your probe for your test?

The important thing is more the stability and monitoring your ph for swings not necessarily the value.

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 4:49 pm
by bencollinz
try something for me, plug everything back in and use this code for your heaters. I think I may have found a bug. This fixed my rebooting issue...until I got my wifi moduleback.
change your temps and ports accordingly.

Code: Select all

 StandardHeater1( Port3,760,770 );
        StandardHeater2( Port1,796,802 );

Code: Select all

  void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp)
    {
    if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
    }
    void StandardHeater1(byte HeaterRelay, int LowTemp, int HighTemp)
    {
    if (ReefAngel.Params.Temp[T1_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T1_PROBE] <= LowTemp && ReefAngel.Params.Temp[T1_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T1_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
    }

what I stumbled upon was when I got a second temp probe(6ft) the RA would still see the 3ft temp probe as number one. (due to the serial numbers).

my original code used ReefAngel.StandardHeater
and this for my second

Code: Select all

void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp)
    {
    if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
    }
the problem was that the RA was seeing both probes as probe 1 even though I told it not to. so my first probe was for my second tank and was supposed to kick the heater on at 76. my second probe was for my first tank and was supposed to kick that heater on at 80. what I noticed was that when the first probe would tell the relay to turn on it would reboot the RA endlessly.

I verified this by taking the 80 degree probe and putting it in freezing cold water and it would try to turn on the relay port for the 76 degree temp probe.

hopefully you're following all of this.

so I dropped the reefangel.standard and used this

Code: Select all

    void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp)
    {
    if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
    }
    void StandardHeater1(byte HeaterRelay, int LowTemp, int HighTemp)
    {
    if (ReefAngel.Params.Temp[T1_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
    if (ReefAngel.Params.Temp[T1_PROBE] <= LowTemp && ReefAngel.Params.Temp[T1_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
    if (ReefAngel.Params.Temp[T1_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
    }
and THOSE reboots ceased. I'm still getting reboots from the wifi module however.

Re: both ph probes completely berserk

Posted: Thu Jul 04, 2013 7:54 pm
by rossbryant1956
thx, I'll study this this weekend.

Re: both ph probes completely berserk

Posted: Fri Jul 05, 2013 5:16 am
by bencollinz
to make it easy on you...

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 <RA_Colors.h>
    #include <RA_CustomColors.h>
    #include <Relay.h>
    #include <RA_PWM.h>
    #include <Timer.h>
    #include <Memory.h>
    #include <IO.h>
    #include <Salinity.h>
    #include <PH.h>
    #include <ReefAngel.h>

    // Set global variables
        boolean PowerOutage=false;
        boolean DelayedPowerOutage=false;

    // Globals for Params on Custom Main
    byte x,y;
    char text[10];

    // Custom Menu
    #include <avr/pgmspace.h>
    prog_char menu0_label[] PROGMEM = "Turn Lights On";
    prog_char menu1_label[] PROGMEM = "Turn Lights Off";
    prog_char menu2_label[] PROGMEM = "Start Feeding";
    prog_char menu3_label[] PROGMEM = "Start Water Change";
    prog_char menu4_label[] PROGMEM = "Clear Overheat";
    prog_char menu5_label[] PROGMEM = "Calibrate pH";
    prog_char menu6_label[] PROGMEM = "Calibrate Salinity";
    PROGMEM const char *menu_items[] = {
    menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label, menu6_label  };

    void MenuEntry1()
    {
    ReefAngel.DisplayMenuEntry("Item 1");ReefAngel.Relay.RelayMaskOn = ReefAngel.LightsOnPorts;
    #ifdef RelayExp
    for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
    {
        ReefAngel.Relay.RelayMaskOnE[i] = ReefAngel.LightsOnPortsE[i];
    }
    #endif  // RelayExp
    ReefAngel.Relay.Write();

    }
    void MenuEntry2()
    {
    ReefAngel.DisplayMenuEntry("Item 2");ReefAngel.Relay.RelayMaskOn = 0;
    #ifdef RelayExp
    for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
    {
        ReefAngel.Relay.RelayMaskOnE[i] = 0;
    }
    #endif  // RelayExp
    ReefAngel.Relay.Write();

    }
    void MenuEntry3()
    {
    ReefAngel.DisplayMenuEntry("Item 3");ReefAngel.FeedingModeStart();

    }
    void MenuEntry4()
    {
    ReefAngel.DisplayMenuEntry("Item 4");ReefAngel.WaterChangeModeStart();

    }
    void MenuEntry5()
    {
    ReefAngel.DisplayMenuEntry("Item 5");ReefAngel.OverheatClear();

    }
    void MenuEntry6()
    {
    ReefAngel.DisplayMenuEntry("Item 6");ReefAngel.SetupCalibratePH();
    ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;

    }
    void MenuEntry7()
    {
    ReefAngel.DisplayMenuEntry("Item 7");ReefAngel.SetupCalibrateSalinity();

    }
    // End Custom Menu Globals

    void setup() {
        ReefAngel.Init();  //Initialize controller
        ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items)); // Initialize the menu
        ReefAngel.FeedingModePorts = Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off DT-LWM, GT-LWM, GT-Pump, and DT-Pump when feeding mode is activated is activated on Box1
        ReefAngel.FeedingModePortsE[0] = Port5Bit | Port6Bit | Port7Bit; // Turn off DT-RWM, GT-RWM, and Skimmer when feeding mode is activated is activated on Box2
        ReefAngel.WaterChangePorts = Port3Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off DT-Heat, DT-LWM, GT-Pump, and DT-Pump when water change mode is activated
        ReefAngel.TempProbe = T2_PROBE;  // Set the 2nd plug to be DT Main temp
        ReefAngel.OverheatProbe = T2_PROBE;  // to monitor the overheat and temperatures
        ReefAngel.OverheatShutoffPorts = Port1Bit | Port3Bit;  // DT-Lights and DT-Heat turned off when Overheat temperature exceeded
        ReefAngel.OverheatShutoffPortsE[0] = Port7Bit; //Skimmer turned off if overheat
        InternalMemory.OverheatTemp_write( 829 ); // Set the DT Overheat temperature setting
        ReefAngel.LightsOnPorts = Port1Bit | Port2Bit; // Toggle DT Lights
        ReefAngel.LightsOnPortsE[0] = Port3Bit | Port4Bit; // Toggle GT Lights
    }

    void loop()
    {

    // Specific functions
        ReefAngel.Relay.On(Port8); // Turn on Pump
        ReefAngel.Relay.On(Port7); // Turn on GT Pump
    // Ports that are delayed on Power Cycle & Feeding & Water Change
        if (PowerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
        {
          PowerOutage=false;
          DelayedPowerOutage=false;
          LastStart=now();
        }
        ReefAngel.Relay.DelayedOn( Port7,2 ); //GT-Pump -set to 2 min for testing CHANGE TO 4MINS
        ReefAngel.Relay.DelayedOn( Port8,1 ); //DT-Pump -set to 1 min for testing CHANGE TO 2MINS
        // ReefAngel.Relay.DelayedOn( Box1_Port7,3 ); //Skimmer -set to 1 min for testing CHANGE TO 6MINS
        ReefAngel.Relay.On(Box1_Port8); // power the PH expansion hub
        ReefAngel.StandardLights( Port1,14,00,22,00 ); // DT Lights on at 2:00pm and off at 10:00pm
        // ReefAngel.StandardLights( Port2,22,00,01,00 ); // DT-Moon Lights on at 10:00am and off at 1:00am
        ReefAngel.StandardLights( Box1_Port1,0,0,6,0 ); //Turn on reservoir between 12 AM and 6 AM
        ReefAngel.StandardLights( Box1_Port3,14,00,21,45 );  //GT Lights Main 2:00pm - 9:45pm
        ReefAngel.StandardLights( Box1_Port4,15,00,22,30 ); //GT Lights Actinic 3:00pm - 10:30pm
        ReefAngel.WavemakerRandom( Port5,60,100 );
        ReefAngel.Relay.Set( Box1_Port5, !ReefAngel.Relay.Status( Port5 ) ); //Randomize DT powerheads
        ReefAngel.WavemakerRandom1( Port6,60,100 );
        ReefAngel.Relay.Set( Box1_Port6, !ReefAngel.Relay.Status( Port6 ) ); //Randomize GT powerheads
        StandardHeater1(Port3,779,791); //DT-Heat
        StandardHeater2( Port4,779,791 ); //GT-Heat 
       
    // if the hour is 2p or 8p, minute is 55 and seconds is 0, start the feeding mode
          if ( ((hour() == 14) || (hour() == 20)) &&
          (minute() == 55) &&
          (second() == 0) )
                    {
          ReefAngel.FeedingModeStart();
          }   
         
    //turn off port 8 - DT pump when switch is tripped and sound buzzer
         ReefAngel.Relay.Set(Port8,ReefAngel.IO.GetChannel(0));
         ReefAngel.PWM.SetDaylight(100-(ReefAngel.IO.GetChannel(0)*100));
       
    //turn off port 7 - GT pump when switch is tripped and sound buzzer
         ReefAngel.Relay.Set(Port7,ReefAngel.IO.GetChannel(1));
         ReefAngel.PWM.SetDaylight(100-(ReefAngel.IO.GetChannel(1)*100));
             
    //tell the portal we have a overflow problem
         ReefAngel.CustomVar[0]=ReefAngel.IO.GetChannel(0);
         ReefAngel.CustomVar[1]=ReefAngel.IO.GetChannel(1);
         ReefAngel.CustomVar[7]=1;
         
    //set up dosing pump one to run twice a week for 4 minutes
         //ReefAngel.Relay.Set(Box1_Port2,((weekday()==1||weekday()==4) && hour()==14 && minute()<6));
         //ReefAngel.Relay.Set (Box1_Port3,(hour()%2==0)); //stir chemicals in water top off unit

    // Power Outage - Only DT,GT LWM & Heat ports on
         if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) PowerOutage=true; //Exp1 Relay NOT present
         if (!PowerOutage)
         { 
          ReefAngel.Timer[1].Start();
         } 
         if (ReefAngel.Timer[1].IsTriggered())
         { 
          DelayedPowerOutage=true;
         }
         if (DelayedPowerOutage)
         {
          ReefAngel.Relay.Off (Port1); //DT Lights 1
          ReefAngel.Relay.Off (Port2); //DT Lights 2
          ReefAngel.Relay.Off (Port7); //GT Pump
          ReefAngel.Relay.Off (Port8); //DT Pump
         
         }
         // Skimmer off when Return pump is off.
         if (bitRead(ReefAngel.Relay.RelayMaskOff,7)==0) //Return
         {
            bitClear(ReefAngel.Relay.RelayMaskOffE[0],6); //Skimmer
         }     
     
             
        ReefAngel.Portal("rossbryant1956");
        ReefAngel.ShowInterface();
    }
     void StandardHeater1(byte HeaterRelay, int LowTemp, int HighTemp)
        {
        if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
        if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
        if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
        }


   void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp) //Heater for Grow Tank
    {
        if (ReefAngel.Params.Temp[T1_PROBE] == 0) return;  // Don't turn the heater on if the temp is reading 0
        if (ReefAngel.Params.Temp[T1_PROBE] <= LowTemp && ReefAngel.Params.Temp[T1_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay);  // If sensor temperature <= LowTemp - turn on heater
        if (ReefAngel.Params.Temp[T1_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay);  // If sensor temperature >= HighTemp - turn off heater
    }

    void DrawCustomMain()
    {
      int x,y;
      //char text[10];
      // Parameters
    #if defined DisplayLEDPWM && ! defined RemoveAllLights
      ReefAngel.LCD.DrawMonitor( 15, 40, ReefAngel.Params,
      ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
    #else // defined DisplayLEDPWM && ! defined RemoveAllLights
      ReefAngel.LCD.DrawMonitor( 15, 40, ReefAngel.Params );
    #endif // defined DisplayLEDPWM && ! defined RemoveAllLights
      pingSerial();

       // pH Expansion
      ReefAngel.LCD.DrawText( COLOR_MEDIUMSEAGREEN,DefaultBGColor,15,75, "GT pH:" );
      char text[7];
      ConvertNumToString(text, ReefAngel.Params.PHExp, 100);
      ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN, DefaultBGColor, 55, 75, text);
     
      // Main Relay Box
      byte TempRelay = ReefAngel.Relay.RelayData;
      TempRelay &= ReefAngel.Relay.RelayMaskOff;
      TempRelay |= ReefAngel.Relay.RelayMaskOn;
      ReefAngel.LCD.DrawOutletBox( 12, 93, TempRelay );
      pingSerial();

       // Relay Expansion
      TempRelay = ReefAngel.Relay.RelayDataE[0];
      TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
      TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
      ReefAngel.LCD.DrawOutletBox( 12, 107, TempRelay );
      pingSerial();

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

    void DrawCustomGraph()
    {
    // ReefAngel.LCD.DrawGraph( 5, 5 );
    }

Re: both ph probes completely berserk

Posted: Fri Jul 05, 2013 12:16 pm
by Piper
rossbryant1956 wrote:no more rebooting, pH is stable, probe still in the glass of tank water. I'll put the probe back in the tank before leaving for tonite's festivities and see what happens while I'm gone.
How did the pH do with the probe back in the tank?

To check for stray voltage the best thing to do is start unplugging devices one by one and checking your pH swing. When your pH stops fluctuating, you found the offending device. Don't forget to unplug your float switches to see if one of them may be causing the problem as well.

~Charlie

Re: both ph probes completely berserk

Posted: Fri Jul 05, 2013 1:07 pm
by rossbryant1956
It has been steady at 7.85 since going back in the tank on the portal. On the client, however, I'll see an occasional blip where the pH drops down into the 4's for a hour and then comes right back. The portal hasn't caught that, yet. I am almost wondering if I am seeing an internet outage at home periodically.

What does the portal do if it sees an outage in the logs? Running fine, loses connectivity for a short period, then it's back?

At any rate, I am going start hooking everything back up tonite\this weekend. I will be playing with my new multimeter to see if I can detect any stray voltage while I do it. Really don't want to discover it is bad float valves because I use a bunch of them in my systems.

Thx to all that helped and maybe some others learned something as well. Ross

Re: both ph probes completely berserk

Posted: Fri Jul 05, 2013 4:46 pm
by rossbryant1956
Thx Ben for the code change. I also grabbed some of your menu code from another post. Again, thx!!