@sonnenschein
Nach dem mal wieder etwas Zeit war habe ich mein Zie weiterverfolgt.
Aktuell läuft das Script. Alle 5 Minuten werden die Daten vom Datenlogger geholt und in den Datenpunkt geschrieben.
Als nächstes werde ich vom statischen Zeitaum des cron auf Astrozeitpunkt Sonnenauf/untergang umbauen.
//Script zum auslesen von Photovoltaikdaten aus meinem STL200 Datenlogger von Solarworld
// Cron gesteuert das Script ausführen. Am besten nur zwischen Sonnenauf/untergang
//Die function STL200Lesen ist der gesamte Code um Daten zu lesen und in den Datenpunkt iobroker zu schreiben
//DP ist der Pfad zu den Objekten
// unterstützt aus dem iobroker Forum Paul53 und AlCalzone
schedule('*/5 7-21 * * *', STL200Lesen);//alle 5 Minuten täglich function STL200Lesen aufrufen
function STL200Lesen() { //hier beginnt der Programmcode zum Lesen Schreiben
//var Marker = new Date;//Info zu Testzwecken ins logfile schreiben
//log("==========" + Marker + "============= STL200 gelesen und in P geschrieben=====================");//Info im Logfile
const DP = 'javascript.0.Photovoltaik.';//der Pfad zu den Datenpunkten
let P=0;//Variable mit Null besetzen
//Datenpunkt anlegen Nur einmalig laufen lassen
//createState(DP+'PAktuell', 0, {unit: 'W'}); //DP erstellen Erster Wert 0
const request = require('request');//jetzt die Daten aus dem Logger holen
var url = 'http://10.100.100.11/min_cur.js' // ich bin die gewünschte Information die geparst werden soll
const regex = /var Pac=(-?\d?\d+)/gm; // das ist mein regex aus dem online regex check
// jetzt wird mit request die Seite abgefragt und eine Fehlerauswertung gemacht. Wenn kein error dann geht es zum body parsen.
//Die Antwort vom request steht in der variablen body
request(url, function (error, response, body) {
if (error) {
console.error('error: ' + error);
} else {
// body auswerten (parsen, regex, whatever...)
// das parsen ist aus dem javascript codegenerator regex online
let m;//Var für das regex parsen intern
while ((m = regex.exec(body)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
if (groupIndex=1) {
P = match // im match stehen die aktuelle parser ergebnisse ich brauch aber nur das der gruppe 1
}
});
console.log('Aktueller Wert in Variable P : ' + P);//ich möchte sehen was das im body rauskommt.
}
}
//});
// Ab hier das Schreiben in die Datenpunkte
let Testwert = 101 // testwert
let PAktuell = "PAktuell"; //Gewünschter Datenpunkt Nummer 1
//Datenpunkte erstellen und definieren
createState(DP + PAktuell, 0, false, {
name: "PAktuell",
desc: "Hier wird die aktuell Leistung in Watt gespeichert",
type: "number",
role: "value",
unit: "Watt"
});
setState(DP+PAktuell,P,true);// DP der Pfad PAktuell das Objekt (Datenpunkt) und P der Inhalt
//Datenpunkt abfragen zu Testzwecken
//var INFO = getState(DP+PAktuell);// testzwecke
//console.log(INFO); // Abfrage anzeigen in der console z Testzwecken
});
};