-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient-opcua-mqtt.js
74 lines (59 loc) · 2.77 KB
/
client-opcua-mqtt.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const opcua = require("node-opcua");
const mqtt = require("mqtt");
const fs = require("fs");
const path = require("path");
require('dotenv').config(); // Cargar variables de entorno desde el archivo .env
// Crear un stream para escribir logs en un archivo
const logStream = fs.createWriteStream(path.join(__dirname, 'logs', 'app.log'), { flags: 'a' });
// Reemplazar console.log para escribir en el archivo de logs
console.log = function (message) {
logStream.write(new Date().toISOString() + ' - ' + message + '\n');
process.stdout.write(new Date().toISOString() + ' - ' + message + '\n');
};
// Leer los mappings desde el archivo JSON usando la ruta del archivo de mapeo desde .env
const mappingsFilePath = path.join(__dirname, process.env.MAPPINGS_FILE_PATH);
const mappings = JSON.parse(fs.readFileSync(mappingsFilePath, 'utf8'));
// URL del servidor OPC UA y del broker MQTT desde el archivo .env
const endpointUrl = process.env.OPCUA_ENDPOINT_URL;
const mqttBrokerUrl = process.env.MQTT_BROKER_URL;
async function main() {
try {
// Crear el cliente OPC UA
const client = opcua.OPCUAClient.create({ endpointMustExist: false });
// Conectar al servidor OPC UA
await client.connect(endpointUrl);
console.log("Cliente conectado al servidor OPC UA");
// Crear una sesión
const session = await client.createSession();
console.log("Sesión creada");
// Conectar al broker MQTT
const mqttClient = mqtt.connect(mqttBrokerUrl);
mqttClient.on('connect', () => {
console.log("Cliente MQTT conectado al broker");
});
// Leer las variables según los mapeos y enviar a MQTT
setInterval(async () => {
try {
const timestamp = new Date().toISOString();
const output = {};
for (const mapping of mappings) {
const dataValue = await session.read({ nodeId: mapping.opcua_id, attributeId: opcua.AttributeIds.Value });
output[mapping.ocb_id] = {
value: dataValue.value.value,
timestamp: timestamp
};
}
// Log de los datos que se van a enviar
console.log("Enviando los siguientes datos a MQTT:");
console.log(JSON.stringify(output, null, 2));
// Convertir output a JSON y enviar al broker MQTT
mqttClient.publish('opcua-data', JSON.stringify(output));
} catch (err) {
console.log("Error al leer variables:", err.message);
}
}, 1000); // Intervalo de lectura cada segundo
} catch (err) {
console.log("Error al conectar con el servidor OPC UA:", err.message);
}
}
main();