Trying to reduce the use of SRAM

You have a very complex system of progmem character arrays, the string table (also in progmem) and copying to a buffer. Why don't you just use the F() macro and leave the strings where they are used:

e.print(F("<h1><a href='/?valve=off'>Greenhouse Arduino</a></h1>"));

This way the character array stays in the progmem but is directly in the code where you use it and you don't have to copy it to a temporary buffer (saves some RAM additionally).

The biggest win you get is readability of your program.

Do you really need to set the style for every button? A style sheet would be a better solution.

Why don't you just use the F() macro...

I get this compiler error every time:
Greenhouse123:237: error: invalid conversion from 'const __FlashStringHelper*' to 'int'
Greenhouse123:237: error: initializing argument 1 of 'void ETHER_28J60::print(int)'

Do you really need to set the style for every button?

Good point! A simple button would make shorter strings. I'll fix it.

seanz2003:

Why don't you just use the F() macro...

I get this compiler error every time:
Greenhouse123:237: error: invalid conversion from 'const __FlashStringHelper*' to 'int'
Greenhouse123:237: error: initializing argument 1 of 'void ETHER_28J60::print(int)'

Unfortunately, class ETHER_28J60 does not inherit from class Print, which means that it can't directly print F() strings.