node-red-contrib-displayext-node
Version:
A node for software DisplayEXT
101 lines (86 loc) • 3.45 kB
JavaScript
const fs = require('fs');
const path = require('path');
module.exports = function(RED) {
function UpdateDataNode(config) {
RED.nodes.createNode(this, config);
var node = this;
// Spécifiez le chemin du fichier data.json
const dataFilePath = path.join(__dirname, '..', 'data.json');
// Fonction pour mettre à jour le fichier data.json
function updateData(payload) {
// Lire le fichier data.json
fs.readFile(dataFilePath, 'utf8', (err, data) => {
if (err) {
node.error('Erreur de lecture du fichier data.json: ' + err);
return;
}
// Parse les données JSON
let devices = JSON.parse(data);
// Recherche du device à mettre à jour
let deviceIndex = devices.findIndex(device => device.name === payload.oldName);
if (deviceIndex !== -1) {
// Si le device existe, le mettre à jour
devices[deviceIndex].name = payload.name;
devices[deviceIndex].ip = payload.ip;
devices[deviceIndex].port = payload.port;
} else {
// Si le device n'existe pas, on l'ajoute
devices.push({
name: payload.name,
ip: payload.ip,
port: payload.port
});
}
// Sauvegarder les modifications dans le fichier data.json
fs.writeFile(dataFilePath, JSON.stringify(devices, null, 2), 'utf8', (err) => {
if (err) {
node.error('Erreur d\'écriture dans le fichier data.json: ' + err);
return;
}
node.log('Le fichier data.json a été mis à jour');
});
});
}
// Fonction pour supprimer un device du fichier data.json
function deleteDevice(payload) {
// Lire le fichier data.json
fs.readFile(dataFilePath, 'utf8', (err, data) => {
if (err) {
node.error('Erreur de lecture du fichier data.json: ' + err);
return;
}
// Parse les données JSON
let devices = JSON.parse(data);
// Recherche et suppression du device basé sur le name
let deviceIndex = devices.findIndex(device => device.name === payload.deviceName);
if (deviceIndex !== -1) {
// Supprimer le device de la liste
devices.splice(deviceIndex, 1);
// Sauvegarder les modifications dans le fichier data.json
fs.writeFile(dataFilePath, JSON.stringify(devices, null, 2), 'utf8', (err) => {
if (err) {
node.error('Erreur d\'écriture dans le fichier data.json: ' + err);
return;
}
node.log('Le device a été supprimé et le fichier data.json mis à jour');
});
} else {
node.error('Device non trouvé pour suppression');
}
});
}
// Lors de la réception du message, on vérifie l'action et appelle la fonction appropriée
this.on('input', function(msg) {
if (msg.payload) {
if (msg.payload.action === 'updateDevice') {
updateData(msg.payload.device);
} else if (msg.payload.action === 'deleteDevice') {
deleteDevice(msg.payload);
} else {
node.error('Aucune action valide dans le message');
}
}
});
}
RED.nodes.registerType('update-data', UpdateDataNode);
};