-> Hier kostenlos registrieren
Heyy
Meine Idee war es, eine eigene Website zu machen, welche dann die Werte einiger Variablen anzeigt und im besten falle live aktualisiert.
Dafür benutze ich HTML, JavaScript und Node.js, wobei Node.js neu für mich ist
Mit zwei buttons wollte ich die Verbindung zu OPC-UA aufbauen und auch wieder beenden.
Soweit so gut, die Werte werden auf meiner Website angezeigt, nur nicht live und die Buttons funktionieren nicht.
kann mir jemand helfen? Ich sitze hier schon Tage dran und komme nicht weiter, da ich mit Node.js nicht auf DOM zugrreifen kann..
Vielen dank schonmal im Voraus!
Meine Idee war es, eine eigene Website zu machen, welche dann die Werte einiger Variablen anzeigt und im besten falle live aktualisiert.
Dafür benutze ich HTML, JavaScript und Node.js, wobei Node.js neu für mich ist
Mit zwei buttons wollte ich die Verbindung zu OPC-UA aufbauen und auch wieder beenden.
Soweit so gut, die Werte werden auf meiner Website angezeigt, nur nicht live und die Buttons funktionieren nicht.
kann mir jemand helfen? Ich sitze hier schon Tage dran und komme nicht weiter, da ich mit Node.js nicht auf DOM zugrreifen kann..
Javascript:
const { OPCUAClient } = require("node-opcua");
const opcua = require("node-opcua");
let realValue;
let arrayValue;
let intValue;
let boolValue;
const cheerio = require('cheerio');
const fs = require('fs');
/*--Connect--Main--*/
async function connectToOPCUAServer() {
try {
const endpointUrl = "opc.tcp://172.20.3.211:4840"; // Serveradresse
const client = OPCUAClient.create({
end_point_must_exist: false,
});
await client.connect(endpointUrl);
console.log("Verbindung zum OPC UA Server hergestellt");
// Anmelden
const session = await client.createSession();
console.log("Sitzung erstellt");
await readData(session);
//await writeData(session);
await storeData();
// Abmelden und Verbindung trennen
await session.close();
console.log("Sitzung geschlossen");
await client.disconnect();
console.log("Verbindung zum OPC UA Server getrennt");
console.log("Vor dem Aufruf von updateHTML()");
await updateHTML();
console.log("Nach dem Aufruf von updateHTML()");
}
catch (err) {
console.error("Fehler beim Zugriff auf den OPC UA Server:", err);
}
}
/*--Werte lesen--*/
async function readData(session) {
const nodesToRead = [
{
nodeId: 'ns=3;s="DB_OPC".Real1',
attributeId: opcua.AttributeIds.Value,
},
{
nodeId: 'ns=3;s="DB_OPC".Array1',
attributeId: opcua.AttributeIds.Value,
},
{
nodeId: 'ns=3;s="DB_OPC".Int1',
attributeId: opcua.AttributeIds.Value,
};
{
nodeId: 'ns=3;s="DB_OPC".Bool1',
attributeId: opcua.AttributeIds.Value,
},
];
const readResult = await session.read(nodesToRead);
readResult.forEach((result, index) => {
const { value } = result;
console.log(
`Gelesener Wert für Node ${nodesToRead[index].nodeId}:`,
value.value
);
});
realValue = readResult[0].value.value;
arrayValue = readResult[1].value.value;
intValue = readResult[2].value.value;
boolValue = readResult[3].value.value;
console.log("Werte gespeichert");
}
/*--HTML--*/
async function updateHTML() {
// HTML-Datei laden
const htmlContent = fs.readFileSync("werte.html", "utf8").toString();
// Cheerio-Objekt erstellen
const $ = cheerio.load(htmlContent);
// Wert für Array-Wert aktualisieren
const arrayValueElement = $('#arrayValue');
const allNullValues = arrayValue.every((value) => value === 0);
if (arrayValue !== undefined) {
const arrayButton = $('#btnarray');
arrayValueElement.text(arrayValue.toString());
if (allNullValues) {
// Setze den Button rot, wenn alle Werte null sind
arrayButton.attr('style', 'background-color: red; color: white;');
} else {
// Setze den Button grün, wenn mindestens ein Wert im Array nicht null ist
arrayButton.attr('style', 'background-color: green; color: white;');
}
} else {
arrayValueElement.text('');
console.log("array not defined");
// Stil des Array-Buttons zurücksetzen, wenn arrayValue nicht definiert ist
const arrayButton = $('#btnarray');
arrayButton.attr('style', 'background-color: gray; color: white;');
}
const realValueElement = $('#realValue');
if (realValue !== undefined) {
const realButton = $('#btnreal');
realValueElement.text(realValue.toString());
if (realValue <= 100) {
realButton.attr('style', 'background-color: red; color: white;');
} else {
realButton.attr('style', 'background-color: green; color: white;');
}
} else {
boolValueElement.text('');
realButton.attr('style', 'background-color: gray; color: white;')
}
// Wert für Integer-Wert aktualisieren
const intValueElement = $('#intValue');
if (intValue !== undefined) {
console.log("int if");
const intButton = $('#btnint');
intValueElement.text(intValue.toString());
if (intValue >= 100) {
intButton.attr('style', 'background-color: red; color: white;');
} else {
intButton.attr('style', 'background-color: green; color: white;');
}
} else {
intValueElement.text('');
console.log("int not defined");
const intButton = $('#btnint');
intButton.attr('style', 'background-color: gray; color: white;');
}
const boolValueElement = $('#boolValue');
if (boolValue !== undefined) {
console.log("bool if");
// Stil des Buttons basierend auf boolValue festlegen
const boolButton = $('#btnbool');
boolValueElement.text(boolValue.toString())
if (boolValue) {
boolButton.attr('style', 'background-color: red; color: white;');
} else {
boolButton.attr('style', 'background-color: green; color: white;');
}
} else {
boolValueElement.text('');
console.log("else");
// Stil des Buttons zurücksetzen, wenn boolValue nicht definiert ist
const boolButton = $('#btnbool');
boolButton.attr('style', 'background-color: gray; color: white;');
}
const updatedHtml = $.html();
// Speichern der aktualisierten HTML-Datei
fs.writeFileSync("werte.html", updatedHtml, "utf8");
console.log("HTML-Datei erfolgreich aktualisiert");
}
connectToOPCUAServer();
Vielen dank schonmal im Voraus!