Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
FTP-Upload funktioniert nicht
#1
Hallo zusammen
Ich habe seit wenigen Tagen 6 SmartPI (18 Phasen-Messung) im Einsatz und bin grundsätzlich davon begeistert. Messe damit den Hauptverbrauch und weitere Sub-Verbraucher wie Wärmepumpe, Boiler, Küche usw. und will eine Langzeitstatistik erstellen, zu welcher Zeit welche Verbrauchergruppe wieviel Leistung beziehen.
Nun möchte ich die Messwerte wie in der Doku beschrieben, einmal pro Nacht (00:00 Uhr oder wenn auch immer), als CSV-Datei an einen FTP-Server übermitteln.
Jedoch haben die SmartPI’s noch keine CSV-Dateien auf dem FTP abgeliefert und ich kriege nicht raus, woran es liegt. Ich habe alle SmartPI’s mit einer fixen IP ausgerüstet (konfiguriert in ../etc/dhcpcd.conf). Via  <fixe-IP:1080> kann ich auf jeden der SmartPI’s problemlos zugreifen. Habe auf einem Synology-NAS eine FTP-Freigabe mit einem entsprechenden Login bereitgestellt. Dieses ist von einem Windows-Datei-Explorer mit diesem Login problemlos mit Schreibrechten erreichbar. Auf den SmartPI’s habe ich einen GUI-basierenden FTP Client (bareFTP) installiert. Mit diesem kann ich ebenfalls problemlos mit demselben Login, Dateien von und zum Raspberry übertragen.
Jedoch kriege ich die nächtlich erwarteten CSV’s nicht auf dem FTP zugestellt. Hat jemand damit schon Erfahrungen? Was mache ich falsch?
Folgende Konfig’s habe ich schon ausprobiert:
Alles in der Datei …/etc/smartpi
[ftp]
ftp_upload=1
ftp_server="192.168.0.9"
ftp_user="smartpi"
ftp_pass="smartpi-2017"
ftp_path=smartpi/
… und auch ohne Semikolons
[ftp]
ftp_upload=1
ftp_server=192.168.0.9
ftp_user=smartpi
ftp_pass=smartpi-2017
ftp_path=smartpi/

In der mitgelieferten Installationsanleitung (Papierform) werden die FTP-Logindaten NICHT in Semikolons gestellt.
In der Anleitung im Blog (/use) jedoch schon.
Welche Konfig ist die richtige?
(Auf Grund der sonstigen in Semikolon stehenden Parameter, müsste die Variante der FTP-Login-Daten MIT Semikolon schon die richtige sein)

Weitere Frage:
In der Datei   …/etc/cron.d/smartpi
sei der Sende-Zeitpunkt der CSV-Datei zu konfigurieren.
Die Konfig sieht default so aus:

MAILTO=""
# SmartPi FTP-Upload
0    0    * * * pi  /usr/local/bin/smartpiftpupload
0/5  *    * * * root /usr/local/bin/smartpi_ckeck-umts.sh

Was genau mit welchen Settings lässt sich hier steuern? (Oder gibt es irgendwo einen Blog/Forums-Beitrag dazu, welche ich noch nicht gefunden habe?)
Wie könnte der Syntax als Beispiel aussehen, wenn die Datei um 0 Uhr 02 Min zu senden ist?

Hat damit schon jemand Erfahrung oder Wissen, wie diese parametrisiert werden muss?

Beste Grüsse
Ernst

PS: Im Anhang sie ../etc/smartpi  Datei (mit .txt Erweiterung, sonst wir diese vom Forum nicht hochgeladen. Alle darin enthaltenden PW = kein Problem, da alles in internem, technischem Netz abläuft)

