Automated Pool Controller [NEEDS UPDATING: ALL GROOVY CODE IS OBSOLETE]

Just a teaser update since I have been quiet about my progress. I’ll do a more detailed post once everything is up and running as I’m still waiting on a couple of parts from amazon to finish completely.

  1. I built and deployed version 3 of my pool temp level sensor using the milone etape. Its been running flawlessly for the last 2 weeks or so and I have to say it’s the best version yet.
    I did double 18650 batteries as the battery pack to improve battery life and ability to take measurements more often. The brains is still the same particle photon and This design is completely sealed off and water proof so the corrosion death my last sensor faced should be in the past. I’d like to thank Richard For his hackster project that helped me find the milone etape.
  2. I started building a separate pool chemical controller to not only control the stenner pumps but to measure chemical levels and include low level alerts in the chemical tanks themselves. I’m waiting on a relay for my outlets and some more waterproof connectors to connect up some sensors. But I have it plugged in and reading ph and orp for now. For the plumbing I built a DIY flow cell that basically takes water from the high pressure side into some tubing that then feeds into 1.5 inch pvc couplers to drastically slow the flow and allow the sensors to mount and take a reading in a more quiet environment wit the benefit of also not hacking the crap out of my pool equipment. The outflow from the flow cell just goes to more tubing that connects into one of the drain plugs on the pump so it sucks it back into the system. I’ll have to finish up more code and wiring but I have the system circuit boarded and tested and so far it’s working great. For the ph and orp sensors I went with phidgets. It was the cheapest I could find I think it saved a lot of money since they are analog sensors that skip the whole board required for digital conversion etc. I figured I could just read the analog values with the photon so I gave this board a whirl. So far it is working great!

Brennon, wow…you are really moving on this…I am more like a turtle, haha. That ph value would be a dream come true and I would definitely add another stenner pump to automate the acid. My pool continually takes acid.

I am still working at the photon level…I’ve just figured out a bare minimum as to how to communicate with it (curl statements). What I will eventually do beyond that…I don’t know yet but will definitely look into your “hubitat”. I did glance at Samsung Smartthings prior and was a bit concerned about recent direction that seemed to limit the DIY community. Seems like some of that has been worked out but apparently you have moved on…

I’ll post my serial pump control…it’s simple code, probably nothing new for anyone except for me. If only I hadn’t had that indexing error I would have had it working about a week and a half ago, haha.

It is a standalone program and I had the photon out at my pool pad for a few days to run my pump. I controlled/monitored it using the following commands.

  1. To send a new pump rpm command (this case 30% max):

curl https://api.particle.io/v1/devices/{xxxxx_your_device_ID_here_xxxxx}/rpm_pct -d access_token={xxxx_your_access_token_here_xxxxx} -d “args=30”

  1. To get the latest pump status returned (along with some other variables)

curl “https://api.particle.io/v1/devices/{xxxxx_your_device_ID_here_xxxxx}/pmp_stat?access_token={xxxx_your_access_token_here_xxxxx}

#include "Particle.h"

STARTUP(WiFi.selectAntenna(ANT_AUTO)); // continually switches at high speed between antennas

String Pump_Status; // variable exposed to the cloud that provides most recent pump status
int changePumpSpeed(String RPM_pct);  //  function called from the cloud to provide the new pump RPM percentage

