expanded the water levels to be used to configure pumping levels and moved the water draining period to config file

This commit is contained in:
2016-06-09 20:07:38 +02:00
parent 5c1f1629e7
commit 4872f4a910
5 changed files with 48 additions and 6 deletions

View File

@@ -46,7 +46,15 @@ Template.state.helpers({
var sensor = last_sensor_reading();
var stateObject = controller_state();
if (sensor) {
if (parseInt(sensor.tankFull) === 0 && stateObject.state.in_valve === 'open' && stateObject.state.out_valve === 'closed') return "/images/barrellFillingUp.png";
var startPumpingLevelReached;
if (sensor.startPumpingAt == 'TANKLEVEL0') startPumpingLevelReached = (parseInt(sensor.tankLevel0) === 0)
else if (sensor.startPumpingAt == 'TANKLEVEL1') startPumpingLevelReached = (parseInt(sensor.tankLevel1) === 0)
else if (sensor.startPumpingAt == 'TANKLEVEL2') startPumpingLevelReached = (parseInt(sensor.tankLevel2) === 0)
else if (sensor.startPumpingAt == 'TANKLEVEL3') startPumpingLevelReached = (parseInt(sensor.tankLevel3) === 0)
else if (sensor.startPumpingAt == 'TANKLEVEL4') startPumpingLevelReached = (parseInt(sensor.tankLevel4) === 0)
else startPumpingLevelReached = true;
if (parseInt(sensor.tankFull) === 0 && startPumpingLevelReached && stateObject.state.in_valve === 'open' && stateObject.state.out_valve === 'closed') return "/images/barrellFillingUp.png";
else if (parseInt(sensor.tankFull) === 1 && (stateObject.state.out_valve === 'closed')) return "/images/barrellFull.png";
else if (parseInt(sensor.tankFull) === 1 && (stateObject.state.out_valve === 'opening')) return "/images/barrellStartWateringFull.png";
else if (parseInt(sensor.tankFull) === 1 && (stateObject.state.out_valve === 'open')) return "/images/barrellWateringFull.png";

View File

@@ -19,6 +19,10 @@ Api.addRoute('sensorData', {
tankLevel3: this.bodyParams.tankLevel3,
tankLevel4: this.bodyParams.tankLevel4,
tankFull: this.bodyParams.tankFull,
startPumpingAt: this.bodyParams.startPumpingAt,
stopPumpingAt: this.bodyParams.stopPumpingAt,
drainingPeriodUnit: parseInt(this.bodyParams.drainingPeriodUnit),
drainingPeriodAmount: this.bodyParams.drainingPeriodAmount,
owner: this.bodyParams.owner,
controllerId: this.bodyParams.controllerId,
created_at: new Date()
@@ -32,7 +36,16 @@ function reactToSensorData(nextSensorReading) {
console.log("reacting to sensor");
var controllerId = nextSensorReading.controllerId;
var state = stateOrDefault(controllerId).state;
var shouldStartPumping = (!state.in_valve || state.in_valve === 'closed') && ((parseInt(nextSensorReading.tankFull) === 0) && (state.out_valve === 'closed' || state.out_valve === 'closing'));
var startPumpingLevelReached;
if (nextSensorReading.startPumpingAt == 'TANKLEVEL0') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel0) === 0)
else if (nextSensorReading.startPumpingAt == 'TANKLEVEL1') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel1) === 0)
else if (nextSensorReading.startPumpingAt == 'TANKLEVEL2') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel2) === 0)
else if (nextSensorReading.startPumpingAt == 'TANKLEVEL3') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel3) === 0)
else if (nextSensorReading.startPumpingAt == 'TANKLEVEL4') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel4) === 0)
else startPumpingLevelReached = true;
var shouldStartPumping = (!state.in_valve || state.in_valve === 'closed') && ((parseInt(nextSensorReading.tankFull) === 0) && startPumpingLevelReached && (state.out_valve === 'closed' || state.out_valve === 'closing'));
if (shouldStartPumping) {
ControllerState.update({
@@ -45,7 +58,16 @@ function reactToSensorData(nextSensorReading) {
}
});
}
var shouldStopPumping = (state.in_valve === 'open' || state.in_valve === 'opening') && (parseInt(nextSensorReading.tankFull) === 1 || state.out_valve === 'open' || state.out_valve === 'opening');
var stopPumpingLevelReached;
if (nextSensorReading.stopPumpingAt == 'TANKLEVEL0') stopPumpingLevelReached = (parseInt(nextSensorReading.tankLevel0) === 1)
else if (nextSensorReading.stopPumpingAt == 'TANKLEVEL1') stopPumpingLevelReached = (parseInt(nextSensorReading.tankLevel1) === 1)
else if (nextSensorReading.stopPumpingAt == 'TANKLEVEL2') stopPumpingLevelReached = (parseInt(nextSensorReading.tankLevel2) === 1)
else if (nextSensorReading.stopPumpingAt == 'TANKLEVEL3') stopPumpingLevelReached = (parseInt(nextSensorReading.tankLevel3) === 1)
else if (nextSensorReading.stopPumpingAt == 'TANKLEVEL4') stopPumpingLevelReached = (parseInt(nextSensorReading.tankLevel4) === 1)
else stopPumpingLevelReached = false;
var shouldStopPumping = (state.in_valve === 'open' || state.in_valve === 'opening') && (parseInt(nextSensorReading.tankFull) === 1 || stopPumpingLevelReached || state.out_valve === 'open' || state.out_valve === 'opening');
if (shouldStopPumping) {
ControllerState.update({
@@ -96,8 +118,8 @@ function stateOrDefault(id) {
},
time: new Date(),
config: {
draining_period_amount: 40,
draining_period_unit: 'minutes'
draining_period_amount: drainingPeriodAmount,
draining_period_unit: drainingPeriodUnit
},
set_by: 'server'
});

View File

@@ -24,6 +24,10 @@ if (Meteor.isServer) {
tankLevel3: this.bodyParams.tankLevel3,
tankLevel4: this.bodyParams.tankLevel4,
tankFull: this.bodyParams.tankFull,
startPumpingAt: this.bodyParams.startPumpingAt,
stopPumpingAt: this.bodyParams.stopPumpingAt,
drainingPeriodUnit: parseInt(this.bodyParams.drainingPeriodUnit),
drainingPeriodAmount: this.bodyParams.drainingPeriodAmount,
owner: this.bodyParams.owner,
created_at: new Date()
});

