Added suport for in valve
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
</div>
|
||||
{{/with}}
|
||||
<div>Otpusni ventil: {{pretty_valve state.out_valve }}</div>
|
||||
<div>Ulazni ventil/pumpa: {{pretty_valve state.in_valve }}</div>
|
||||
<div>Zadnja komunikacija: {{ last_communication_time }}</div>
|
||||
{{/with}}
|
||||
<div>
|
||||
|
||||
@@ -9,7 +9,7 @@ Api.addRoute('sensorData', {
|
||||
authRequired: false
|
||||
}, {
|
||||
post: function() {
|
||||
console.log("Body params", this.bodyParams);
|
||||
reactToSensorData(this.bodyParams);
|
||||
SensorData.insert({
|
||||
temperatureValue: parseFloat(this.bodyParams.temperatureValue),
|
||||
humidityValue: parseFloat(this.bodyParams.humidityValue),
|
||||
@@ -23,16 +23,34 @@ Api.addRoute('sensorData', {
|
||||
});
|
||||
|
||||
|
||||
function reactToSensorData(nextSensorReading) {
|
||||
var controllerId = nextSensorReading.controllerId;
|
||||
var state = stateOrDefault(controllerId).state;
|
||||
var shouldStartPumping = (parseInt(nextSensorReading.tankFull) === 0 && ( !state.in_valve || state.in_valve === 'closed' ) );
|
||||
|
||||
if(shouldStartPumping) {
|
||||
ControllerState.update({
|
||||
controller_id: controllerId
|
||||
}, {
|
||||
'$set': {
|
||||
'state.in_valve': 'opening',
|
||||
'time': new Date(),
|
||||
'set_by': 'server'
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Api.addRoute('state/:id', {
|
||||
authRequired: false
|
||||
}, {
|
||||
post: function() {
|
||||
console.log("Body params", this.bodyParams);
|
||||
return ControllerState.update({
|
||||
controller_id: this.urlParams.id
|
||||
}, {
|
||||
'$set': {
|
||||
'state.out_valve': this.bodyParams.out_valve,
|
||||
'state.in_valve': this.bodyParams.in_valve,
|
||||
'time': new Date(),
|
||||
'set_by': 'client'
|
||||
}
|
||||
@@ -43,6 +61,7 @@ Api.addRoute('state/:id', {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function stateOrDefault(id) {
|
||||
var stateEntry = ControllerState.findOne({
|
||||
controller_id: id,
|
||||
@@ -52,13 +71,13 @@ function stateOrDefault(id) {
|
||||
stateEntry = ControllerState.insert({
|
||||
controller_id: id,
|
||||
state: {
|
||||
out_valve: 'closed'
|
||||
out_valve: 'closed',
|
||||
in_valve: 'closed'
|
||||
},
|
||||
time: new Date(),
|
||||
config: {
|
||||
draining_period_amount: 5,
|
||||
draining_period_unit: 'minutes'
|
||||
|
||||
},
|
||||
set_by: 'server'
|
||||
});
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
GPIO_PIN_DHT = 4 # BCM
|
||||
SENSORDATA_URL = 'http://tfm.meteor.com/api/v1.0/sensorData'
|
||||
GPIO_PIN_TANKFULL = 20 # BCM
|
||||
GPIO_PIN_VALVE = 21 # BCM
|
||||
GPIO_PIN_OUT_VALVE = 21 # BCM
|
||||
GPIO_PIN_IN_VALVE = 18 # BCM
|
||||
API_BASE_URL = 'http://tfm.meteor.com/api/v1.0'
|
||||
CONTROLLER_ID = '120' # every controller must have a different one
|
||||
STATE_FILE = '/var/run/controller_state'
|
||||
|
||||
@@ -7,29 +7,50 @@ class Changer(object):
|
||||
self.local_state = local_state
|
||||
self.remote_state = remote_state
|
||||
GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme
|
||||
GPIO.setup(config.GPIO_PIN_VALVE, GPIO.OUT)
|
||||
GPIO.setup(config.GPIO_PIN_OUT_VALVE, GPIO.OUT)
|
||||
GPIO.setup(config.GPIO_PIN_IN_VALVE, GPIO.OUT)
|
||||
|
||||
self.states = {
|
||||
'opening': self.open_valve,
|
||||
'closing': self.close_valve,
|
||||
'open': self.open_valve,
|
||||
'closed': self.close_valve
|
||||
self.out_valve_states = {
|
||||
'opening': self.open_out_valve,
|
||||
'closing': self.close_out_valve,
|
||||
'open': self.open_out_valve,
|
||||
'closed': self.close_out_valve
|
||||
}
|
||||
|
||||
self.in_valve_states = {
|
||||
'opening': self.open_in_valve,
|
||||
'closing': self.close_in_valve,
|
||||
'open': self.open_in_valve,
|
||||
'closed': self.close_in_valve
|
||||
}
|
||||
|
||||
def process_change(self):
|
||||
self.validate_states()
|
||||
change = self.states.get(self.remote_state['out_valve'], None )
|
||||
if change is not None:
|
||||
change()
|
||||
|
||||
out_valve_change = self.out_valve_states.get(self.remote_state['out_valve'], None )
|
||||
if out_valve_change is not None:
|
||||
out_valve_change()
|
||||
|
||||
in_valve_change = self.in_valve_states.get(self.remote_state['in_valve'], None )
|
||||
if in_valve_change is not None:
|
||||
in_valve_change()
|
||||
|
||||
return self.local_state
|
||||
|
||||
def open_valve(self):
|
||||
GPIO.output(config.GPIO_PIN_VALVE, GPIO.HIGH)
|
||||
def open_in_valve(self):
|
||||
GPIO.output(config.GPIO_PIN_IN_VALVE, GPIO.HIGH)
|
||||
self.local_state['in_valve'] = 'open'
|
||||
|
||||
def close_in_valve(self):
|
||||
GPIO.output(config.GPIO_PIN_IN_VALVE, GPIO.LOW)
|
||||
self.local_state['in_valve'] = 'closed'
|
||||
|
||||
def open_out_valve(self):
|
||||
GPIO.output(config.GPIO_PIN_OUT_VALVE, GPIO.HIGH)
|
||||
self.local_state['out_valve'] = 'open'
|
||||
|
||||
def close_valve(self):
|
||||
GPIO.output(config.GPIO_PIN_VALVE, GPIO.LOW)
|
||||
def close_out_valve(self):
|
||||
GPIO.output(config.GPIO_PIN_OUT_VALVE, GPIO.LOW)
|
||||
self.local_state['out_valve'] = 'closed'
|
||||
|
||||
def validate_states(self):
|
||||
|
||||
Reference in New Issue
Block a user