NEWS
Mit exec in Dateisystem schreiben
-
@David-G. Lass mal den kompletten Befehl der mit exec geschickt wird ausgeben und stell ihn rein. Danke.
Habe eben mal manuell Daten eine Ebene höher nach /opt/iobroker/iobroker-data/files/0_userdata.0/xyz kopiert. Landen auch nicht im Backup.
@MCU sagte in Mit exec in Dateisystem schreiben:
Lass mal den kompletten Befehl der mit exec geschickt wird ausgeben und stell ihn rein. Danke.
Inhalt von echo entfernt
cd /opt/iobroker/iobroker-data/files/0_userdata.0/abc/xyz && echo '' > htmlc6.html && echo '' > htmlc5.html && echo '' > htmletiketten.html && weasyprint -p htmlc6.html c6_14_02_2026_00_23.pdf && weasyprint -p htmlc5.html c5_14_02_2026_00_23.pdf && weasyprint -p htmletiketten.html etiketten_14_02_2026_00_23.pdf && rm -f htmlc5.html htmlc6.html htmletiketten.html *.xls *.xlsx@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Und weasyprint ist da auch nicht 'ordentlich' installiert.
Gibt es über das Debian-Repo.Wie werde ich das aktuelle Los? Dann installier ich es noch sauber
@MCU sagte in Mit exec in Dateisystem schreiben:
Was sagt denn
Copy to Clipboard
grep -n '^iobroker:' /etc/passwdLast login: Sat Feb 14 00:14:54 2026 from 192.168.22.206
iobroker@iobroker:~$ grep -n '^iobroker:' /etc/passwd
25:iobroker:x:1000:1000:iobroker,,,:/home/iobroker:/bin/bash
iobroker@iobroker:~$ -
Habe eben mal manuell Daten eine Ebene höher nach /opt/iobroker/iobroker-data/files/0_userdata.0/xyz kopiert. Landen auch nicht im Backup.
@MCU sagte in Mit exec in Dateisystem schreiben:
Lass mal den kompletten Befehl der mit exec geschickt wird ausgeben und stell ihn rein. Danke.
Inhalt von echo entfernt
cd /opt/iobroker/iobroker-data/files/0_userdata.0/abc/xyz && echo '' > htmlc6.html && echo '' > htmlc5.html && echo '' > htmletiketten.html && weasyprint -p htmlc6.html c6_14_02_2026_00_23.pdf && weasyprint -p htmlc5.html c5_14_02_2026_00_23.pdf && weasyprint -p htmletiketten.html etiketten_14_02_2026_00_23.pdf && rm -f htmlc5.html htmlc6.html htmletiketten.html *.xls *.xlsx@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Und weasyprint ist da auch nicht 'ordentlich' installiert.
Gibt es über das Debian-Repo.Wie werde ich das aktuelle Los? Dann installier ich es noch sauber
@MCU sagte in Mit exec in Dateisystem schreiben:
Was sagt denn
Copy to Clipboard
grep -n '^iobroker:' /etc/passwdLast login: Sat Feb 14 00:14:54 2026 from 192.168.22.206
iobroker@iobroker:~$ grep -n '^iobroker:' /etc/passwd
25:iobroker:x:1000:1000:iobroker,,,:/home/iobroker:/bin/bash
iobroker@iobroker:~$@David-G. Versuch mal diesen Befehl mit exec.
runuser -u iobroker -- bash -lc "cd /opt/iobroker/iobroker-data/files/0_userdata.0/abc/xyz && echo '' > htmlc6.html && echo '' > htmlc5.html && echo '' > htmletiketten.html && /usr/local/bin/weasyprint -p htmlc6.html c6_14_02_2026_00_23.pdf && /usr/local/bin/weasyprint -p htmlc5.html c5_14_02_2026_00_23.pdf && /usr/local/bin/weasyprint -p htmletiketten.html etiketten_14_02_2026_00_23.pdf && rm -f htmlc5.html htmlc6.html htmletiketten.html *.xls *.xlsx"Die Dateien müssen dann unter Dateien/Files im Browser unter 0_userdata.0 oder Benutzerdateien im Ordner abc/xyz sichtbar sein.
-
Wenn man Linux-Systemfunktionen ("exec") zum Schreiben von Dateien nutzt, sollte man ÜBERHAUPT NICHT in den Verzeichnisbaum von iobroker schreiben ... außer man ruft per exec z. B.
iob file write ....auf ...
Die Datei in einem Verzeichnis außerhalb der Überwachung von iobroker erzeugen, und danach mit iob file write in ein iobroker Verzeichnis zu transferieren ist aber erlaubt ...
iobroker führt eine Datenbank über die Dateien im eigenen Verzeichnisbaum, und wenn man in diesen Verzeichnisbaum "unter dem Radar" Dateien hinenschiebt, sorgt das nur für Ärger (z. B. dass sie nicht "im Backup landen")....
-
Habe eben mal manuell Daten eine Ebene höher nach /opt/iobroker/iobroker-data/files/0_userdata.0/xyz kopiert. Landen auch nicht im Backup.
@MCU sagte in Mit exec in Dateisystem schreiben:
Lass mal den kompletten Befehl der mit exec geschickt wird ausgeben und stell ihn rein. Danke.
Inhalt von echo entfernt
cd /opt/iobroker/iobroker-data/files/0_userdata.0/abc/xyz && echo '' > htmlc6.html && echo '' > htmlc5.html && echo '' > htmletiketten.html && weasyprint -p htmlc6.html c6_14_02_2026_00_23.pdf && weasyprint -p htmlc5.html c5_14_02_2026_00_23.pdf && weasyprint -p htmletiketten.html etiketten_14_02_2026_00_23.pdf && rm -f htmlc5.html htmlc6.html htmletiketten.html *.xls *.xlsx@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Und weasyprint ist da auch nicht 'ordentlich' installiert.
Gibt es über das Debian-Repo.Wie werde ich das aktuelle Los? Dann installier ich es noch sauber
@MCU sagte in Mit exec in Dateisystem schreiben:
Was sagt denn
Copy to Clipboard
grep -n '^iobroker:' /etc/passwdLast login: Sat Feb 14 00:14:54 2026 from 192.168.22.206
iobroker@iobroker:~$ grep -n '^iobroker:' /etc/passwd
25:iobroker:x:1000:1000:iobroker,,,:/home/iobroker:/bin/bash
iobroker@iobroker:~$@David-G. sagte in Mit exec in Dateisystem schreiben:
Wie werde ich das aktuelle Los?
Wie hast du es denn hingezirkelt?
-
Wenn man Linux-Systemfunktionen ("exec") zum Schreiben von Dateien nutzt, sollte man ÜBERHAUPT NICHT in den Verzeichnisbaum von iobroker schreiben ... außer man ruft per exec z. B.
iob file write ....auf ...
Die Datei in einem Verzeichnis außerhalb der Überwachung von iobroker erzeugen, und danach mit iob file write in ein iobroker Verzeichnis zu transferieren ist aber erlaubt ...
iobroker führt eine Datenbank über die Dateien im eigenen Verzeichnisbaum, und wenn man in diesen Verzeichnisbaum "unter dem Radar" Dateien hinenschiebt, sorgt das nur für Ärger (z. B. dass sie nicht "im Backup landen")....
@MartinP sagte in Mit exec in Dateisystem schreiben:
iobroker führt eine Datenbank über die Dateien im.....
Sowas hatte ich auch in Erinnerung. Deshalb hab ich oben gemeint, dass am iob vorbei geschrieben.
@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Wie hast du es denn hingezirkelt?
Ja wenn ich das mal wüsste.
Das ist ein System aus der Zeit wo ich mit iob angefangen hab und alles Stumpf nach irgendwelchen Anleitungen gemacht hab.@mcu
Hast du die Dateien in deinen Backup auch einfach per Script, Dateiexplorer etc in den Ordner geschoben?Edit
echo "<html><body><h1>Test</h1></body></html>" | weasyprint - /dev/shm/temp.pdf && iobroker file write /dev/shm/temp.pdf 0_userdata.0/FGB/test.pdf && rm /dev/shm/temp.pdfScheint gut zu klappen.
-
@MartinP sagte in Mit exec in Dateisystem schreiben:
iobroker führt eine Datenbank über die Dateien im.....
Sowas hatte ich auch in Erinnerung. Deshalb hab ich oben gemeint, dass am iob vorbei geschrieben.
@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Wie hast du es denn hingezirkelt?
Ja wenn ich das mal wüsste.
Das ist ein System aus der Zeit wo ich mit iob angefangen hab und alles Stumpf nach irgendwelchen Anleitungen gemacht hab.@mcu
Hast du die Dateien in deinen Backup auch einfach per Script, Dateiexplorer etc in den Ordner geschoben?Edit
echo "<html><body><h1>Test</h1></body></html>" | weasyprint - /dev/shm/temp.pdf && iobroker file write /dev/shm/temp.pdf 0_userdata.0/FGB/test.pdf && rm /dev/shm/temp.pdfScheint gut zu klappen.
Ich würde nur davon absehen, direkt auf ein Gerät wie /dev/shm/ zu schreiben. Verwende /tmp/ für sowas.
-
Ich würde nur davon absehen, direkt auf ein Gerät wie /dev/shm/ zu schreiben. Verwende /tmp/ für sowas.
@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Ich würde nur davon absehen, direkt auf ein Gerät wie /dev/shm/ zu schreiben. Verwende /tmp/ für sowas.
Okay
Idee wegen dem krummen weasyprint?Scheinbar doppelt drauf....
iobroker@iobroker:~$ which weasyprint /usr/local/bin/weasyprint iobroker@iobroker:~$ dpkg -l | grep weasyprint ii weasyprint 62.3-1 all Document factory for creating PDF files from HTML iobroker@iobroker:~$ pip list | grep -i weasyprint weasyprint 62.3 iobroker@iobroker:~$ pip3 list | grep -i weasyprint weasyprint 62.3 iobroker@iobroker:~$ type weasyprint weasyprint ist /usr/local/bin/weasyprint iobroker@iobroker:~$ -
@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Ich würde nur davon absehen, direkt auf ein Gerät wie /dev/shm/ zu schreiben. Verwende /tmp/ für sowas.
Okay
Idee wegen dem krummen weasyprint?Scheinbar doppelt drauf....
iobroker@iobroker:~$ which weasyprint /usr/local/bin/weasyprint iobroker@iobroker:~$ dpkg -l | grep weasyprint ii weasyprint 62.3-1 all Document factory for creating PDF files from HTML iobroker@iobroker:~$ pip list | grep -i weasyprint weasyprint 62.3 iobroker@iobroker:~$ pip3 list | grep -i weasyprint weasyprint 62.3 iobroker@iobroker:~$ type weasyprint weasyprint ist /usr/local/bin/weasyprint iobroker@iobroker:~$@David-G. sagte in Mit exec in Dateisystem schreiben:
/usr/local/bin/weasyprint
Dann lösch das aus /usr/local/bin/ einfach raus.
Edit: Per pip installiert? Dann auch per pip deinstallieren! Erst danach ggfls. stumpf aus /usr/local/bin löschen!
-
@MartinP sagte in Mit exec in Dateisystem schreiben:
iobroker führt eine Datenbank über die Dateien im.....
Sowas hatte ich auch in Erinnerung. Deshalb hab ich oben gemeint, dass am iob vorbei geschrieben.
@Thomas-Braun sagte in Mit exec in Dateisystem schreiben:
Wie hast du es denn hingezirkelt?
Ja wenn ich das mal wüsste.
Das ist ein System aus der Zeit wo ich mit iob angefangen hab und alles Stumpf nach irgendwelchen Anleitungen gemacht hab.@mcu
Hast du die Dateien in deinen Backup auch einfach per Script, Dateiexplorer etc in den Ordner geschoben?Edit
echo "<html><body><h1>Test</h1></body></html>" | weasyprint - /dev/shm/temp.pdf && iobroker file write /dev/shm/temp.pdf 0_userdata.0/FGB/test.pdf && rm /dev/shm/temp.pdfScheint gut zu klappen.
-
@David-G. Ich hab es bei mit Javascript Modul html-pdf gemacht. Kann ein Beipiel später reinstellen.
Gerne.
WeasyPrint nutze ich schon recht lange für vieles.
War damals das einzige wo ich wirklich genau das PDF Format mit Seitenrändern etc festlegen kann und wirklich sehr gut css unterstützt.Falls jemand Interesse hat was ich hier in dem Fall grad mache.
Habe mit für meine Visualisierung einen kleinen Dateiexplorer gebaut für einen Ordner. Dort kann ich Dateien hoch und runter laden. Wenn ich eine Excel hochlade wird eine verschachtelte json aus dieser erstellt (ein js überwacht den Ordner auf xls und xlsx).