//uint8_t pumpCommand[10] = {0x10, 0x02, 0x0C, 0x01, 0x00, rpm%, xsumh, xsuml, 0x10, 0x03}; //pump command pattern
//   for Hayward Ecostar, rpm is calculated as: rpm = (rpm% * 100/3450), rpm% is a number from 0-100
//   for Hayward Ecostar, rpm% from 1-19 are taken by the pump to be 20...which is the minimum pump rpm (besides 0)
//   xsuml = byte0(0x10)+byte1(0x02)+byte2(0x0C)+byte3(0x01)+byte4(0x00)+byte5(rpm%),  xsumh = 0x00 for pump command
//   thanks to http://www.desert-home.com/2014/07/controlling-hayward-ecostar-pump.html for work on this
//   according to that site, pump commands sent that are invalid (ex: bad xsum) will shut down the pump
//EX uint8_t pumpCommand[10] = {0x10, 0x02, 0x0C, 0x01, 0x00, 0x64, 0x00, 0x83, 0x10, 0x03}; //100% RPM
//EX uint8_t pumpCommand[10] = {0x10, 0x02, 0x0C, 0x01, 0x00, 0x50, 0x00, 0x6f, 0x10, 0x03}; //80% RPM
//EX uint8_t pumpCommand[10] = {0x10, 0x02, 0x0C, 0x01, 0x00, 0x2d, 0x00, 0x4c, 0x10, 0x03}; //45% RPM
uint8_t pumpCommand[10] = {0x10, 0x02, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x03}; //0% RPM, OFF initially

//ecostar pump responds with a status sequence when a pump command is sent to it. Pattern is as follows (13 bytes)
//uint8_t pumpStatus[13] = {0x10, 0x02, 0x00, 0x0c, 0x00, 0x00, rpm%, wattshi_bcd, wattslo_bcd, xsumh, xsuml, 0x10, 0x03}
uint8_t pumpStatus[13]; // buffer used to read pump status from serial port 1 and to check it
uint8_t latestPumpStatus[13];  // contains the latest successful read of the pump status
uint16_t pumpStatusXsum;
uint16_t InvalidPumpStatus = 0;

uint8_t pump_rpm_pct = 0x00;  // variable pushed in from the cloud to change rpm of the pump
unsigned long nextPumpRefresh = 0;
unsigned long timetoGetPumpStatus = 0;

int latestPumpWatts = 0;

//SYSTEM_MODE(SEMI_AUTOMATIC);  //Device runs without immediate connection

void setup()
{

	Serial.begin(9600);  // this serial port was used for debug only

	Serial1.blockOnOverrun(false);
	Serial1.begin(19200, SERIAL_8N2);  // 1 stop bit and 2 stop bits both seemed to work, I settled on 2

	Particle.function("rpm_pct", changePumpSpeed);
	Particle.variable("pmp_stat", Pump_Status);

}



void loop()


