diff --git a/app/client/sensorData.html b/app/client/sensorData.html index 1d9b4fc..4d0b6ff 100644 --- a/app/client/sensorData.html +++ b/app/client/sensorData.html @@ -1,3 +1,3 @@ diff --git a/app/server/api.js b/app/server/api.js index 9ade1da..49016c7 100644 --- a/app/server/api.js +++ b/app/server/api.js @@ -13,6 +13,11 @@ Api.addRoute('sensorData', { SensorData.insert({ temperatureValue: parseFloat(this.bodyParams.temperatureValue), humidityValue: parseFloat(this.bodyParams.humidityValue), + tankLevel0: this.bodyParams.tankLevel0, + tankLevel1: this.bodyParams.tankLevel1, + tankLevel2: this.bodyParams.tankLevel2, + tankLevel3: this.bodyParams.tankLevel3, + tankLevel4: this.bodyParams.tankLevel4, tankFull: this.bodyParams.tankFull, owner: this.bodyParams.owner, controllerId: this.bodyParams.controllerId, @@ -24,12 +29,10 @@ Api.addRoute('sensorData', { function reactToSensorData(nextSensorReading) { + console.log("reacting to sensor"); var controllerId = nextSensorReading.controllerId; var state = stateOrDefault(controllerId).state; - console.log(nextSensorReading , state); - var shouldStartPumping = (!state.in_valve || state.in_valve === 'closed' || state.in_valve === 'closing') && ((parseInt(nextSensorReading.tankFull) === 0) && (state.out_valve === 'closed' || state.out_valve === 'closing')); - - var shouldStopPumping = (state.in_valve === 'open' || state.in_valve === 'opening') && (parseInt(nextSensorReading.tankFull) === 1 || state.out_valve === 'open' || state.out_valve === 'opening'); + var shouldStartPumping = (!state.in_valve || state.in_valve === 'closed') && ((parseInt(nextSensorReading.tankFull) === 0) && (state.out_valve === 'closed' || state.out_valve === 'closing')); if (shouldStartPumping) { ControllerState.update({ @@ -37,12 +40,14 @@ function reactToSensorData(nextSensorReading) { }, { '$set': { 'state.in_valve': 'opening', - 'significantEvents.lastInValveOpen': new Date(), 'time': new Date(), 'set_by': 'server' } }); - } else if (shouldStopPumping) { + } + var shouldStopPumping = (state.in_valve === 'open' || state.in_valve === 'opening') && (parseInt(nextSensorReading.tankFull) === 1 || state.out_valve === 'open' || state.out_valve === 'opening'); + + if (shouldStopPumping) { ControllerState.update({ controller_id: controllerId }, { @@ -91,7 +96,7 @@ function stateOrDefault(id) { }, time: new Date(), config: { - draining_period_amount: 60, + draining_period_amount: 40, draining_period_unit: 'minutes' }, set_by: 'server' @@ -102,6 +107,3 @@ function stateOrDefault(id) { }); return stateEntry; } - -Meteor.sharedFunctions = Meteor.sharedFunctions || {}; -Meteor.sharedFunctions.reactToSensorData = reactToSensorData; diff --git a/app/server/startup.js b/app/server/startup.js index f36bb70..b80d947 100644 --- a/app/server/startup.js +++ b/app/server/startup.js @@ -4,10 +4,32 @@ if (Meteor.isServer) { SyncedCron.start(); }); + // Global API configuration var Api = new Restivus({ useDefaultAuth: true, prettyJson: true }); + Api.addRoute('sensorData', { + authRequired: false + }, { + post: function() { + SensorData.insert({ + temperatureValue: parseFloat(this.bodyParams.temperatureValue), + humidityValue: parseFloat(this.bodyParams.humidityValue), + tankLevel0: this.bodyParams.tankLevel0, + tankLevel1: this.bodyParams.tankLevel1, + tankLevel2: this.bodyParams.tankLevel2, + tankLevel3: this.bodyParams.tankLevel3, + tankLevel4: this.bodyParams.tankLevel4, + tankFull: this.bodyParams.tankFull, + owner: this.bodyParams.owner, + created_at: new Date() + }); + return []; + } + }); + + } diff --git a/controller/config/copy__init__.py.example b/controller/config/copy__init__.py.example index e018b03..32b5625 100644 --- a/controller/config/copy__init__.py.example +++ b/controller/config/copy__init__.py.example @@ -2,6 +2,11 @@ GPIO_PIN_DHT = 4 # BCM SENSORDATA_URL = 'http://tfm.meteor.com/api/v1.0/sensorData' +GPIO_PIN_TANKLEVEL0 = 5 # BCM +GPIO_PIN_TANKLEVEL1 = 6 # BCM +GPIO_PIN_TANKLEVEL2 = 13 # BCM +GPIO_PIN_TANKLEVEL3 = 19 # BCM +GPIO_PIN_TANKLEVEL4 = 26 # BCM GPIO_PIN_TANKFULL = 20 # BCM GPIO_PIN_OUT_VALVE = 21 # BCM GPIO_PIN_IN_VALVE = 18 # BCM diff --git a/controller/sensors.py b/controller/sensors.py index a058153..46c5df3 100644 --- a/controller/sensors.py +++ b/controller/sensors.py @@ -5,14 +5,30 @@ import Adafruit_DHT import config import RPi.GPIO as GPIO -# Try to read the state of GPIO_PIN_TANKFULL +# Try to read the state of GPIO_PIN_TANKLEVELx and GPIO_PIN_TANKFULL GPIO.setmode(GPIO.BCM) +GPIO.setup(config.GPIO_PIN_TANKLEVEL0, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) +GPIO.setup(config.GPIO_PIN_TANKLEVEL1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) +GPIO.setup(config.GPIO_PIN_TANKLEVEL2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) +GPIO.setup(config.GPIO_PIN_TANKLEVEL3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) +GPIO.setup(config.GPIO_PIN_TANKLEVEL4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(config.GPIO_PIN_TANKFULL, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # tank sensor has inverse logic - 0 when it is full 1 when it is not # so we are inverting its value here +tankLevel0 = (GPIO.input(config.GPIO_PIN_TANKLEVEL0) == GPIO.LOW) +tankLevel1 = (GPIO.input(config.GPIO_PIN_TANKLEVEL1) == GPIO.LOW) +tankLevel2 = (GPIO.input(config.GPIO_PIN_TANKLEVEL2) == GPIO.LOW) +tankLevel3 = (GPIO.input(config.GPIO_PIN_TANKLEVEL3) == GPIO.LOW) +tankLevel4 = (GPIO.input(config.GPIO_PIN_TANKLEVEL4) == GPIO.LOW) tankFull = (GPIO.input(config.GPIO_PIN_TANKFULL) == GPIO.LOW) + GPIO.cleanup() +print 'Bacva Level0: {}'.format(tankLevel0) +print 'Bacva Level1: {}'.format(tankLevel1) +print 'Bacva Level2: {}'.format(tankLevel2) +print 'Bacva Level3: {}'.format(tankLevel3) +print 'Bacva Level4: {}'.format(tankLevel4) print 'Bacva puna: {}'.format(tankFull) # Go on to DHT @@ -32,7 +48,7 @@ humidity, temperature = Adafruit_DHT.read_retry(SENSOR_TYPE, config.GPIO_PIN_DHT # guarantee the timing of calls to read the sensor). # If this happens try again! if temperature is not None and humidity is not None: - response = requests.post(config.SENSORDATA_URL, json={"owner": owner, "temperatureValue": temperature, "humidityValue":humidity, "tankFull": "1" if tankFull else "0", + response = requests.post(config.SENSORDATA_URL, json={"owner": owner, "temperatureValue": temperature, "humidityValue":humidity, "tankLevel0": "1" if tankLevel0 else "0","tankLevel1": "1" if tankLevel1 else "0","tankLevel2": "1" if tankLevel2 else "0","tankLevel3": "1" if tankLevel3 else "0", "tankLevel4": "1" if tankLevel4 else "0", "tankFull": "1" if tankFull else "0", "controllerId": controller_id }) print 'Temp={0:0.1f}*C'.format(temperature)