Created
November 24, 2017 20:38
-
-
Save Dionid/fb2e4fea26bcdb45ea38dc6e1117f64a to your computer and use it in GitHub Desktop.
Mongoose OS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (c) 2014-2017 Cesanta Software Limited | |
* All rights reserved | |
* | |
* This example demonstrates how to use mJS DHT library API | |
* to get data from DHTxx temperature and humidity sensors. | |
*/ | |
// Load Mongoose OS API | |
load('api_config.js'); | |
load('api_rpc.js'); | |
load('api_gpio.js'); | |
load('api_timer.js'); | |
load('api_dht.js'); | |
// Device Id | |
let deviceId = Cfg.get('app.devId'); | |
// GPIO | |
let DEC_BUTTON_PIN = Cfg.get('pins.DEC_BUTTON'); | |
let INC_BUTTON_PIN = Cfg.get('pins.INC_BUTTON'); | |
let POWER_BUTTON_PIN = Cfg.get('pins.POWER_BUTTON'); | |
let DHT_PIN = Cfg.get('pins.DHT'); | |
let FAN_PIN = Cfg.get('pins.FAN'); | |
let HEAT_PIN = Cfg.get('pins.HEAT'); | |
let HEAT_S_PIN = Cfg.get('pins.HEAT_S'); | |
let POWER_PIN = Cfg.get('pins.POWER'); | |
GPIO.set_mode(FAN_PIN, GPIO.MODE_OUTPUT); | |
GPIO.set_mode(HEAT_PIN, GPIO.MODE_OUTPUT); | |
GPIO.set_mode(HEAT_S_PIN, GPIO.MODE_OUTPUT); | |
GPIO.set_mode(POWER_PIN, GPIO.MODE_OUTPUT); | |
GPIO.write(HEAT_S_PIN, 0); | |
GPIO.write(HEAT_PIN, 0); | |
GPIO.write(FAN_PIN, 1); | |
GPIO.write(POWER_PIN, 1); | |
// Initialize DHT library | |
let dht = DHT.create(DHT_PIN, DHT.DHT11); | |
let mods = { | |
MODE_FAN: 1, | |
MODE_HEAT: 2, | |
MODE_HEAT_S: 3 | |
}; | |
let state = { | |
turnedOff: true, | |
mode: mods.MODE_FAN, | |
temp: 0, | |
hum: 0, | |
minTemp: 10, | |
maxTemp: 20, | |
minTempActions: [ | |
], | |
maxTempActions: [ | |
{ | |
method: deviceId + '.SetState', | |
args: { | |
turnedOff: false, | |
}, | |
local: true, | |
} | |
], | |
}; | |
function GetState() { | |
let t = dht.getTemp(); | |
let h = dht.getHumidity(); | |
if (isNaN(h) || isNaN(t)) { | |
print('Failed to read data from sensor'); | |
return; | |
} | |
state.temp = t; | |
state.hum = h; | |
return state; | |
} | |
RPC.addHandler(deviceId + '.IncrementMinTemp', function() { | |
state.minTemp += 1; | |
return true; | |
}); | |
RPC.addHandler(deviceId + '.DecrementMinTemp', function() { | |
state.minTemp -= 1; | |
return true; | |
}); | |
RPC.addHandler(deviceId + '.IncrementMaxTemp', function() { | |
print('IncrementMaxTemp'); | |
state.maxTemp += 1; | |
return true; | |
}); | |
RPC.addHandler(deviceId + '.DecrementMaxTemp', function() { | |
print('DecrementMaxTemp'); | |
state.maxTemp -= 1; | |
return true; | |
}); | |
function ChangeMode(mode) { | |
GPIO.write(HEAT_S_PIN, 0); | |
GPIO.write(HEAT_PIN, 0); | |
GPIO.write(FAN_PIN, 0); | |
if (mode === mods.MODE_HEAT_S) { | |
GPIO.write(HEAT_S_PIN, 1); | |
GPIO.write(HEAT_PIN, 1); | |
GPIO.write(FAN_PIN, 1); | |
} else if (mode === mods.MODE_HEAT) { | |
GPIO.write(HEAT_PIN, 1); | |
GPIO.write(FAN_PIN, 1); | |
} else if (mode === mods.MODE_FAN) { | |
GPIO.write(FAN_PIN, 1); | |
} | |
state.mode = mode; | |
} | |
function ChangeTurnedOn(turnedOff) { | |
GPIO.write(POWER_PIN, turnedOff); | |
state.turnedOff = turnedOff; | |
} | |
RPC.addHandler(deviceId + '.SetState', function(args) { | |
if (args.minTemp) { | |
state.minTemp = args.minTemp; | |
} | |
if (args.maxTemp) { | |
state.maxTemp = args.maxTemp; | |
} | |
if (args.turnedOff !== undefined) { | |
ChangeTurnedOn(args.turnedOff); | |
} | |
if (args.mode) { | |
print(args.mode); | |
ChangeMode(args.mode); | |
} | |
return GetState(); | |
}); | |
RPC.addHandler(deviceId + '.GetState', function() { | |
return GetState(); | |
}); | |
Timer.set(2000 /* milliseconds */, true /* repeat */, function() { | |
let curState = GetState(); | |
if (curState.temp > curState.maxTemp) { | |
// print('More:', curState.temp, '*C'); | |
} else if (curState.temp < curState.minTemp) { | |
// print('Less:', curState.temp, '*C'); | |
} | |
// print('Temperature:', curState.temp, '*C'); | |
// print('Humidity:', curState.hum, '%'); | |
}, null); | |
let ttt = RPC.call('', 'RPC.List', null, function(res) { | |
print(JSON.stringify(res)); | |
print(JSON.stringify(state)); | |
}, null); | |
print(ttt) | |
GPIO.set_button_handler(DEC_BUTTON_PIN, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() { | |
print('DEC_BUTTON!!!'); | |
// let test = RPC.call("", 'RPC.List', {}, function(res) { | |
// print(JSON.stringify(res)); | |
// print(JSON.stringify(state)); | |
// }, null); | |
let test = RPC.call('', deviceId + '.DecrementMaxTemp', {}, function(res, ud, er, ers) { | |
print(JSON.stringify(state)); | |
}, null); | |
print(test); | |
// RPC.call(RPC.LOCAL, deviceId + '.DecrementMaxTemp', {}, function(res, ud, er, ers) { | |
// print(JSON.stringify(state)); | |
// }, null); | |
}, null); | |
GPIO.set_button_handler(INC_BUTTON_PIN, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() { | |
print('INC_BUTTON'); | |
RPC.call('', deviceId + '.IncrementMaxTemp', {}, function() { | |
print(JSON.stringify(state)); | |
}, null); | |
}, null); | |
GPIO.set_button_handler(POWER_BUTTON_PIN, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() { | |
ChangeTurnedOn(!state.turnedOff); | |
print(JSON.stringify(state)); | |
}, null); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment