   Particle.variable("pressure", &pressure, DOUBLE);
   Particle.variable("humidity", &humidity, DOUBLE);
   Particle.variable("soil1", &soil1, INT);
+  Particle.variable("soil2", &soil2, INT);
+  Particle.variable("soil3", &soil3, INT);
 }
 
 void loop() {
-    int sensorStatus = 0;
-
     // read sensor data
     if (lastMeasurement > MEASUREMENT_RATE) {
       int bmeSensorStatus = readBMESensor();
       delay(200);
       int soil1SensorStatus = readSoilSensor(soilSensor1, soil1);
+      delay(200);
+      int soil2SensorStatus = readSoilSensor(soilSensor2, soil2);
+      delay(200);
+      int soil3SensorStatus = readSoilSensor(soilSensor3, soil3);
 
       // calc overall sensor status
-      sensorStatus = bmeSensorStatus; // TODO
+      currentSensorStatus = (bmeSensorStatus << 6) + (soil1SensorStatus << 4) +
+        (soil2SensorStatus << 2) + soil3SensorStatus;
 
-      if (sensorStatus >= 0) {
+      if (currentSensorStatus >= 0) {
           lastMeasurement = 0;
-          postToParticle(sensorStatus); // always publish event
+          postToParticle();
           dumpSerial();
       }
     }
 
-    // update cloud
-    if (lastPost > POST_RATE || sensorStatus > 0) {
-      while (postToPhant(sensorStatus) <= 0) { // publish to phant
+    // update cloud on timer or sensor data changes
+    if (lastPost > POST_RATE || currentSensorStatus != lastSensorStatus) {
+      while (postToPhant() <= 0) { // publish to phant
         Serial.println("Phant post failed. Trying again.");
 				// Delay 1s, so we don't flood the server. Little delay's allow the Photon time
 				// to communicate with the Cloud.


  Serial.print("Soil 1 = ");
  Serial.println(soil1);
}

}

// read soil sensor data
int readSoilSensor(int soilSensor, int &soilValue) {
    digitalWrite(led, HIGH);
    digitalWrite(soilPower, HIGH); //turn sensor power on
    delay(10); // give some time to settle
    soilValue = analogRead(soilSensor);
    digitalWrite(soilPower, LOW); //turn sensor power off
    delay(190);
    digitalWrite(led, LOW);

    if (soilValue < soildThresholdLow) {
      return 1; // indicate soil is to low
    } else if (soilValue > soildThresholdHigh) {
      return 2; // indicate soil is to high
    } else {
      return 0; // indicate normal reading
    }
    return 0;
}

void dumpSerial() {
