Page 1 of 1
Use PHControl on PH Expansion
Posted: Thu Nov 06, 2014 10:02 am
by mng777777
Hi all,
I am looking for some help coding. I want to use PHControl with my PH Expansion module so that I can edit the internal memory values from the app. What is the correct way to code this?
Re: Use PHControl on PH Expansion
Posted: Thu Nov 06, 2014 10:48 am
by mng777777
To elaborate further, I actually need CO2 Control, but I am already using it so what I came up with was to use PHControl and just swap some values. will this work?
Code: Select all
void ReefAngelClass::PHControl(byte PHControlRelay, int LowPH, int HighPH)
{
if (Params.PHExp <= LowPH) Relay.Off(PHControlRelay); // If PHExp <= LowPH - turn Off PHControlRelay
if (Params.PHExp >= HighPH) Relay.On(PHControlRelay); // If sensor PHExp >= HighPH - turn On PHControlRelay
Assuming this is correct, then can I just add it as custom code, or do I need to edit the ReefAngel.cpp library?
Here is my current code:
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 <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.Use2014Screen(); // Let's use 2014 Screen
ReefAngel.AddPHExpansion(); // pH Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port5Bit | Port7Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port2Bit | Port3Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port4Bit | Port6Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Port2 );
ReefAngel.Relay.On( Port7 );
ReefAngel.Relay.On( Port8 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.CO2Control( Port1 );
ReefAngel.SingleATOLow( Port3 );
ReefAngel.StandardHeater( Port4 );
ReefAngel.Relay.DelayedOn( Port5 );
ReefAngel.MoonLights( Port6 );
////// Place your custom code below here
/// Custom Labels
ReefAngel.CustomLabels[0]="CO2";
ReefAngel.CustomLabels[1]="Reactor";
ReefAngel.CustomLabels[2]="ATO";
ReefAngel.CustomLabels[3]="Heater";
ReefAngel.CustomLabels[4]="Power Heads";
ReefAngel.CustomLabels[5]="Fuge Light";
ReefAngel.CustomLabels[6]="Return";
ReefAngel.CustomLabels[7]="Skimmer";
/// PHExp params to control Reactor feed pump
if ( ReefAngel.Params.PHExp < 800 ) ReefAngel.Relay.Off( Port2 ); // Reactor Feed
if ( ReefAngel.Params.PHExp >= 840 ) ReefAngel.Relay.On( Port2 ); // Reactor Feed
/// DT Float switch to control Return in emergency overflow condition
if (ReefAngel.HighATO.IsActive()) // DT Float Switch
ReefAngel.Relay.On(Port7);
else
ReefAngel.Relay.Off(Port7);
/// Check for system uptime to delay ATO
bool atoSpanReached; //flag to determine if the controller has been running long enough to start ATO functionality
if(!atoSpanReached)
{
if(millis() >= 300000) //Has program been running for 5 minutes?
atoSpanReached = true; //It has so then set the flag
}
if(atoSpanReached) //Only run the ATO operations if the flag has been set
{
if (ReefAngel.LowATO.IsActive())
ReefAngel.SingleATO( true,Port3,60,10 );
else
ReefAngel.Relay.Off( Port3 );
}
///// Defines custom variables to use for notifications on alerts in the app
ReefAngel.ShowInterface();
if ( InternalMemory.read(ATO_Single_Exceed_Flag) == 1 )
{
ReefAngel.CustomVar[0]=1;
}
else
{
ReefAngel.CustomVar[0]=0;
}
if ( InternalMemory.read(Overheat_Exceed_Flag) == 1 )
{
ReefAngel.CustomVar[1]=1;
}
else
{
ReefAngel.CustomVar[1]=0;
}
if ( InternalMemory.read(BusLockFlag) == 1 )
{
ReefAngel.CustomVar[2]=1;
}
else
{
ReefAngel.CustomVar[2]=0;
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "mng777777" );
ReefAngel.ShowInterface();
}
Re: Use PHControl on PH Expansion
Posted: Thu Nov 06, 2014 1:40 pm
by rimai
Looks like you got it

Re: Use PHControl on PH Expansion
Posted: Thu Nov 06, 2014 6:16 pm
by mng777777
Thank you! Does is just go in the custom code section?
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 4:51 am
by rimai
No, the code you posted already had that.
This is from your own code:
Code: Select all
/// PHExp params to control Reactor feed pump
if ( ReefAngel.Params.PHExp < 800 ) ReefAngel.Relay.Off( Port2 ); // Reactor Feed
if ( ReefAngel.Params.PHExp >= 840 ) ReefAngel.Relay.On( Port2 ); // Reactor Feed
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 7:20 am
by mng777777
The problem is that my current code has to be uploaded every time I want to change the values. I'm looking for a way to change it to an internal memory setting
Justin (San Francisco),
sent from tapatalk
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 9:00 am
by lnevo
I just created a patch to the dev library to add a flag to PHControl and CO2Control to use the expansion or not. The default without the argument is false.
You would need to use the command like this to use the ph Expansion
ReefAngel.PHControl(Port2, 800, 840, true);
Additionally, I added the following functions to set and read the memory locations.
int PHEControlOn_read();
void PHEControlOn_write(const int value);
int PHEControlOff_read();
void PHEControlOff_write(const int value);
You could also use the wifi to set the memory as well.
The branch is located here
https://github.com/lnevo/Libraries/tree/phecontrol
If you could test it I will submit the patch to Roberto.
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 10:35 am
by mng777777
is there a simple way to download all 5 of the files that were patched? I am still a newb!
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 10:49 am
by mng777777
I think I figured it out. I downloaded the zip, then backed up my library by renaming the 5 files in my current library then pasted the 5 new files into my library. I am going to update my custom code, upload all of it, and give it a test run. I'll let you know how it goes.
Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 11:02 am
by lnevo
No thats the dev libraries you need the whole zip file. Not just the 5 files..
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 1:36 pm
by mng777777
lnevo wrote:I just created a patch to the dev library to add a flag to PHControl and CO2Control to use the expansion or not. The default without the argument is false.
You would need to use the command like this to use the ph Expansion
ReefAngel.PHControl(Port2, 800, 840, true);
Additionally, I added the following functions to set and read the memory locations.
int PHEControlOn_read();
void PHEControlOn_write(const int value);
int PHEControlOff_read();
void PHEControlOff_write(const int value);
You could also use the wifi to set the memory as well.
The branch is located here
https://github.com/lnevo/Libraries/tree/phecontrol
If you could test it I will submit the patch to Roberto.
So the same would work for CO2Control, but the custom line added would read something like:
Code: Select all
ReefAngel.CO2Control(Port2, 800, 840, true);
Right?
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 1:56 pm
by lnevo
Yep.
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 3:11 pm
by mng777777
Getting this error on RA Client when trying to read values:
*****11/7/2014 2:09:20 PM*****
Message:
This request operation sent to net.tcp://localhost:8733/ReefAngelListener/ did not receive a reply within the configured timeout (00:01:00). The time allotted to this operation may have been a portion of a longer timeout. This may be because the service is still processing the operation or because the service was unable to send a reply message. Please consider increasing the operation timeout (by casting the channel/proxy to IContextChannel and setting the OperationTimeout property) and ensure that the service is able to connect to the client.
StackTrace:
Server stack trace:
at System.ServiceModel.Dispatcher.DuplexChannelBinder.SyncDuplexRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at ReefAngelClient.Classes.MemoryController.GetMemoryValues(ReefAngelListenerClient raService)
at ReefAngelClient.Form1.RefreshMemoryValues()
Any ideas?
Re: Use PHControl on PH Expansion
Posted: Fri Nov 07, 2014 5:28 pm
by lnevo
Yes, there's an INI file that contains the memory locations for the RA. The dev libraries and my patch added a lot to the number of memory locations. You will need to update that file. I don't use the client so I'm not exactly familiar with it. Roberto may be able to give a better suggestion plus he's better at searching the forum than I.
I did give you the functions to read/write the variables in code so you don't have to change them through the client... but I dont' know if not having the client helps you much....
Re: Use PHControl on PH Expansion
Posted: Sat Nov 15, 2014 5:49 am
by mng777777
If not using the client, what other method would you use? They aren't loaded in the app either.
Justin (San Francisco),
sent from tapatalk
Re: Use PHControl on PH Expansion
Posted: Sat Nov 15, 2014 6:41 am
by lnevo
I'm not sure what you are asking. Can you clarify what you still need to do?
Re: Use PHControl on PH Expansion
Posted: Sat Nov 15, 2014 10:08 pm
by mng777777
How do you read/write the variables if you're not using the client? Are you doing it through the portal?
Justin (San Francisco),
sent from tapatalk
Re: Use PHControl on PH Expansion
Posted: Sun Nov 16, 2014 4:16 am
by rimai
The Client doesn't have those memory location options.
The Portal and iphone app can change the most used and the android app can change them all.
Do you have any memory location in particular you would like to change? Maybe it is already in the Portal already.
Re: Use PHControl on PH Expansion
Posted: Sun Nov 16, 2014 5:10 am
by lnevo
You can do it in the code also. The functions to do so are in post 7. You can also do it with straight http requests...
http://reefangelwifi/mi365
That will read PHEControlOn
http://reefangelwifi/mi367,800
That will set PHEControlOff to 8.00