• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

WeeWX - Erster Start macht Probleme

Begonnen von noxx, 02.02.2016, 16:49:01

⏪ vorheriges - nächstes ⏩

falk

Zitat von: GS63 am 07.02.2016, 10:47:37

Steht die Einstellung secure_ftp u.U. für SFTP? Es sollte ja FTPS sein... Wird dies mit der von Dir im Link vorhandenen ftpupload.py berücksichtigt? Muss sie zusätzlich installiert werden?


Hallo Georg,

bei secure_ftp = True wird beim Ftp-Upload die Python-Klasse FTP_TLS aus der ftplib benutzt. Diese realisiert die TLS-Verschlüsselung nach RFC 4217. Soweit die Theorie.  Versuch doch einfach mal auf der Console eine Verbindung herzustellen. Dann siehst du schon einmal, wo genau die Verbindung scheitert.


python
>>> from ftplib import FTP_TLS
>>> ftps = FTP_TLS('<HOSTNAME>', 21)
>>> ftps.login('<USER>', '<PASSWORD>')
>>> ftps.set_pasv(True)
>>> ftps.prot_p()
>>> ftps.retrlines('LIST')
>>> ftps.quit()
>>> quit()



GS63

from ftplib import FTP_TLS gibt diese Meldung aus:

can't read /var/mail/ftplib

keine Änderung nach apt-get install ftplib-dev

falk

Du hast das in der Shell eingegeben?

Du musst schon vorher den Python-Interpreter mit dem Kommando python gestartet haben. Danach kannst du erst die Python-Kommandos (gekennzeichnet durch >>> ) eingeben.


GS63

OK, sorry  :oops:

Nach ftps = FTP_TLS('bernd.php-friends.de', 21) wird am Ende dies ausgegeben:

TypeError: cannot concatenate 'str' and 'int' objects

falk

Sorry, diesmal mein Fehler. Ich konnte den Code auch nicht testen, da ich auf die Schnelle keinen geeigneten FTP-Server kenne.

Gemäß Weewx müsste es so funktionieren:


python
>>> from ftplib import FTP_TLS
>>> ftps = FTP_TLS()
>>> ftps.connect('<HOSTNAME>', 21)
>>> ftps.login('<USER>', '<PASSWORD>')
>>> ftps.set_pasv(True)
>>> ftps.prot_p()
>>> ftps.retrlines('LIST')
>>> ftps.quit()
>>> quit()


Weewx verwendet für den FTP-Upload die Bibliothek ftplib und dein Fehler liegt dort. Deshalb vermute ich irgendwelche falschen Parameter, die du durch den Code hoffentlich finden und korrigieren kannst. Orientiert habe ich mich an der Dokumentation zur ftplib https://docs.python.org/2/library/ftplib.html

GS63

#15
Alle (python)-Befehle wurden ausgeführt, sprich die Anmeldung funktioniert hier...  :?

Welchen Code soll ich überprüfen?




falk

Zitat von: GS63 am 07.02.2016, 13:11:07
Alle (python)-Befehle wurden ausgeführt, sprich die Anmeldung funktioniert hier...  :?

Welchen Code soll ich überprüfen?

Das hört sich sehr gut an, dann wird es auch mit Weewx funktionieren. Du  müsstest nun prüfen, ob in Weewx in der Klasse FtpUpload auch dieselben Parameter für die FTP-Verbindung übergeben werden, also Hostname, Username und Passwort. Die Klasse FtpUpload ist bei mir in der Datei /usr/share/weewx/weeutil/ftpupload.py implementiert. Ich würde zum Testen die Datei sichern und über syslog die Parameter loggen. Dann siehst du auch, wo genau weewx aussteigt. Logge mit syslog.LOG_NOTICE. Zum Beispiel so:


syslog.syslog(syslog.LOG_NOTICE, "Hostname: %s" % self.server)
syslog.syslog(syslog.LOG_NOTICE, "Benutzername: %s" % self.user)
syslog.syslog(syslog.LOG_NOTICE, "Passwort: %s" % self.password)


Bei Python ist die Einrückung sehr wichtig. Die Loganweisungen müssen auf derselben Höhe sein, wie die nachfolgenden Anweisungen. Nach Änderungen sollte Weewx auch neu gestartet werden.

Ich bin hier gerade am Renovieren. Kann also leider nicht immer Online sein.



GS63

Zitat von: falk am 07.02.2016, 14:15:42
Logge mit syslog.LOG_NOTICE.
Bei Python ist die Einrückung sehr wichtig. Die Loganweisungen müssen auf derselben Höhe sein, wie die nachfolgenden Anweisungen.

Ich verstehe, ehrlich gesagt, nur Bahnhof. :confused:

Werde wohl das Handtuch werden müssen...

falk

Zitat von: GS63 am 07.02.2016, 15:52:57

Ich verstehe, ehrlich gesagt, nur Bahnhof. :confused:

Werde wohl das Handtuch werden müssen...

Nix da  :x  :D Hier ist Geduld gefragt.

Da Weewx in Python geschrieben ist, hast du auch die Möglichkeit im Source-Code Änderungen durchzuführen. Hier, um zu schauen ob auch alle Parameter richtig übergeben werden.

In der Datei ftpupload.py bietet es sich an, die Verbindungsparameter zu loggen. Hierzu müsst du nur folgenden Code hinzufügen (vorher sichern!)


    def run(self):
        """Perform the actual upload.

        returns: the number of files uploaded."""

        syslog.syslog(syslog.LOG_NOTICE, "Hostname: %s" % self.server)
        syslog.syslog(syslog.LOG_NOTICE, "Benutzername: %s" % self.user)
        syslog.syslog(syslog.LOG_NOTICE, "Passwort: %s" % self.password)

        if self.secure:
            try:
                FTPClass = ftplib.FTP_TLS
            except AttributeError:
                FTPClass = ftplib.FTP
                syslog.syslog(syslog.LOG_DEBUG, "ftpupload: Your version of Python does not support SFTP. Using unsecure connection.")
                self.secure = False
        else:
            FTPClass = ftplib.FTP


Also ab Zeile 71 die drei Syslog-Zeilen hinzufügen, Weewx neu starten und im Logfile die Ausgabe prüfen. Ich vermute, dass vielleicht der Benutzername oder das Passwort nicht stimmt. Du kannst auch durch zusätzliche Logausgaben in den nächsten Zeilen prüfen, wo Weewx mit dem Fehler aussteigt.


GS63

#19
Feb  7 18:32:13 raspberrypi weewx[2345]: Hostname: bernd.php-friends.de
Feb  7 18:32:13 raspberrypi weewx[2345]: Benutzername: xxxxxxxxxxxxxxxx
Feb  7 18:32:13 raspberrypi weewx[2345]: Passwort:

Das Passwort wird nicht übermittelt, es steht aber definitiv in der weewx.conf  :confused: :eek:

Liegt es vielleicht an Sonderzeichen im Passwort?

Ich fasse es nicht. Nachdem ich das Passwort in Hochkommas gesetzt habe, funktioniert der FTP-Upload.

Falk. Vielen lieben Dank für Deine Hilfe; und das noch trotz Renovierung!