Nachtrag:
Wenn aus dem Verzeichnis  …/etc/cron.d/smartpi die Datei   …/usr/local/bin/smartpiftpupload      manuell ausgeführt wird, dann erfolgt der UpLoad auf den FTP als CSV-Datei erfolgreich. (FTP-Login-Informationen wie auf „Blog ../Use“ aufgeführt, in Semikolon gestellt!).
Davon ausgehend ist demnach der FTP-Login korrekt und nicht die Herausforderung. Es entsteht die Frage, warum um 00:00 Uhr die Datei   …/usr/local/bin/smartpiftpupload nicht ausgeführt wird?
Was stimmt am Default-Syntax der Datei   …/etc/cron.d/smartpi   nicht, der so aussieht?

MAILTO=""
# SmartPi FTP-Upload
0    0    * * * pi  /usr/local/bin/smartpiftpupload
0/5  *    * * * root /usr/local/bin/smartpi_ckeck-umts.sh

Hat jemand dazu mehr Infos?

Beste Grüsse
Ernst


Attached Files
.txt   smartpi.txt (Size: 851 bytes / Downloads: 2)
Reply
#2
Hallo Ernst,

hier ein Beispiel, wie die Konfigurationsdatei aussehen kann:

Code:
[ftp]
ftp_upload=1
ftp_server=ftp.enerserve.eu
ftp_user=testuser
ftp_pass=testpasswort
ftp_path=smartpi/

Ruf doch bitte mal von der Konsole den FTP-Upload auf:
/usr/local/bin/smartpiftpupload

Dann bekommst du Ausgaben und wir können das Problem evtl. eingrenzen.
Um die Zeit der Ausführung zu ändern muss, wie du schon beschrieben hast, in der Datei /etc/cron.d/smartpi der Wert geändert werden.
Wenn die Datei um 0.05 Uhr gesendet werden soll, muss der Eintrag folgendermaßen lauten:
5   0  * * * pi  /usr/local/bin/smartpiftpupload

Weitere Beispiele:
*/5   * * * * pi  /usr/local/bin/smartpiftpupload  # alle 5 Minuten
59   23  * * * pi  /usr/local/bin/smartpiftpupload # Immer um 23:59 Uhr
5   11-13  * * * pi  /usr/local/bin/smartpiftpupload # Zwischen 11 und 13 Uhr immer um 5 Minuten nach

Weitere Informationen dazu findest du unter: https://wiki.ubuntuusers.de/Cron/

Viele Grüße Jens

Eintschuldige,

ich habe den Nachtrag übersehen.
Meine /etc/cron.d/smartpi sieht so aus und läuft:

Code:
MAILTO=""

# SmartPi FTP-Upload
0  0 * * * pi  /usr/local/bin/smartpiftpupload
# 0/5  * * * * root /usr/local/bin/smartpi_ckeck-umts.sh

Vielleicht ein Rechteproblem?
Wie sieht denn die Ausgabe von: ls -l /usr/local/bin aus ?

Gruß Jens
Reply
#3
Hallo Jens
Vielen Dank für Deine rasche und kompetente Antwort.
Zu Deiner Frage  „Wie sieht denn die Ausgabe von: ls -l /usr/local/bin aus ?“
Antwort:
[email=pi@smartpi]pi@smartpi[/email]:~ $ ls -l /usr/local/bin
insgesamt 15236
-rwxrwx--x  1 pi pi    4079 Nov 15 10:36 smartpi2emoncms.py
-rw-rwxr--  1 pi pi    3778 Feb 21 10:00 smartpi_check_umts.sh
-rwxrwx---+ 1 pi pi 4984148 Feb 21 09:48 smartpiftpupload
-rwxrwx---+ 1 pi pi 5158076 Feb 23 17:37 smartpireadout
-rwxrwx---+ 1 pi pi 5432612 Feb 21 09:46 smartpiserver

