From 223844a35dc7938584dcf843b54753ee40209516 Mon Sep 17 00:00:00 2001 From: d-popov Date: Sat, 25 Apr 2020 01:34:59 +0300 Subject: [PATCH] fixed problems with AC protocol, nodejs backend improved --- ac.js | 64 +++++++++++++++++++++++++++------------------------------- dht.js | 43 ++++++++++++++++++++++++++++++--------- 2 files changed, 63 insertions(+), 44 deletions(-) diff --git a/ac.js b/ac.js index 87b150d..6916463 100644 --- a/ac.js +++ b/ac.js @@ -11,16 +11,9 @@ var INT8_MAX = 127; var UINT8_MAX = 255; var UINT8_MAX2 = 0xFF; +var AcModeSize = 4; // Nr. of Bits 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 var AcTimes = { @@ -35,16 +28,14 @@ var AcTimes = // var AcTolerance = 5; // Extra Percentage for the rest. }; - - -var AcModeSize = 4; // Nr. of Bits - var AcFanSize = 3; // Nr. of Bits. Mask = 0b00000111 -var AcFanAuto = 0b000; -var AcFanLow = 0b010; -var AcFanMed = 0b011; -var AcFanHigh = 0b101; +var AcFan = Object.freeze({ + "Auto":0b000, + "Low":0b010, + "Med":0b011, + "High":0b101}); +//5 var AcHalfDegreeOffset = 5; var AcTempMax = 31.0; var AcTempMin = 16.0; @@ -53,6 +44,7 @@ var AcPowerOffset = 2; var AcBitEconoOffset = 7; var AcBitLightOffset = 6; var AcBitHealthOffset = 4; +//3 var AcBitSwingHOffset = 3; var AcSwingVOffset = 3; // Mask 0b00111000 var AcSwingVSize = 3; // Nr. of bits. @@ -67,7 +59,7 @@ var state; state = Buffer.from(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,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')); +setTemp(22); setMode(AcMode.Heat); -// console.log("" + state.toString('hex')); setPower(true); -// console.log("" + state.toString('hex')); -setFan(AcFanMed);check(); +setFan(AcFan.Med);check(); console.log("" + state.toString('hex')); -var rawTime = "38000,"+GenerateTimingString(); -console.log(rawTime); + var rawTime = "38000,"+GenerateTimingString(); +// console.log(rawTime); // const request = require('request'); @@ -109,6 +98,10 @@ console.log(rawTime); // } // } // ); +function GetState() +{ + return state.toString('hex').toUpperCase(); +} function GenerateTimingString() { @@ -182,8 +175,9 @@ function setBits(data, offset, nbits, val) { -function setPower( on) { - state[5] = setBit(state[5], AcPowerOffset, on); +function setPower(on) { + state[5] = setBit(state[5], AcPowerOffset, on); + state[12] = setBit(state[12], 7, !on); } function setMode(mode) { @@ -214,16 +208,16 @@ function setTemp(celsius) { } -function setFan( speed) { +function setFan(speed) { switch (speed) { - case AcFanAuto: - case AcFanLow: - case AcFanMed: - case AcFanHigh: + case AcFan.Auto: + case AcFan.Low: + case AcFan.Med: + case AcFan.High: state[8] = setBits(state[8], kLowNibble, AcFanSize, speed); break; default: - setFan(AcFanAuto); + setFan(AcFan.Auto); } } function setEcono(on) { @@ -274,10 +268,12 @@ var AcControl = { GetCommand: function(){ check(); console.log("GetCommand:" + state.toString('hex')); - return "38000,"+GenerateTimingString(); + return GenerateTimingString(); }, + GetState:GetState(), }; module.exports.Tlc112 = AcControl; -module.exports.Mode = AcMode; \ No newline at end of file +module.exports.Mode = AcMode; +module.exports.FanSpeed = AcFan; \ No newline at end of file diff --git a/dht.js b/dht.js index fbc78df..e8f7d5d 100644 --- a/dht.js +++ b/dht.js @@ -121,7 +121,7 @@ app.use(helmet()); //app.use(bodyParser.text()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); -app.use(express.static('public')) +app.use(express.static('public')); // enabling CORS for all requests app.use(cors()); //Authentication ++ @@ -175,6 +175,7 @@ app.get('/accontrol', ensureLoggedIn, function(req, res){ }); var ac = require('./ac.js'); + app.post('/accontrol', ensureLoggedIn, function(req, res){ var model = { model: {user: req.user, data: req.body} }; console.log("power:"+ req.body.power); @@ -251,25 +252,45 @@ app.post('/accontrol', ensureLoggedIn, function(req, res){ const { parse } = require('querystring'); app.post('/dht/ping', (req, res) => { (async (res) => { try { - console.log("HEADERS:" + req.headers); res.sendStatus(200); + console.log("HEADERS:" + req.headers); + res.sendStatus(200); } catch (error) { - console.log("PING Error:" + error); res.sendStatus(500); + console.log("PING Error:" + error); + res.sendStatus(500); } })(res); }); var moment = require('moment'); +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("IR request:"+rq.method ); + console.log("/ir>:"+rq.method ); if(rq.method == "GET") { var cmd = rq.param('command'); - console.log("GET CMD:"+cmd ); + // console.log("GET CMD:"+cmd ); switch(cmd) { case 'ping': @@ -291,7 +312,7 @@ app.use('/ir', bodyParser.text(), function(rq, rs) { body += chunk.toString(); }); rq.on('end', () => { - console.log(">"+body); + console.log("POSTED IR DATA>"+body); var ob = parse(body); console.log(ob); rs.end('ok'); @@ -302,7 +323,7 @@ app.use('/ir', bodyParser.text(), function(rq, rs) { app.get('/dht', (req, res) => { (async (res) => { 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); } catch (error) { console.log("DHT Error:" + error); //..response.body); @@ -405,6 +426,7 @@ cron.schedule(' */30 * * * *', () => {//cron.schedule('*/5 * * * * *', () => async function StoreSensorReadingsAsync() { + console.log("StoreSensorReadingsAsync"); try { await new Promise(function(resolve, reject) { request('http://192.168.1.126/json', { json: true }, (err, res, body) => { @@ -434,7 +456,8 @@ async function StoreSensorReadingsAsync() function StoreSensorReadings() -{ +{ + console.log("StoreSensorReadings"); (async () => { try { const dht = await got('http://192.168.1.126/json')