Skip to content

Instantly share code, notes, and snippets.

@Dionid
Created November 24, 2017 20:38
Show Gist options
  • Save Dionid/fb2e4fea26bcdb45ea38dc6e1117f64a to your computer and use it in GitHub Desktop.
Save Dionid/fb2e4fea26bcdb45ea38dc6e1117f64a to your computer and use it in GitHub Desktop.
Mongoose OS
/*
* 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