fixed problems with AC protocol,
nodejs backend improved
This commit is contained in:
54
ac.js
54
ac.js
@@ -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()
|
||||||
{
|
{
|
||||||
@@ -184,6 +177,7 @@ 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) {
|
||||||
@@ -216,14 +210,14 @@ 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
41
dht.js
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user