Hallo,
ich bin inzwischen etwas weitergekommen und kann von den Devolos-Seiten schon mal die Daten extrahieren.
Das Ganze läuft erst sehr rudimentär, aber prinzipiell geht es.
Mein Script schaut so aus:
'use strict';
const ventriloquist = require('puppeteer');
(async() => {
const browser = await ventriloquist.launch({product: "chrome", executablePath: "/usr/bin/chromium",});
const page = await browser.newPage();
// Devolo URL has the format 'http://x.x.x.x/#/wifi/status';
const pageURL = process.argv[2];
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled Rejection at: Promise', p, 'reason:', reason);
browser.close();
});
await page.setViewport({ width: 1920, height: 1080 });
await page.goto( pageURL,{
waitUntil: 'networkidle0',
});
await page.goto( pageURL,{
waitUntil: 'networkidle0',
});
await page.screenshot({path: 'puppetmaster.png'});
var output = await page.evaluate(() => {
return;
});
// const text = await page.$eval('*', el => el.innerText);
// ng-tns-0-0
// const text = await page.content();
const table = await page.$$eval('table tr td', tds => tds.map((td) => {
return td.innerText;
}));
const fs = require('fs');
fs.writeFileSync('./file.txt', table);
process.stdout.write(table+'\n');
await browser.close();
})();
Verbesserungen gerne willkommen ;-)
Momentan muss ich es noch händisch in der shell mit "node script.js <address of Devolo>" aufrufen.
Dann wird ein Screenshot abgespeichert, die Daten in einem File ausgegeben und gleichzeitig auch auf der Console.
Aber nun wird es spannend.
Denn wie soll ich die Daten in fhem bekommen.
Mir schwebt momentan vor, dass das script in einer Endlos-Schleife läuft, die Seite ausliest und immer wieder die Datei überschreibt.
Dann bräuchte ich eine Möglichkeit in fhem die Datei zu lesen und in Readings zu packen.
Oder ich rufe das über die in fhem eingebaute telnet-Schnittstelle auf.
Weiß jemand, wie man das am Besten angeht?
Was wäre der "richtige" Weg?
Und wie soll man die Endlos-Schleife beenden?
Gibt es da einen (Standard-)Mechanismus in Linux?
Danke für jeden Tipp.
lg, Gerhard