{
	int rx;  //receive buffer pointer & counter

  // Following is the code to send the pump a new rpm
	// First, the pump command 10 byte packet is built, only 2 bytes are changed for a new pump rpm.
  // Byte 5 of pump command contains the new pump rpm percentage,  calculation: rpm = pump_rpm_pct*100/3450
	// Byte 7 is low byte of checksum, byte 6 is the high byte but it will always be 00h for valid pump commands.
	// in this demo, pump_rpm_pct is a variable "pushed" into the photon through a Particle cloud function call
	// The Hayward Ecostar requires a pump command refresh about every second+ or so...or it shuts down.
	pumpCommand[5] = pump_rpm_pct;  // pump_rpm_pct is pushed in from the cloud in this demo
	pumpCommand[7] = pumpCommand[0] + pumpCommand[1] + pumpCommand[2] + pumpCommand[3] + pumpCommand[4] + pumpCommand[5];  //xsum

	if (nextPumpRefresh < millis()) //send command to ecostar and there after every .5 seconds (500ms) to keep pump operating
	{
			Serial1.write(pumpCommand, 10); // write the command to the serial1 port
			nextPumpRefresh = millis() + 500;  // setup the trigger for the next pump refresh time: .5 seconds later
			// setup the the trigger to get the pump status.  The pump responds to every command with a status.
			timetoGetPumpStatus = millis() + 50;  //my experiments show pump command to return status about 15ms...
	};


	// Following reads the pump status response from Serial1, it is NOT  a general serial read function.
	// My pool pump is the ONLY equipment connected to this serial port and so this code
	// looks ONLY for the status from the pump.
	// If an invalid pump status is obtained, it is thrown out and the code looks for the next one...a new
	// one comes every 1/2 second.  If one is "thrown out", an error count is incremented because I want to
	// see if (and how often) this condition occurs.
	// If a chlorinator (or other device) is added to the RS485 bus later, this code would HAVE to change

	if (timetoGetPumpStatus < millis())  // get the pump status
	{
		rx = 0;  // pump status byte pointer & counter

		if (Serial1.available() == 13 && Serial1.peek() == 0x10) // read pump status only if it starts right & has 13 bytes
		{
			pumpStatus[rx] = Serial1.read();
			pumpStatusXsum = pumpStatus[rx++];  // start the checksum for byte0-byte8

			while (rx < 13)  //read the next 12 bytes to fill in the pump status
 			{
				pumpStatus[rx] = Serial1.read();
				if (rx < 9) pumpStatusXsum = pumpStatusXsum + pumpStatus[rx];  // xsum remaining bytes of command
				rx++;
			}

			if (pumpStatusXsum == (pumpStatus[9] << 8) | pumpStatus[10])  // make sure the checksum matches
			{
				rx = 0;
				while (rx < 13) latestPumpStatus[rx++] = pumpStatus[rx];  // update the latest valid pump status received
				latestPumpWatts = ((pumpStatus[7] & 0xF0) >> 4) * 1000 + ((pumpStatus[7] & 0x0F ) * 100) +
				                  ((pumpStatus[8] & 0xF0) >> 4) * 10   +  (pumpStatus[8] & 0x0F );
				PrintHex83(pumpStatus, 13); // print the latest pump status in hex, via the cloud
			}
			else rx = 0; // fail condition...xsum did not match

		};

		if (rx == 0)  // failure to get valid pump status
		{
			while (Serial1.available() > 0) Serial1.read();  // empty the serial receive buffer if anything in it
			InvalidPumpStatus = InvalidPumpStatus + 1;  // error in pump status, log it
		};

		timetoGetPumpStatus = millis() + 500;  // get next pump status sometime AFTER the next pump command is sent

	};

}



// this function automatically gets called upon a matching POST request from the CLOUD
// The rpm for the ecostar can be changed from 20% Max (Max=3450) to 100% Max
// This function insures that the rpm sent from the CLOUD to the pump is either 0% (stop pump)
// or between 20%-100%.
int changePumpSpeed(String RPM_pct)
{
	if (RPM_pct.toInt() <= 100 && RPM_pct.toInt() >= 20) pump_rpm_pct = RPM_pct.toInt();
		else pump_rpm_pct = 0;
}


// I found this routine on an arduino site...written by Rob Tillaart
// It converts an integer array to hexadecimal characters.  It can then be sent to a Serial
// port or up to the cloud for debug.  Great for looking at serial port transmissions and
// receptions in hex.
// The only line I added was the last, which sends the data to the cloud via a Particle cloud variable
void PrintHex83(uint8_t *data, uint8_t length) // converts 8-bit data to printable hex - Rob Tillaart
{
 char tmp[length*2+1];
 byte first ;
 int j=0;
 for (uint8_t i=0; i<length; i++)
 {
   first = (data[i] >> 4) | 48;
   if (first > 57) tmp[j] = first + (byte)39;
   else tmp[j] = first ;
   j++;

   first = (data[i] & 0x0F) | 48;
   if (first > 57) tmp[j] = first + (byte)39;
   else tmp[j] = first;
   j++;
 }
 tmp[length*2] = 0;
 // Serial.println(tmp);  // could print the hex output here if wanted
 // This next line sends the pump status to the cloud along with some other stuff I was monitoring
 // Pump_Status is the string variable that can be moitored from the cloud
 Pump_Status = tmp + String(" ") + String(latestPumpWatts) + String(" ") + String(InvalidPumpStatus) + String(" ") + String(pumpStatusXsum);
}

This is awesome thanks for posting it. I’ll have to look through it and try to understand it. Perhaps I’ll order one of those jacks and play around with it.

Yes I have been making progress sometimes as fast as the slow boat can deliver parts hahaha I’m very excited about the ph and orp. I’ve been previously just running the stenner pumps on a timer from the pool photon. It will be nice to have a dedicated unit that can test and dispense. I’m also excited to get the low tank level notifications as I have ran them dry before.

