Script zum Download und Öffnen

  • Hi. Ich habe folgendes vor:
    Ich will auf dem laufenden Pi zum Start ein Script ausführen lassen, dass in einen gewissen Zeitintervall immer wieder prüft, ob auf einer URL eine Datei vorhanden ist, die neuer ist als die lokal vorhandene. Wenn das so ist, soll die Datei geladen werden und die Alte ersetzen. Das ganze soll natürlich danach weiterhin immer wieder prüfen, sodass der Pi selbstständig arbeitet.

    Bisher habe ich folgendes Zusammengeschustert:

    Code
    watch -n 300 [wget -N -P /home/pi/Downloads https://drive.google.com/uc?export=download&id=1FAW95pUSP5Q0FS6sdhWAj3nCwjZQTZ_E]

    Ich habe hier einfach mal eine leere Powerpoint genommen, was aber dem am Ende gewollten Dateiformat entspricht.

    Nun komme ich aber bei etwas nicht weiter. Ich habe den Pi per Autostart auch so weit, dass er die Powerpoint-Datei mit einem bestimmten Namen (current) in LibreOffice öffnet.

    Nun will ich aber natürlich auch einbinden, dass er die alte Datei schließt und danach die Neue öffnet. Ich weiß aber nicht so wirklich, wie ich das als if-Abfrage realisieren kann und dazu noch dafür sorge, dass er das ganze auch bei zukünftig neuen Dateien macht.


    Kann mir bitte einer helfen bzw. mir Anregungen geben?


    Ich bin auch offen für ganz andere Ideen. An sich geht es eher darum das eine PDF-Datei mit mehreren Seiten aus dem Netz immer aktuell geöffnet wird und die einzelnen Seiten als Diashow abgespielt werden. Ich habe den Bekannten, für den ich das machen will nur jetzt so weit bekommen, dass auch Powerpoint geht.

  • Genau das ist das Problem. Ich könnte sicher auch der Person sagen, dass er jede Seite in einer einzelnen PDF speichern soll. Aber das hilft mir leider auch noch nicht weiter.

    Wie gesagt wäre es aber auch möglich die Daten immer als ODP aufzubereiten.

  • Ja richtig. Ich bezog mich aber auf den letzten Absatz, wo es primär um PDF geht. Nach meinem Verständnis hat ata1704 es erst mit PowerPoint probiert, aber die Quellen vermutlich PDF Daten sind. Vielleicht kann ata1704 das aufklären.


    Einzelne Seiten eines PDFs anzeigen lassen, sollte laut Manpages von xpdf und qpdfview funktionieren (Seite lässt sich angeben). Eine einfache bash Schleife dürfte dann die Diashow Funktion übernehmen. Mag sein das es da noch besserer/geeignetere Tools gibt für diesen Anwendungsfall. Falls man die Anzahl Seiten benötigt, geht das Notfalls mit pdfinfo <Datei.pdf> | grep Pages (wenn es mit dem PDF Anzeiger selbst nicht geht).


    apropos pdf zeigt hier diverser Tools an die man verwenden könnte. Z.B. die pdfto* (PDF in beliebiges Format konvertieren). Damit könnte man temporär Bilder temporär in die Ramdisk legen und dann ein Bildbetrachter die Diashow übernehmen lassen. Da wären dann auch Überblend-Effekte möglich.

  • Ja du hast recht. Die Daten liegen eigtl in PDF vor. Wie bekomme ich das dann aber mit der automatischen Aktualisierung hin?

    Ich habe ja auch an einen Cloud-Anbieter gedacht. Ich bin noch neu beim Pi und die üblichen Verdächtigen scheinen ja natürlich keine App dafür zu haben.

    Aber die Lösung von oben mit wget sollte ja so weit gehen. Durch das watch müsste er ja immer weiter prüfen, auch wenn eine neuere Version geladen wurde?


    Jetzt stellt sich aber in allen Optionen die hier von mir und von die genannt wurden die Frage, wie sich die Diashow selber aktualisiert im laufenden Betrieb.

  • Um zu prüfen ob es sich um eine neue Datei handelt, würde es vielleicht schon reichen die beiden Prüfsummen der lokalen Datei und der auf dem Server zu vergleichen. Wenn Prüfsumme ungleich ist, dann neue Datei laden. Hier ist schon cksum, sum und shasum installiert.


    Es gibt sicher auch verschiedenen Möglichkeiten, wie sich die Diashow aktualisiert. Das ist aber auch abhängig, wie die Diashow erstmals abläuft (wie, welcher Anzeiger, ...). Das muss zuerst feststehen, bzw. du musst wissen wie du es haben möchtest.

  • Also wie es sich doch jetzt ergeben hat, liegt die Datei als Powerpoint vor ursprünglich. Anscheinend wollte man mir mit PDF "entgegenkommen". Naja egal...

    Ich habe mal einiges zusammen getippt. Ich muss dazu aber gestehen, dass meine Kenntnisse in Shell noch nicht so gut sind und bisher scheinen wohl auch noch Fehler drin zu sein:

    Bash
    #!/bin/bash
    watch -n 300 [
    rclone sync test.rclone /home/pi/Dropbox/Datei
    VAR_1 = sha1sum /home/pi/Drobox/Datei/Präsentation.odp
    VAR_2 = cat /home/pi/Dropbox/checksum.sha1
    if [VAR_1 != VAR_2]
    then
    #Programm schließen und wieder öffnen
    sha1sum /home/pi/Drobox/Datei/Präsentation.odp > /home/pi/Dropbox/checksum.sha1
    fi]

    Zur Erklärung: Ich nutze mittlerweile rclone um einen Dropbox-Ordner (test.rclone) zu syncen. Die Dateien werden bei "sync" nur erneut geladen, wenn sich die Bearbeitungszeit, Dateigröße oder MD5SUM ändert.

    Die Datei checksum.sha1 habe ich einmalig erzeugen lassen.


    Wo liegen aktuell noch die Fehler?

    Mal ganz abgesehen davon, dass mir immer noch fehlt, wie ich das Programm dann schließe und wieder öffne. Und mir scheint, als ob das mit "watch" auch nicht wirklich funktioniert.

  • Eine Alternative


    Es gibt einfachere Methoden, doch so würde ich es wohl angehen. Die Datei wird lokal auf dem neusten Stand gehalten; in mehreren Tabs geöffnet, wobei jeder Tab eine Seite weiter springt; Chrome wechselt automatisch zwischen den Tabs (Diashow) und aktualisiert sie alle x Minuten.


    Ändert sich die Anzahl der Seiten? Wenn nicht, dann muss man nur einmal alle Tabs einrichten und kann es dann laufen lassen.

    Kelvin

  • Hast du schon man loimpress gelesen und getestet? Es gibt aber noch mind. 1-2 OpenDokument Anzeiger, neben den vielen Konvertierer. Damit würde ich mich nun beschäftigen. Vielleicht löst sich damit schon das Start-, Stop- und Wechselproblem. Zum Schluss geht es dann an das Skript und/oder crontab.

  • So. Ich habe nun mal wieder Zeit dafür gefunden.

    Ich habe zwei Skripte geschrieben. Sie funktionieren grundsätzlich und ich konnte alle Probleme lösen:

    start.sh:

    Bash
    #!/bin/bash
    soffice --show /home/pi/Dropbox/Datei/current.odp --norestore

    loop.sh:


    Was nun komisch ist... ich habe folgendes in mit crontab -e in den Crontab geschrieben:

    Code
    */5 * * * * bash /home/pi/Dropbox/loop.sh >/dev/null 2>&1
    @reboot /bin/sleep 60 ; /home/pi/Dropbox/start.sh >/dev/null 2>&1

    Der Crontab funktioniert leider absolut nicht. Und was sehr komisch ist:

    Ich kann nach der Einrichtung des Crontabs auch das Start-Skript nicht mehr manuell ausführen für eine gewisse Zeit, bzw. passiert einfach nichts. Ich darf das start.sh Script anscheinend innerhalb der ersten 60 Sekunden nach dem Start ausführen(habe nicht genau gestoppt) und nach einer Weile, wo ich den Pi habe so stehen lassen ging es plötzlich auch wieder (locker eine halbe Stunde).

    Das andere Skript für den automatischen Download habe ich auch getestet. Ich habe eine neue Datei in die Dropbox geladen, aber er aktualisiert sie nicht. Erst wenn ich das Skript manuell anstoße.

  • Hey ata1704

    Versuchs mal mit

    Code: crontab
    */5 * * * * /bin/bash /home/pi/Dropbox/loop.sh >/dev/null 2>&1


    Und beim 2. Eintrag habe ich bei meinen Scripts das Sleep in die Scripts selbst geschrieben:

    Bash: start.sh
    #!/bin/bash
    sleep 60
    soffice --show /home/pi/Dropbox/Datei/current.odp --norestore

    Was dann wie folgt aussehen würde

    Code: crontab
    @reboot /bin/bash /home/pi/Dropbox/start.sh >/dev/null 2>&1


    Grüsse Apop

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Edited 2 times, last by Apop85 ().