UNPKG

node-red-contrib-displayext-node

Version:

A node for software DisplayEXT

81 lines (65 loc) 2.72 kB
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); };