Aus meiner Beurteilung ist hier alles da, was da sein muss.
Wenn ich dann in der LXTerminal-Console das Programm  „smartpiftpupload“ manuell aufrufe, dann läuft dies fehlerfrei ab und die CSV-Datei ist korrekt und lesbar auf dem FTP-Server.
Siehe hier das Konsolenprotokoll davon:
[email=pi@smartpi]pi@smartpi[/email]:~ $ /usr/local/bin/smartpiftpupload
2017-05-07 15:39:16 2017-05-08 10:50:31
goftp: 0.000 #1 opening control connection to [192.168.0.9]:21
goftp: 0.160 #1 sending command USER smartpi
goftp: 0.326 #1 got 331-Password required for ESENN-ASP\smartpi.
goftp: 0.326 #1 sending command PASS ******
goftp: 2.551 #1 got 230-User ESENN-ASP\smartpi logged in, access restrictions apply.
goftp: 2.551 #1 sending command FEAT
goftp: 2.553 #1 got 211- Extensions supported:
 AUTH TLS
 PBSZ
 PROT
 SIZE
 MDTM
 MFMT
 REST STREAM
 UTF8
 MLST type*;modify*;size*;UNIX.mode*;UNIX.owner*;UNIX.group*;
 MLSD
End.
goftp: 2.553 #1 sending command EPSV
goftp: 2.554 #1 got 229-Entering Extended Passive Mode (|||55549|)
goftp: 2.554 #1 opening data connection to [192.168.0.9]:55549
goftp: 2.555 #1 sending command MLSD /
goftp: 2.556 #1 got 150-Opening BINARY mode data connection for 'file list'.
goftp: 2.577 #1 was ready
goftp: 2.577 #1 sending command EPSV
goftp: 2.578 #1 got 229-Entering Extended Passive Mode (|||55538|)
goftp: 2.578 #1 opening data connection to [192.168.0.9]:55538
goftp: 2.579 #1 sending command MLSD /smartpi/
goftp: 2.592 #1 got 150-Opening BINARY mode data connection for 'file list'.
goftp: 2.595 #1 was ready
goftp: 2.596 #1 was ready
goftp: 2.596 #1 sending command TYPE I
goftp: 2.597 #1 got 200-Type set to I.
goftp: 2.597 #1 sending command EPSV
goftp: 2.598 #1 got 229-Entering Extended Passive Mode (|||55544|)
goftp: 2.598 #1 opening data connection to [192.168.0.9]:55544
goftp: 2.599 #1 sending command STOR /smartpi/smartpi-166/20170508105042_smartpi-166.csv
goftp: 2.609 #1 got 150-Opening BINARY mode data connection for '/smartpi/smartpi-166/20170508105042_smartpi-166.csv'.
goftp: 2.636 #1 was ready
goftp: 2.637 #1 sending command TYPE I
goftp: 2.642 #1 got 200-Type set to I.
goftp: 2.642 #1 sending command SIZE /smartpi/smartpi-166/20170508105042_smartpi-166.csv
goftp: 2.643 #1 got 213-227534

***********  Ende Konsolenprotokoll  **************
Soweit aus meiner Beurteilung alles OK, was den FTP-Upload als solches betrifft.

Für mich stellt sich viel mehr die Frage, warum das Kommando ……
0   0  * * * pi  /usr/local/bin/smartpiftpupload
aus der Datei…
…/etc/cron.d/smartpi
nicht abgearbeitet wird?
An den FTP-Login-Informationen kann es nicht liegen, sonst würde der manuelle Aufruf von……
/usr/local/bin/smartpiftpupload
… ja scheitern.

Hypothese:
Bingt es möglicherweise etwas, wenn der Parameter …
[ftp]
ftp_upload=1
.. der Wert =1  in Semikolon gestellt wird ?  
Also …
[ftp]
ftp_upload=“1“
(gleich wie die weiteren FTP-Login-Parameter)
Beste Grüsse
Ernst

Nachtrag zum Thema FTP-Login-Informationen und Semikolon

Anscheinend spielt es keine Rolle, ob die Parameter-Werte für
ftp_server=
ftp_user=
ftp_pass=
… in Semicolon stehen oder nicht.

Habe beide Varianten getestet mittels manuellem Aufruf von …
/usr/local/bin/smartpiftpupload
.. und beide haben korrekt verbunden zum FTP.