Yeah I have moved on to hubitat from smartthings as it seems the roadmap for the future smartthings api is going to limit custom code makers and the community. I didn’t seem to like the direction and the constant changes and forced updates were continually breaking stuff. I kinda hated the idea of the cloud dependence of the platform. It wasn’t stable and would crash all the time. The particle cloud is stable but smartthings not so much… and it was so frustrating to have all your lighting automations fail cause an update they forced upon you in the cloud or cause the cloud went out or my internet service. Too many variables and super frustrating to not be able to control your lights etc. With hubitat everything is local which makes way more sense to me for home automation. Automated lights are way faster reliable and my data is private. Makes way more sense to not have four or five jumps back and forth from the Internet just to turn on a light. Everything is way faster and more reliable. The platform itself is set up for makers and custom code. I’ve definitely been happy with hubitat for the few weeks that I have had it.

I know you are a member of troublefreepool so I am sure you have considered their concerns about orp measurement and if/how it can be applied to free chlorine measurement. I’m loving the clarity of my water since I moved to the TFP method.

Have you looked into Home Assistant? I literally bought a raspberry pi yesterday with the intention of trying it out. From my limited research it seems to me more powerful than Hubitat?

@Jonpcar yeah I’m a member and I love how clean and clear my pool is since using their methodology. I have read some of the concerns with orp as a form of control. My hope is something is better than nothing. I haven’t decided how I want to attack it yet but it sounds like I can use the ph readings to directly control acid. As far as chlorine I may have to keep my timer based dispensing which stayed pretty spot on all summer I might add since my chlorine use is pretty constant. And just use orp as a notification tool to check if something doesn’t seem right. And manually adjust the times after a physical test. This could save me from like the time my stenner pump wasn’t actually pumping chlorine do to a failed pump tube. The pool went green. Another possible method is to measure orp at a specific time of day when suns off the pool etc for some consistency and use that as my testing point to determine dispensing since I’ve heard that orp measure,ents vary as cya binds to chlorine with the sun shine. I’m not sure. I feel like the first step to this is to keep my current method and graph and plot orp to see if I can find a pattern or consistent correlation. I will say though this morning it was reading 650 I manually turned on the chlorine pump for 20minutes and it’s reading 800 now. So fwiw it’s definitely telling me something useful.

I have looked into home assistant. Unless stuff has changed it seemed at the time I looked at it their zigbee support was lacking and it seemed more difficult to work with needing configuration files for everything etc. hubitat seemed like an easier transition for me since it works on groovy code like smartthings. But I’m definitely interested in what you find with hass and I have several pis and experience working with them.

I have a Wink 2 Hub, so the Zigbee isn’t an issue for me. I’ve never been much of a fan of the aesthetics of ST, and Hubitat seems similar, plus I’ve never really taken to the Groovy stuff but I can totally understand the move if you’re more invested in the ST platform than I am. I would love to leverage all the work you’ve done and you’re much more able than I, so was hoping you would go the HA route lol.

@bscuderi13! So Brennon, you had no trouble with the photon driving the 5v relays…I probably worry too much but it seems like there are lots of cautions regarding these 5v relays and the photon/raspberry pi. I’m am getting close to hooking up for the valve control.

Still have not looked in to any “front end” yet. I’m kinda saving that for later since my son-in-law is visiting for Xmas and he is very good with that sort of thing…at least I hope so. It seems like options mentioned are hubitat, wink 2, how about the new google home hub? I know zero about this aspect of the project yet so even my assumptions about those may be wrong.

