fixed problems with AC protocol,

nodejs backend improved
This commit is contained in:
d-popov
2020-04-25 01:34:59 +03:00
parent 608344f876
commit 223844a35d
2 changed files with 63 additions and 44 deletions

62
ac.js
View File

@@ -11,16 +11,9 @@ var INT8_MAX = 127;
var UINT8_MAX = 255; var UINT8_MAX = 255;
var UINT8_MAX2 = 0xFF; var UINT8_MAX2 = 0xFF;
var AcModeSize = 4; // Nr. of Bits
const AcMode = Object.freeze({"Heat":1, "Dry":2, "Cool":3, "Fan":7, "Auto":8}) const AcMode = Object.freeze({"Heat":1, "Dry":2, "Cool":3, "Fan":7, "Auto":8})
// var AcMode {
// Heat = 1,
// Dry = 2,
// Cool = 3,
// FanHi = 7,
// Auto = 8
// }
// Constants // Constants
var AcTimes = var AcTimes =
{ {
@@ -35,16 +28,14 @@ var AcTimes =
// var AcTolerance = 5; // Extra Percentage for the rest. // var AcTolerance = 5; // Extra Percentage for the rest.
}; };
var AcModeSize = 4; // Nr. of Bits
var AcFanSize = 3; // Nr. of Bits. Mask = 0b00000111 var AcFanSize = 3; // Nr. of Bits. Mask = 0b00000111
var AcFanAuto = 0b000; var AcFan = Object.freeze({
var AcFanLow = 0b010; "Auto":0b000,
var AcFanMed = 0b011; "Low":0b010,
var AcFanHigh = 0b101; "Med":0b011,
"High":0b101});
//5
var AcHalfDegreeOffset = 5; var AcHalfDegreeOffset = 5;
var AcTempMax = 31.0; var AcTempMax = 31.0;
var AcTempMin = 16.0; var AcTempMin = 16.0;
@@ -53,6 +44,7 @@ var AcPowerOffset = 2;
var AcBitEconoOffset = 7; var AcBitEconoOffset = 7;
var AcBitLightOffset = 6; var AcBitLightOffset = 6;
var AcBitHealthOffset = 4; var AcBitHealthOffset = 4;
//3
var AcBitSwingHOffset = 3; var AcBitSwingHOffset = 3;
var AcSwingVOffset = 3; // Mask 0b00111000 var AcSwingVOffset = 3; // Mask 0b00111000
var AcSwingVSize = 3; // Nr. of bits. var AcSwingVSize = 3; // Nr. of bits.
@@ -67,7 +59,7 @@ var state;
state = Buffer.from(initialState.slice()); state = Buffer.from(initialState.slice());
//remote_state = initialState.slice(); //remote_state = initialState.slice();
var b = setBits(state[0],0,5,0x0); //var b = setBits(state[0],0,5,0x0);
// b = setBits(remote_state[0],0,6,0x0); // b = setBits(remote_state[0],0,6,0x0);
// b = setBits(remote_state[0],0,6,0x0); // b = setBits(remote_state[0],0,6,0x0);
// b = setBits(remote_state[0],0,7,0x0); // b = setBits(remote_state[0],0,7,0x0);
@@ -82,17 +74,14 @@ var b = setBits(state[0],0,5,0x0);
console.log("" + state.toString('hex'));
setTemp(24);
// console.log("" + state.toString('hex')); // console.log("" + state.toString('hex'));
setTemp(22);
setMode(AcMode.Heat); setMode(AcMode.Heat);
// console.log("" + state.toString('hex'));
setPower(true); setPower(true);
// console.log("" + state.toString('hex')); setFan(AcFan.Med);check();
setFan(AcFanMed);check();
console.log("" + state.toString('hex')); console.log("" + state.toString('hex'));
var rawTime = "38000,"+GenerateTimingString(); var rawTime = "38000,"+GenerateTimingString();
console.log(rawTime); // console.log(rawTime);
// const request = require('request'); // const request = require('request');
@@ -109,6 +98,10 @@ console.log(rawTime);
// } // }
// } // }
// ); // );
function GetState()
{
return state.toString('hex').toUpperCase();
}
function GenerateTimingString() function GenerateTimingString()
{ {
@@ -182,8 +175,9 @@ function setBits(data, offset, nbits, val) {
function setPower( on) { function setPower(on) {
state[5] = setBit(state[5], AcPowerOffset, on); state[5] = setBit(state[5], AcPowerOffset, on);
state[12] = setBit(state[12], 7, !on);
} }
function setMode(mode) { function setMode(mode) {
@@ -214,16 +208,16 @@ function setTemp(celsius) {
} }
function setFan( speed) { function setFan(speed) {
switch (speed) { switch (speed) {
case AcFanAuto: case AcFan.Auto:
case AcFanLow: case AcFan.Low:
case AcFanMed: case AcFan.Med:
case AcFanHigh: case AcFan.High:
state[8] = setBits(state[8], kLowNibble, AcFanSize, speed); state[8] = setBits(state[8], kLowNibble, AcFanSize, speed);
break; break;
default: default:
setFan(AcFanAuto); setFan(AcFan.Auto);
} }
} }
function setEcono(on) { function setEcono(on) {
@@ -274,10 +268,12 @@ var AcControl = {
GetCommand: function(){ GetCommand: function(){
check(); check();
console.log("GetCommand:" + state.toString('hex')); console.log("GetCommand:" + state.toString('hex'));
return "38000,"+GenerateTimingString(); return GenerateTimingString();
}, },
GetState:GetState(),
}; };
module.exports.Tlc112 = AcControl; module.exports.Tlc112 = AcControl;
module.exports.Mode = AcMode; module.exports.Mode = AcMode;
module.exports.FanSpeed = AcFan;

41
dht.js
View File

@@ -121,7 +121,7 @@ app.use(helmet());
//app.use(bodyParser.text()); //app.use(bodyParser.text());
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public')) app.use(express.static('public'));
// enabling CORS for all requests // enabling CORS for all requests
app.use(cors()); app.use(cors());
//Authentication ++ //Authentication ++
@@ -175,6 +175,7 @@ app.get('/accontrol', ensureLoggedIn, function(req, res){
}); });
var ac = require('./ac.js'); var ac = require('./ac.js');
app.post('/accontrol', ensureLoggedIn, function(req, res){ app.post('/accontrol', ensureLoggedIn, function(req, res){
var model = { model: {user: req.user, data: req.body} }; var model = { model: {user: req.user, data: req.body} };
console.log("power:"+ req.body.power); console.log("power:"+ req.body.power);
@@ -251,25 +252,45 @@ app.post('/accontrol', ensureLoggedIn, function(req, res){
const { parse } = require('querystring'); const { parse } = require('querystring');
app.post('/dht/ping', (req, res) => { (async (res) => { app.post('/dht/ping', (req, res) => { (async (res) => {
try { try {
console.log("HEADERS:" + req.headers); res.sendStatus(200); console.log("HEADERS:" + req.headers);
res.sendStatus(200);
} catch (error) { } catch (error) {
console.log("PING Error:" + error); res.sendStatus(500); console.log("PING Error:" + error);
res.sendStatus(500);
} })(res); } })(res);
}); });
var moment = require('moment'); var moment = require('moment');
app.use('/ir', bodyParser.text(), function(rq, rs) { app.use('/setup', bodyParser.text(), function(req, res) {
let resp = JSON.stringify(req.body);
console.log(Jresp);
console.log("/setup> Device is online:" + req.body.IP);
res.setHeader('Content-Type', 'text/plain');
//res.write('you posted:\n');
res.write(resp);
let body = '';
req.on('data', chunk => {
console.log("d>"+chunk);
body += chunk.toString();
});
req.on('end', () => {
console.log("ended>"+body);
var ob = parse(body);
console.log(ob);
res.end('ok');
});
});
app.use('/ir', bodyParser.text(), function(rq, rs) {
console.log(""); console.log("");
console.log(""); console.log("");
console.log(""); console.log("");
console.log(""); console.log("/ir>:"+rq.method );
console.log("IR request:"+rq.method );
if(rq.method == "GET") if(rq.method == "GET")
{ {
var cmd = rq.param('command'); var cmd = rq.param('command');
console.log("GET CMD:"+cmd ); // console.log("GET CMD:"+cmd );
switch(cmd) switch(cmd)
{ {
case 'ping': case 'ping':
@@ -291,7 +312,7 @@ app.use('/ir', bodyParser.text(), function(rq, rs) {
body += chunk.toString(); body += chunk.toString();
}); });
rq.on('end', () => { rq.on('end', () => {
console.log(">"+body); console.log("POSTED IR DATA>"+body);
var ob = parse(body); var ob = parse(body);
console.log(ob); console.log(ob);
rs.end('ok'); rs.end('ok');
@@ -302,7 +323,7 @@ app.use('/ir', bodyParser.text(), function(rq, rs) {
app.get('/dht', (req, res) => { (async (res) => { app.get('/dht', (req, res) => { (async (res) => {
try { try {
const response = await got('http://192.168.1.126/json') const response = await got('http://192.168.1.126/json');
res.send(response.body); res.send(response.body);
} catch (error) { } catch (error) {
console.log("DHT Error:" + error); //..response.body); console.log("DHT Error:" + error); //..response.body);
@@ -405,6 +426,7 @@ cron.schedule(' */30 * * * *', () => {//cron.schedule('*/5 * * * * *', () =>
async function StoreSensorReadingsAsync() async function StoreSensorReadingsAsync()
{ {
console.log("StoreSensorReadingsAsync");
try { try {
await new Promise(function(resolve, reject) { await new Promise(function(resolve, reject) {
request('http://192.168.1.126/json', { json: true }, (err, res, body) => { request('http://192.168.1.126/json', { json: true }, (err, res, body) => {
@@ -435,6 +457,7 @@ async function StoreSensorReadingsAsync()
function StoreSensorReadings() function StoreSensorReadings()
{ {
console.log("StoreSensorReadings");
(async () => { (async () => {
try { try {
const dht = await got('http://192.168.1.126/json') const dht = await got('http://192.168.1.126/json')