Why are we doing this?
ST = sensors.getTempC(Soil_Temp);
We have already read the sensors.
sensors.requestTemperaturesByAddress(Soil_Temp); // get temps so we can control relays //1.03
Couldn't the code be?
if (Soil_Temp <= Soil_temp_on)
The reason for the question is that the senor reading and reaction is right looking at the Soil_Temp in the serial monitor.