I’m not sure what you mean by lots of cautions driving the relays from the photon and pis. I’m assuming the people that are reporting issues are trying to Use large industrial SSRs and such and the 3.3 volt signal that comes from pi and photon pins isn’t enough for the relay to detect the signal and change states. I have several raspberry pi projects and several photons that drive several different brands of relays with zero issues… just make sure your relay is a logic level relay ie triggerable by a 3.3 volt signal. Keywords they usually say “for arduino” or “for raspberry pi” etc… but perhaps this isn’t what you mean and you could show me the posts you are talking about… as far as the five volts part goes you can power the relay boards directly from the vin and grnd pins on the photon which outputs 4.8v when you plug the photon into usb, and that’s exactly what I did on the main pool valve controller. You would have to look at the photon specs and as long as all the 5volt stuff you are powering from that pin doesn’t exceed that max MV value you would be fine. To give you an idea I had hooked to mine the 8 channel relay board and the extra single channel and it was fine. That said I would logically never drive all those channels at the same time and I’m not entirely sure it would have held up if I did since I havent ever done the math… Haha but since I never ever would have all Channels on at once it has been fine. I only wired it this way just because that was the easiest way for me to hook this all up using just jumper wires… I may go back now sometime in the future and wire something more permenant but it kinda falls in the realm of its not broke don’t fix it lol. You could also always just run the relay boards from a separate power supply or a pigtail in the power supply before it powers the photon, which is exactly what I did with the new chemical controller. This is obviously the safest and smartest way to power them since you aren’t demanding power from the photons pins. So basically in a nutshell since on the solderable breadboard it has power rails I send my 5v from my power supply to that and then all my sensors and relay boards are powered from that rail and I power the photon from the vin and grnd pin coming from that rail as well instead of from usb. I hope that helps. And as far as the smart controllers I would say steer well clear of wink. I never myself used wink but I am a moderator on a smartthings fb group and we get tons of members that have fled from wink all the time. My good buddy being one of them. Wink just doesn’t have the compatibility or user control that smartthings does. I don’t know much about the google one you mentioned. I will say of all of them that smartthings is the greatest balance between compatibility, usability, and power that exists out there. I inevitably got frustrated with the changes that are being made on the smartthings backend and with the full on cloud dependence this was causing huge reliability issue for me. I still do think smartthings is a great platform and an excellent start but for me hubitat is a way better fit since it runs on the local network without the need of the cloud. There are lots of other options like hass on a raspberry pi. HASS seems to have great features, a big community, and a well developed platform. Although I haven’t personally dabbled with hass it seems to me that it’s largest pitfall is user friendliness as far as setup and adminitrarion goes. You have to edit configuration files in JSON for everything and it just seems like a PITA to me… but perhaps I should try it out one day.

You should give Hassio a try. I just started with it, but I find it no more difficult than ST to get up and running. There are also some cool dashboard functionality (one being based on your floor plan), which I plan to try next. You should see some of the GUI’s users have come up with using this add-on. If it works as expected, I might make a “floor plan” of my pool/equipment to use as the front end.

HA also has pretty robust integration with Smarthings, so it’s not all or nothing. I actually have ST and a Wink2 hub, which I plan to keep up and running for the time being, as each has things that the other(s) can’t quite do.

1 Like

I really should…I probably should have at least tried it before I committed to hubitat. Seems like trying new things is tough though cause you have to unpair repair devices lose their automations the mesh routes etc just to try something else out. Seems a downfall of the smart home mesh setup is it becomes a pain to unpair pair and try something different especially once you get solid automations in place… I will say that I did try openhab for a minute on a raspberry pi and ultimately I found that platform super confusing.

brennon, thanks for the detailed reply. “Caution” may have been too strong of word and I believe I was getting mixed up with my RS485 chip selection (for the serial port pump control) where there WAS discussion about possibly damaging the photon inputs/outputs with 5V+ applied.

For the relays, there are actually very few (Amazon prime, a few more on the slow boat) that claim 3v capability. I guess my concern was trying to use the “5V” relays. For the 5V relays with optocouplers, there are quite a few discussions that driving the relay with a 3v raspberry pi (or photon in our case) may or may NOT work, the trigger is the concern. A few posts recommend using an NPN transistor (with some resistors) as the actual pulldown to the relay input which in turn is driven by the photon. Here was an answer on a sainsmart relay in which they recommended level shifters.

Question:

does it run also on 3.3V? ie a spark.io chip that runs on 3.3V and can only tolerate 3.3V on the output.

Answer:

No this unit is 5 VDC only, if you want to drive it with 3.3 VDC signals then use a CD4050 IC Chip which can take 3.3VDC in and change the level output to 5 VDC for driving the relay board inputs. Just set VCC on the CD4050 to 5 VDC and it should work.

The documentation for one of the relays I have also says that some users experience difficulties in driving it from a raspberry pi. http://www.handsontec.com/dataspecs/2Ch-relay.pdf

From that pdf
It is sometimes possible to use this relay boards with 3.3V signals, if the JD-VCC (Relay Power) is provided from a +5V supply and the VCC to JD-VCC jumper is removed. That 5V relay supply could be totally isolated from the 3.3V device, or have a common ground if opto-isolation is not needed. If used with isolated 3.3V signals, VCC (To the input of the opto-isolator, next to the IN pins) should be connected to the 3.3V device’s +3.3V supply.

NOTE: Some Raspberry-Pi users have found that some relays are reliable and others do not actuate sometimes. It may be necessary to change the value of R1 from 1000 ohms to something like 220 ohms, or supply +5V to the VCC connection.

In any case, I bit the bullet and hooked my relays up as they described and they seem to be working just fine. I have ordered a couple 8-channel relays (5V ones with the same optocoupler setup and voltage isolation jumper) that I will try when I get them. The 8-channel one is the version I hope to end up with when all is said and done.

Thanks again!

Hey guys, keep talking about the front end. I only want to work on ONE if I can help it and want to know the best one before then, haha. It seems now that I have to add Hassio as an option.

I bought some pressure transducers yesterday and tested them out yesterday, they seem like they will do what I want. My goal is to have a complete barebones pool control system running only on the Photon with the “hooks” to allow the manual changes for temporary overrides (lights on, waterfall on, burst of chlorine added, pump on/off, etc). At that point I will start looking closer at how to use those hooks in the front end, and expand the capability for alerts. I hope this approach won’t leave me high and dry when I finally get to that point.

I ultimately went with a 24 channel relay built to host the photon. Not as cheap as the chinese versions for sure, but I figured for a one off, worth the additional cost.

As for front end, if the pool controller is all you’re looking to manage, you could also look at creating a purpose built app (android or iOS), which is the route I originally planned. However after dabbling in Hassio for a bit, I’m thinking that might be easier and work as well if not better.

@bscuderi13 runs circles around me on all this stuff though, so take my opinion with a grain of salt. I’ve never really gotten on with all the device handlers and smart apps, tiles, etc with ST. Not to mention I’m a sucker for a good user interface.

@Jonpcar I’ve seen the opposite… tons of choices of brands and sizes of workable relays on amazon. Every relay board I have purchased worked fine. No added over complicated wiring hookups to the photon. They are all different brands and sizes of octoisplated low level Trigger 5 volt relays and are very inexpensive. The 5 volts just is the amount of power required to power the relay board not necessarily what’s required to trigger it on the signal pin. The 5v never even has to touch the photon with the 5volts if you didn’t want it to. You can power the relay board separately with 5v if you wanted so that 5v doesn’t have to touch the photon at all and so there is no risk of blowing a pin. The only thing the photon would have to do is send a 3.3 volt Trigger to trigger the relay. Most all the relay boards I’ve seen on amazon are designed to be powered with 5v and triggerd logic level ie 3.3 volts by arduino pi etc.

However, on a side note if you look at the photons specs all but I think one or two pins are 5v tollerant in the digital mode anyways as long as you don’t enable the onboard resistor with this line of code for example pinMode(INPUT_PULLUP); or pulldown. I have a couple of sensors and things that send a 5v signal and I have those hooked directly to the photon as well I just always looked at the documentation to make sure I wasn’t hooking it to one of those non 5v tolerant pins. It looks like articles you linked are think the spark which was the predecessor to the photon had way different specs as far an I’m not sure there was 5v availableto power the board or 5v tollerant pins for sensors. This may be why you saw some of that… im not sure as I don’t know much about the spark but remember reading something like that was one of the inprovements when they came out with the photon.

As far as the 8 channel relay you linked on amazon that should work just fine without any modifications. I’d venture whoever answered the customer questions didn’t know what they were talking about. Just anyone can answer those questions so it’s not always very accurate. In fact when I click on the product right on the manufacturers description it says…

Oh and here’s the particle data sheet reference… did your serial thing use the dac pin?

@Exit2studios
That relay is a monster! I’m not sure what I would do with all of those relay outputs but I might be getting a little bit of relay envy hahaha

Brennon, thanks again. You have made me much more comfortable with the relays I ordered. I’ll try them out this weekend. The RS485 device hooks up to the TX & RX pins so as you pointed out, I would be ok there as well. It’s been so long since I’ve done anything like this that I suppose I am just being over careful, haha.

Lance, that board IS a monster. You must have a spa, heater, solar, multiple pumps, water features…haha! It’s making me a bit worried that I am not planning enough ahead. My system is simple but here is what I am planning.

Sensors (9 total, will possibly have to mux 2-1 to Photon)
3 PSI (1 filter, 1 pump, 1 cleaning manifold)
2 Temp (ambient, pool)
2 Level detectors (acid tank, chlorine tank, I’m thinking about etape for these)
PH probe (haven’t looked into this requirement at all)
ORP probe (depends on how Brennon’s works out, haha)
2 Stenner Pump 120v ac monitors to make sure relays aren’t stuck (now way behind on pins)…I keep finding new things as I am coding.

Output Controls (9+)
1 pump 220 turnoff (for reset and/or emergency)
2 valve controls (my system IS simple)
Acid Injector
Chlorine Injector
Pool Light
Waterfall
Landscape Lights (1+)
Aerator (forgot this one…the main reason I started messing around with my pool again in summer)

Since I am using the RX/TX for pump control, that uses up all my Photon pins (actually I am one short to mux in 1 analog channel)…and now 1 short for the outputs due to the aerator.

Am I missing anything…my pool water level is mechanical but works fine. No heater, currently no SWG chlorinator, no spa, unfortunately NO control over my suction drain/skimmer, possible future solar but that’s up in the air.

I’m getting close to deploying my barebones solution. I will have to take out my gold line controller to make room for it in my electrical panel. My barebones system will basically replace all the functionality that I have currently (pool timer, rpm control, valve control, chlorine injection, light/waterfall countdowns) but will allow for many additional scheduled operations (current plan is 64).

Still haven’t decided what front end to use but I figure I have until next summer to decide that.

I haven’t added any status items yet (warnings, current settings, etc). I’ll probably do that a little at a time. Brennon, you think the etape will work INSIDE the chlorine tank? Edit: a note to Milone got the following response:

Thanks for your interest in the eTape liquid level sensor. Yes, our chemical eTape sensor with the Teflon (FEP) jacket is compatible with chlorine and muriatic acid. The top portion of the sensor can be mounted inside the tank but should not be submerged.
Christopher J. Milone
Milone Technologies, Inc.

So here’s my question. I’m a little new to smarthings code logic with updating tiles and devices with on/off refresh etc.

I’m attempting this with raspberry pi vs photon.
My questions as follows:
What causes the tile to update its status from off to on when it’s pressed? Does the particle.publish handle that by telling smarthings to update the tile?

If I’m doing this with raspberry my thinking is that I could possibly leverage ifttt maker channel to update a virtual switch in smarthings or run a piston in Webcore.

What I’m wondering is if I call raspberry which sets a gpio pin to “High” I can then call a Webcore piston from there to refresh or turn a virtual switch on or off. But does that I mean I need a virtual switch for every pool tile in the app? Just trying to piece this all together.

I don’t think I would put the etape in barebones chlorine or acid. Seems like asking for it to die haha I kinda interpreted that to mean chlorine if the pool environment itself it would hold up to. For that it has been working excellent. But only one way to find out I guess. But they are kind of expensive sensors to just kill off I would think haha.