Bei den Adressen stehen auch Zahlen, wie viele Exemplare von einem Heft die Persone bekommen. Je nach Anzahl benötigt man einen anderen Briefumschlag.
Für jede entsprechende Größe wird dann ein html bzw pdf mit den entsprechenden Adressen erstellt.Die PDFs sind dann auch über den Fileexplorer in der vis erreichbar.
-
Gerne.
WeasyPrint nutze ich schon recht lange für vieles.
War damals das einzige wo ich wirklich genau das PDF Format mit Seitenrändern etc festlegen kann und wirklich sehr gut css unterstützt.Falls jemand Interesse hat was ich hier in dem Fall grad mache.
Habe mit für meine Visualisierung einen kleinen Dateiexplorer gebaut für einen Ordner. Dort kann ich Dateien hoch und runter laden. Wenn ich eine Excel hochlade wird eine verschachtelte json aus dieser erstellt (ein js überwacht den Ordner auf xls und xlsx).

Bei den Adressen stehen auch Zahlen, wie viele Exemplare von einem Heft die Persone bekommen. Je nach Anzahl benötigt man einen anderen Briefumschlag.
Für jede entsprechende Größe wird dann ein html bzw pdf mit den entsprechenden Adressen erstellt.Die PDFs sind dann auch über den Fileexplorer in der vis erreichbar.
@David-G. Testskript
in javascript-Instanz als NPM-Modul angebenconst fs = require('fs'); // @ts-ignore const pdf = require('html-pdf'); // HTML-Inhalt // max Breite 520px let htmlContent = ` <!DOCTYPE html> <html> <head> <title>HTML to PDF</title> </head> <body style="margin-left: 10px;"> <h4>Hello, world!</h4> <img style="height:100px; width:520px;" src="http://192.168.178.170/download/bilder/ffn.png"> <h5>Hallo</h5> <table border="1" style="font-size:10px; width:100%;"> <thead> <tr> <th style="min-width:170px">Spalte 1</th> <th style="min-width:170px">Spalte 2</th> <th style="min-width:170px">Spalte 3</th> </tr> </thead> <tbody>` for(let i= 0;i<35;i++){ htmlContent+=` <tr>` htmlContent+=` <td>Daten `+(i+1)+`,1</td>` htmlContent+=` <td>Daten `+(i+1)+`,2</td>` htmlContent+=` <td>Daten `+(i+1)+`,3</td>` htmlContent+=` </tr>` } htmlContent += `</tbody> </table> </body> </html> `; // Optionen für HTML-PDF const options = { format: 'A4' ,border: {"top": "0cm","right": "1cm","bottom": "0cm","left": "1cm"}, header: {"height": "15mm", "contents": '<div style="font-size:14px; text-align: center;">Author: TEST</div>' }, footer: {"height": "10mm","contents": {default: '<div style="font-size:14px; text-align:center;"><span style="color: blue;">{{page}}</span>/<span>{{pages}}</span></div>'}}} // config -Beschreibung -> https://github.com/marcbachmann/node-html-pdf?tab=readme-ov-file#options // HTML zu PDF umwandeln let filePath = '/opt/iobroker/iobroker-data/files/0_userdata.0/output.pdf' let fileName = 'output.pdf' pdf.create(htmlContent, options).toFile(filePath, function(err, res) { if (err) return console.log(err); console.log(res); // Informationen über das generierte PDF let data = fs.readFileSync(filePath); // Datei hochladen in VIS writeFile("0_userdata.0", "/PDF/"+fileName, data,function (error) { if (error) log(error); }); }); -
@David-G. Testskript
in javascript-Instanz als NPM-Modul angebenconst fs = require('fs'); // @ts-ignore const pdf = require('html-pdf'); // HTML-Inhalt // max Breite 520px let htmlContent = ` <!DOCTYPE html> <html> <head> <title>HTML to PDF</title> </head> <body style="margin-left: 10px;"> <h4>Hello, world!</h4> <img style="height:100px; width:520px;" src="http://192.168.178.170/download/bilder/ffn.png"> <h5>Hallo</h5> <table border="1" style="font-size:10px; width:100%;"> <thead> <tr> <th style="min-width:170px">Spalte 1</th> <th style="min-width:170px">Spalte 2</th> <th style="min-width:170px">Spalte 3</th> </tr> </thead> <tbody>` for(let i= 0;i<35;i++){ htmlContent+=` <tr>` htmlContent+=` <td>Daten `+(i+1)+`,1</td>` htmlContent+=` <td>Daten `+(i+1)+`,2</td>` htmlContent+=` <td>Daten `+(i+1)+`,3</td>` htmlContent+=` </tr>` } htmlContent += `</tbody> </table> </body> </html> `; // Optionen für HTML-PDF const options = { format: 'A4' ,border: {"top": "0cm","right": "1cm","bottom": "0cm","left": "1cm"}, header: {"height": "15mm", "contents": '<div style="font-size:14px; text-align: center;">Author: TEST</div>' }, footer: {"height": "10mm","contents": {default: '<div style="font-size:14px; text-align:center;"><span style="color: blue;">{{page}}</span>/<span>{{pages}}</span></div>'}}} // config -Beschreibung -> https://github.com/marcbachmann/node-html-pdf?tab=readme-ov-file#options // HTML zu PDF umwandeln let filePath = '/opt/iobroker/iobroker-data/files/0_userdata.0/output.pdf' let fileName = 'output.pdf' pdf.create(htmlContent, options).toFile(filePath, function(err, res) { if (err) return console.log(err); console.log(res); // Informationen über das generierte PDF let data = fs.readFileSync(filePath); // Datei hochladen in VIS writeFile("0_userdata.0", "/PDF/"+fileName, data,function (error) { if (error) log(error); }); });Da kann man ja auch wirklich viele Optionen mitgeben.
Dort direkt bei html-pdf, ich mache es mit im css im html.Da ich eigentlich nur mit Blockly arbeite, müsste ich mir da eine Funktion bauen 🤣, an die ich einfach das html und die Settings andocken kann.
Wobei der aktuelle Weg ja aicu gut läuft.
-
Da kann man ja auch wirklich viele Optionen mitgeben.
Dort direkt bei html-pdf, ich mache es mit im css im html.Da ich eigentlich nur mit Blockly arbeite, müsste ich mir da eine Funktion bauen 🤣, an die ich einfach das html und die Settings andocken kann.
Wobei der aktuelle Weg ja aicu gut läuft.