Beste Grüsse
Ernst
Reply
#4
Lösung:


1:
Damit der CRON Dienst die Parameter-Datei   ../etc/cron.d/smartpi  abarbeitet, muss die Parameterdatei mit einer „Leerzeile“ resp. Kommentarzeile enden.
So jedenfalls der  Hinweis unter https://wiki.ubuntuusers.de/Cron/
Zitat von dort:
**********************
„Wichtig ist, dass am Ende der Tabelle ein Kommentar oder eine Leerzeile stehen. Ähnlich wie die fstab muss die crontab mit einer Leerzeile enden!“
**********************
Das  Beispiel von Jens (weiter oben) seiner ../etc/cron.d/smartpi  endet mit einer auskommentierten Zeile (also Konvention erfüllt):
Code:
MAILTO=""
# SmartPi FTP-Upload
0  0 * * * pi  /usr/local/bin/smartpiftpupload
# 0/5  * * * * root /usr/local/bin/smartpi_ckeck-umts.sh
******* ende Code Beispiel  *********
(Im SmartPI – Grundimage ist die letzte Zeile nicht auskommentiert)


2:
Im Grundimage ist der Datei-Owner von /etc/cron.d/smartpi der User pi. Und die Dateiberechtigung lässt das editieren zu.
Doch damit hat cron so seine Mühe.  Dies lässt sich in der Datei…
/var/log/syslog
… gut analysieren (Zeitpunkt suchen im Log, wann die smartpi-Datei abgearbeitet werden soll. Da lässt sich dann schnell mal folgende Meldungen lesen:
cron[458]: (*system*smartpi) WRONG FILE OWNER (/etc/cron.d/smartpi)
oder / und
cron[458]: (*system*smartpi) INSECURE MODE (/etc/cron.d/smartpi)

Lösung:
File-Owner auf     root    setzen mit…

Sudo chown –c root /etc/cron.d/smartpi 

File Rechte auf    600  setzen mit…

Sudo chmod 600 /etc/cron.d/smartpi 

Danach rebooten  oder zumindest  folgendes Command absetzen …
Sudo touch ../etc/cron.d/smartpi 


Das positive daran:
Cron arbeitet  die Parameterdatei  /etc/cron.d/smartpi  sauber ab und der FTP-UpLoad funktioniert einwandfrei

Das unschöne daran ist:
Dass der User    pi   , welcher default beim booten geladen wird, keine Zugriffs- und Editoren Rechte mehr hat auf die Datei    /etc/cron.d/smartpi  

Sollte die Datei erneut angepasst werden, so ist zuvor die Dateiberechtigung wieder auf 777 zu setzen mit…

Sudo chmod 777 /etc/cron.d/smartpi 

Eine Übersicht der Berechtigungscodes ist z.B. hier zu finden:
http://faq.scar4u.de/allgemein/chmod

Mit ..
Service cron status
.. in der Konsole wird angezeigt, ob Cron überhaupt als Daemon geladen ist und läuft.

Damit ich in Zukunft auch noch weiss, was ich gemacht habe, habe ich ein Backup der Datei   /etc/cron.d/smartpi    das so aussieht:

Code:
MAILTO=""
# SmartPi FTP-Upload
0 0 * * * pi  /usr/local/bin/smartpiftpupload
#0/5  *    * * * root /usr/local/bin/smartpi_ckeck-umts.sh
# Am Ende muss hier immer eine Kommentarzeile stehen
# Fileowner von pi auf root setzen mit   sudo chown -c root /etc/cron.d/smartpi
# Danach Rechte mit sudo chmod 600 /etc/cron.d/smartpi   setzen
# mit sudo touch /etc/cron.d/smartpi  den Cron Daemon neu laden
# zum wieder mutieren koennen Rechte mit sudo chmod 777 /etc/cron.d/smartpi   setzen


Besten Dank
Ernst

Mehr zu cron:
https://raspberry.tips/raspberrypi-einst...inrichten/
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)