View File

@@ -10,6 +10,10 @@ GPIO_PIN_TANKLEVEL4 = 26 # BCM
GPIO_PIN_TANKFULL = 20 # BCM
GPIO_PIN_OUT_VALVE = 21 # BCM
GPIO_PIN_IN_VALVE = 18 # BCM
START_PUMPING_AT = 'TANKLEVEL4'
STOP_PUMPING_AT = 'TANKFULL'
DRAINING_PERIOD_AMOUNT = 40
DRAINING_PERIOD_UNIT = 'minutes'
API_BASE_URL = 'http://agrar.zoblak.com/api/v1.0'
CONTROLLER_ID = '120' # every controller must have a different one
STATE_FILE = '/var/run/controller_state'

View File

@@ -35,6 +35,10 @@ print 'Bacva puna: {}'.format(tankFull)
SENSOR_TYPE = Adafruit_DHT.DHT11
controller_id = config.CONTROLLER_ID
owner = "Controller: %s" % controller_id
drainingPeriodAmount = config.DRAINING_PERIOD_AMOUNT
drainingPeriodUnit = config.DRAINING_PERIOD_UNIT
startPumpingAt = config.START_PUMPING_AT
stopPumpingAt = config.STOP_PUMPING_AT
# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
@@ -49,7 +53,7 @@ humidity, temperature = Adafruit_DHT.read_retry(SENSOR_TYPE, config.GPIO_PIN_DHT
# 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, "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
"startPumpingAt": startPumpingAt,"stopPumpingAt": stopPumpingAt,"drainingPeriodAmount":drainingPeriodAmount,"drainingPeriodUnit":drainingPeriodUnit,"controllerId": controller_id
})
print 'Temp={0:0.1f}*C'.format(temperature)
print 'Humidity={0:0.1f}%'.format(humidity)