NEWS
Werte aus Smartmeter Adapter in Excel exportieren
-
Hallo zusammen,
ich lese meine beiden Stromzähler über den Smartmeter Adapter aus.Gibt es die Möglichkeit, die Zählerstände jeweils am Monatsende um 23:59 Uhr in eine Exceltabelle zu schreiben? Oder in ein anderes "Medium" und ich frage dann aus Excel heraus dort ab?
LG
Frank -
@frana120500 sagte in Werte aus Smartmeter Adapter in Excel exportieren:
in eine Exceltabelle zu schreiben?
ja, das geht.
Anbei mal ein Beispiel in js mit Erläuterungen (hatte ich mir als Muster mal gespeichert).
// Daten nach Excel schreiben und auch lesen // Achtung: wenn Diagramme in Excel vorhanden sind, werden diese beim Speichern durch exceljs gelöscht. // Achtung: speichern einer xlsm ! funktioniert ebenfalls nicht. var Excel = require('exceljs'); var workbook = new Excel.Workbook(); workbook.xlsx.readFile("C:/tmp/Messungen.xlsx") .then(function() { var worksheet = workbook.getWorksheet('Messungen'); log (formatDate(new Date(worksheet.getCell(6,2).value), 'DD.MM.YYYY')); log (worksheet.getCell(13,2).value); if (worksheet.getCell(13,2).value == null) { log ("ja"); } log (worksheet.getCell(6,2).value); log (worksheet.getCell(6,3).value); // wenn Formel enthalten, dann Ergebnis "Formel und Result" log (worksheet.getCell(6,8).value.result); // result wenn eine Formel enthalten ist log (worksheet.getRow(10).values); // Zeile wird in arr geschrieben //var date = worksheet.getCell('B6').value; //var date = worksheet.getCell('6,2').value; //log (worksheet.getCell('B13').value); //worksheet.getCell('B12').value = 'Hallo'; // einer Zelle einen Wert zuweisen //workbook.xlsx.writeFile('C:/tmp/Messungen.xlsx'); // Excel wird neu gespeichert });
Musst da mal ein bisschen mit rumspielen.
mfg
Dieter -
@bahnuhr das ging ja fix. vielen Dank. Das werde ich mal ausprobieren
-
@frana120500 mmmh, ok, das übersteigt dann doch meine JS Fähigkeiten.
ich habe den Javascript Adapter um das npm exceljs erweitert und im Script an den Anfang
var zaehlerstand = getState("smartmeter.1.1-0:2_8_0__255.value");
gestellt. Hier steht der Wert drin den ich gerne bsp. in Zelle A2 des Tabellenblattes Messungen hätte.
Der lokale Pfad zu meiner Excel Datei ist /Users/franksiemens/Desktop/test.xlsx
(Mac Nutzer)
kannst du mir hier grad mal unter die Arme helfen wie ich weiter vorgehen muss.
-
@frana120500 sagte in Werte aus Smartmeter Adapter in Excel exportieren:
getState("smartmeter.1.1-0:2_8_0__255.value")
Die Schreibweise dürfte nicht richtig sein.
-
@bahnuhr hast recht. falsche Anführungszeichen benutzt.
dennoch weiß ich nicht weiter.
// Daten nach Excel schreiben und auch lesen // Achtung: wenn Diagramme in Excel vorhanden sind, werden diese beim Speichern durch exceljs gelöscht. // Achtung: speichern einer xlsm ! funktioniert ebenfalls nicht. var zaehlerstand = getState('smartmeter.1.1-0:2_8_0__255.value'); var Excel = require('exceljs'); var workbook = new Excel.Workbook(); workbook.xlsx.readFile("/Users/franama/Desktop/test.xlsx") .then(function() { var worksheet = workbook.getWorksheet('Messungen'); log (formatDate(new Date(worksheet.getCell(6,2).value), 'Stand')); log (worksheet.getCell(13,2).value); if (worksheet.getCell(13,2).value == null) { log ("ja"); } log (worksheet.getCell(6,2).value); log (worksheet.getCell(6,3).value); // wenn Formel enthalten, dann Ergebnis "Formel und Result" log (worksheet.getCell(6,8).value.result); // result wenn eine Formel enthalten ist log (worksheet.getRow(10).values); // Zeile wird in arr geschrieben //var zaehlerstand = worksheet.getCell('A2').value; //var date = worksheet.getCell('6,2').value; //log (worksheet.getCell('B13').value); worksheet.getCell('A2').value = zaehlerstand; // einer Zelle einen Wert zuweisen workbook.xlsx.writeFile('/Users/franama/Desktop/test.xlsx'); // Excel wird neu gespeichert });
-
@frana120500 sagte in Werte aus Smartmeter Adapter in Excel exportieren:
falsche Anführungszeichen benutzt.
Und wieder NEIN.
getState schreibt man so!
getState('smartmeter.1.1-0:2_8_0__255').val;
-
@bahnuhr sagte in Werte aus Smartmeter Adapter in Excel exportieren:
getState('smartmeter.1.1-0:2_8_0__255').val;
war auch falsch:
richtig ist:
getState("smartmeter.1.1-0:16_7_0__255.value").valFolgendes Script läuft. Hab es gerade getestet:
Wichtig hierbei ist:
Du musst den Pfad richtig ermitteln. Bei mir läuft iob in einer VM unter proxmox.
Das Verzeichnis auf meinem win rechner ist gemountet mit der VM.mfg
Dieter -
Hallo
ich fange auch gerade an mich damit auseinander zusetzten.
Wenn ich aber den Script 1 zu 1 kopiere kommt der fehler
script.js.common.excel_test: TypeError: Cannot read property 'getCell' of undefined
Woran kann das liegen.
-
@pat sagte in Werte aus Smartmeter Adapter in Excel exportieren:
Woran kann das liegen.
in deinem Excel fehlt das Worksheet Messungen
-
@fastfoot
Verbuchen wir es mal unter "es war spät"So daten lesen aus den Cellen funktioniert aber irgendwie klappt das schreiben nicht.
const ExcelJS = require('exceljs'); var workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('/mnt/NAS/test.xlsx').then(function() { var worksheet = workbook.getWorksheet('test'); console.log (worksheet.getCell('A1').value); log (worksheet.getCell(1,3).value); worksheet.getCell('A3').value = 'Hallo Welt'; // einer Zelle einen Wert zuweisen workbook.xlsx.writeFile('/mnt/NAS/test.xlsx'); // Excel wird neu gespeichert });
-
@pat
Habe dein Script gerade probiert.
Es funktioniert einwandfrei.Frage:
Stimmt der Pfad?
Hast du ein Tabellenblatt mit "test"? -
@pat sagte in Werte aus Smartmeter Adapter in Excel exportieren:
aber irgendwie klappt das schreiben nicht.
hat der user iobroker denn Schreibberechtigung auf /mnt/NAS?
-
Also Lesen kann ich wenn ich was händisch eintrage kann ich auch die Zellen auslesen.
Beim schreiben kommt der Fehler. Ich hätte einfach mal schauen sollen im log. In der Console stand nix.
javascript.0 2021-10-14 19:56:17.171 error (8874) Error: EACCES: permission denied, open '/mnt/NAS/test.xlsx' javascript.0 2021-10-14 19:56:17.171 error (8874) An error happened which is most likely from one of your scripts, but the originating script could not be detected.
Ich habe schonmal geschaut also lese und schreib Rechte sind vergeben das sollte passen.
Aber irdendetwas verhindert noch das schreiben. -
@pat wie wurde denn der Ordner konkret gemounted? Da fehlt die Schreibberechtigung
-
@fastfoot
da ich schon andere dateien raus lese wurde ich sagen das er richtig gemounted ist. Aber ich habe noch nie geschrieben.
Das wird wieder eine lange suche
-
@pat dann beantworte die Frage wie der Ordner gemounted wird!
-
@pat
Ich bin absolut Linux Laie.
Aber gibt es nicht den 777 Befehl.
Damit müsste doch alle Rechte dann da sein. -
@bahnuhr sagte in Werte aus Smartmeter Adapter in Excel exportieren:
@pat
Ich bin absolut Linux Laie.
Aber gibt es nicht den 777 Befehl.
Damit müsste doch alle Rechte dann da sein.nein!
-
@fastfoot sagte in Werte aus Smartmeter Adapter in Excel exportieren:
nein!
Ich sag es ja.
War ein Versuch.