node-red-contrib-displayext-node
Version:
A node for software DisplayEXT
81 lines (65 loc) • 2.72 kB
JavaScript
const fs = require('fs');
const path = require('path');
const WebSocket = require('ws'); // Bibliothèque WebSocket
module.exports = function(RED) {
function StatutDataNode(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 vérifier si le serveur WebSocket est ouvert
function checkWebSocketStatus(ip, port) {
return new Promise((resolve, reject) => {
const ws = new WebSocket(`ws://${ip}:${port}`);
// Si la connexion réussit, le serveur WebSocket est ouvert
ws.on('open', function() {
ws.close(); // Ferme la connexion après la vérification
resolve(true);
});
// Si la connexion échoue, le serveur WebSocket est fermé
ws.on('error', function() {
ws.close();
resolve(false);
});
});
}
// Fonction pour lire les devices depuis data.json et vérifier leur statut
function checkDevicesStatus() {
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);
// Vérifier le statut de chaque device
devices.forEach(async (device) => {
const status = await checkWebSocketStatus(device.ip, device.port);
// Créer le payload avec le statut du serveur
const payload = {
name: device.name,
status: status ? 'Ouvert' : 'Fermé',
id: `${device.name}-${device.ip}`, // L'ID du voyant
color: status ? 'green' : 'red' // Couleur en fonction de l'état
};
// Envoi du message avec l'état du serveur WebSocket
node.send({ payload: payload });
// Mise à jour du voyant (exemple dans l'interface web, peut être personnalisé)
const updatePayload = {
id: payload.id,
color: payload.color // Mettre à jour la couleur du voyant
};
// Envoi d'un message pour mettre à jour le DOM
node.send({ payload: updatePayload });
});
});
}
// Exécuter la vérification toutes les 5 secondes
setInterval(() => {
checkDevicesStatus();
}, 5000); // Vérification toutes les 5 secondes
// Vérifier immédiatement au démarrage
checkDevicesStatus();
}
RED.nodes.registerType('statut-data', StatutDataNode);
};