Antwort
Jul 21, 2024 - 21:33
Hallo! Frage mich wie ich darüber gestolpert oder gepoltert bin. Nachzulesen hier
https://mediola.answerbase.com/488082...
Zu deinem Problem. Da fetch
in Node.js 8.11.4 nicht nativ unterstützt wird, solltest du stattdessen request
oder httpget verwenden.
Ich habe dein Script auf die Schnell umgeschrieben, ich hoffe ich habe mich nicht vertippt. Bitte teste und passe ansonsten entsprechend an.
const http = require('http');
function httpGet(url) {
return new Promise((resolve, reject) => {
const req = http.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
if (res.statusCode >= 200 && res.statusCode < 300) {
try {
const parsedData = JSON.parse(data);
resolve(parsedData);
} catch (e) {
reject(e);
}
} else {
reject(new Error(`HTTP status code ${res.statusCode}`));
}
});
});
req.on('error', (e) => {
reject(e);
});
req.end();
});
}
httpGet('http://192.168.xx.xxx/info?general&connector&grid&network')
.then((data) => {
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_general_serial_number",
{
"value": "rawStringValue",
"ext": data.general.serial_number
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_general_model_type",
{
"value": "rawStringValue",
"ext": data.general.model_type
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_general_device_name",
{
"value": "rawStringValue",
"ext": data.general.device_name
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_general_rated_current",
{
"value": "rawFloatValue",
"ext": data.general.rated_current,
"scale": "0.1"
},
function(err) {
err && console.error(err.message);
}
);
// Schnittstellen BUG max_current
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_connector_max_current",
{
"value": "rawFloatValue",
"ext": data.connector.max_current,
"scale": "0.1"
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_connector_phase_count",
{
"value": "rawFloatValue",
"ext": data.connector.phase_count,
"scale": "0.1"
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_connector_type",
{
"value": "rawStringValue",
"ext": data.connector.type
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_connector_serial",
{
"value": "rawStringValue",
"ext": data.connector.serial
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_grid_phases",
{
"value": "rawStringValue",
"ext": data.grid.phases
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_grid_voltage",
{
"value": "rawFloatValue",
"ext": data.grid.voltage,
"scale": "0.1"
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_network_ip_address",
{
"value": "rawStringValue",
"ext": data.network.ip_address
},
function(err) {
err && console.error(err.message);
}
);
executeDeviceCommand(
"_progs&sysvars",
"gw2_wb_network_rssi",
{
"value": "rawFloatValue",
"ext": data.network.rssi,
"scale": "0.1"
},
function(err) {
err && console.error(err.message);
}
);
})
.catch(function(error) {
console.log(error);
});
Von
Puuuh, Wahnsinn !!!! Kleinigkeit musste ich noch anpassen wegen eines Fehlers auf der Seite des Herstellers. Aber lief tadellos und die weiteren unter einer anderen Adresse laufen ebenfalls. Das Skript lässt sich starten und alle 10 Sekunden automatisch starten. Vielen lieben Dank für die Unterstützung !
Leuchtet mir nur nicht ein, wieso es dann bei manueller Ausführung funktioniert. Sollte doch seitens Mediola dann doch auch unterbunden werden. Es war bis zum Erfolg jedenfalls ein ziemlich frustrierender Tag.
Was mich noch beschäftigt, ob es in ireiner Weise ein Problem sein könnte, wenn das Script alle 10. Sek. läuft und alle 10 Sek. recht viele Var auf der CCU3 zur gleichen Zeit beschreibt?
Von
Lies dir mal den Link durch aus meiner ersten Antwort. Da geht es um genau dein Thema ;-)
Performance sehe ich jetzt nicht als Problem. Auch die Anzahl der Variablen nicht.
Belastet hat das ganze System etwas mehr.
Hinterfrage deine Anforderung ob du tatsächlich alle 10 Sekunden neue Werte benötigst.
Solltest du die Werte für eine Visualisierung benötigen, empfehle ich dir mit eine Datenbank zu arbeiten. Bsp Influx
Neuen Kommentar hinzufügen