mirror of
https://gitlab.com/wirelos/sprocket-lib.git
synced 2025-12-16 05:24:30 +01:00
Resolve "OTA"
This commit is contained in:
116
tools/ota.js
Normal file
116
tools/ota.js
Normal file
@@ -0,0 +1,116 @@
|
||||
// Mesh msg type = 7
|
||||
// OTA paket types: START = 0, DATA = 1, END = 3
|
||||
const fs = require('fs');
|
||||
const crypto = require('crypto');
|
||||
const mqtt = require('mqtt');
|
||||
|
||||
let filePath = '../.pioenvs/mesh/firmware.bin';
|
||||
let broker = 'mqtt://192.168.1.2:1883';
|
||||
|
||||
const readFile = filePath => new Promise((resolve, reject) => {
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
if (err) reject(err);
|
||||
else resolve(data);
|
||||
});
|
||||
});
|
||||
|
||||
const checksumFile = (hashName, path) => new Promise((resolve, reject) => {
|
||||
let hash = crypto.createHash(hashName);
|
||||
let stream = fs.createReadStream(path);
|
||||
stream.on('error', err => reject(err));
|
||||
stream.on('data', chunk => hash.update(chunk));
|
||||
stream.on('end', () => resolve(hash.digest('hex')));
|
||||
});
|
||||
|
||||
const upload = async path => {
|
||||
let content = await readFile(path);
|
||||
let md5 = await checksumFile('MD5', path);
|
||||
let b64Content = content.toString('base64');
|
||||
console.log(`MD5 Hash: ${md5}`);
|
||||
//console.log(b64Content);
|
||||
//mqttClient(md5, b64Content);
|
||||
};
|
||||
|
||||
const initializeUpdateMessage = (fromNode, toNode, md5Hash) => {
|
||||
return {
|
||||
dest: toNode,
|
||||
from: fromNode,
|
||||
type: 7,
|
||||
msg: {
|
||||
type: 0,
|
||||
md5: md5Hash
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const firmwareUpdateMessage = (fromNode, toNode, firmware) => {
|
||||
return {
|
||||
dest: toNode,
|
||||
from: fromNode,
|
||||
type: 7,
|
||||
msg: {
|
||||
type: 1,
|
||||
data: firmware,
|
||||
length: firmware.length
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const mqttClient = (md5, data) => {
|
||||
|
||||
var client = mqtt.connect(broker);
|
||||
let target = 3895627464;
|
||||
// button thingy=> dest: "757307466",
|
||||
let initMsg = {
|
||||
dest: target,
|
||||
from: 1,
|
||||
type: 7,
|
||||
msg: {
|
||||
type: 0,
|
||||
md5: md5
|
||||
}
|
||||
};
|
||||
let dataMsg = {
|
||||
dest: target,
|
||||
from: 1,
|
||||
type: 7,
|
||||
msg: {
|
||||
type: 1,
|
||||
data: data,
|
||||
length: data.length
|
||||
}
|
||||
};
|
||||
let sm = {
|
||||
OTA_INIT: {
|
||||
FAILED: console.log,
|
||||
DONE: OTA_DATA.WRITE
|
||||
},
|
||||
OTA_DATA: {
|
||||
WRITE: console.log,
|
||||
DONE: OTA_FIN.RESTART,
|
||||
FAILED: console.log
|
||||
},
|
||||
OTA_FIN: {
|
||||
RESTART: console.log
|
||||
}
|
||||
};
|
||||
|
||||
client.on('connect', function () {
|
||||
client.subscribe('/up/wirelos/gateway');
|
||||
client.publish('/down/wirelos', JSON.stringify(initMsg));
|
||||
})
|
||||
|
||||
client.on('message', function (topic, message) {
|
||||
// message is Buffer
|
||||
console.log(message.toString());
|
||||
let obj = JSON.parse(message.toString());
|
||||
sm[obj.type][obj.state](obj);
|
||||
//if(JSON.parse(message.toString()).type == 'OTA_INIT'){
|
||||
// client.publish('/down/wirelos', JSON.stringify(dataMsg));
|
||||
//}
|
||||
client.end();
|
||||
})
|
||||
return client;
|
||||
};
|
||||
|
||||
upload(filePath);
|
||||
Reference in New Issue
Block a user