I recreated your error exactly between a weewx 5.2 vagrant vm and another pi that I had on my LAN. I could log interactively into the ftp server, but not write to it even though os permissions were ok.
The issue was the ftp server software configuration (vsftpd in this case) which defaults to letting you log in, but not letting you write. Uncommenting one line in /etc/vsftpd.conf and restarting vsftpd fixed things. See the default answer in https://askubuntu.com/questions/410947/permission-denied-in-ftp-even-though-im-the-owner for details. Also - I fiddled with active or passive mode a little. If you see "Failed uploading...... Reason: '500 Illegal PORT command.'" that means you're set in weewx to be in active mode and the server wants passive. That happened to me too. Setting weewx back to the default passive worked fine afterwards. The FTP uploader worked fine at that point. I can't speak to how you might set up the ftp server on your NAS, but that's where the issue is. On Thursday, December 11, 2025 at 10:00:58 AM UTC-8 F Y wrote: > Thanks for the input ... this is an interesting challenge for sure and I > appreciate the help. I understand enough about the nuances of NAT's and > double NAT's, etc to be dangerous and I understand what you are implying > regarding what "may" be in the way while using the more complicated path. > But that then leaves me still wondering what underlying communication > methods/commands may be taking place within the weewx script that makes it > eventually fail, while a simple manual FTP entry at the terminal does the > job without issue. > > As to Rsync, you have read my mind and this is the next thing to try if I > can not get FTP to work. > > On Wednesday, December 10, 2025 at 8:40:42 PM UTC-7 vince wrote: > >> FTP through NAT and FTP’s use of ephemeral ports can be a pain to handle >> on the NATing system in the flow between client and server. If there is >> a function like a stateful firewall on the NATing device it gets more >> difficult. Stateful firewalls are not always straightforward, >> >> If your client works ok to a server when both are on the same subnet with >> no routes, vpm, or nat in between…and then fails when you go >> client<==>server via a more complicated path, the issue is likely your more >> complicated network setup. >> >> Can you enable ssh into the NAS and switch to using the Rsync uploader >> perhaps ? That is simpler, faster, and more reliable than ancient FTP. >> >> On Wednesday, December 10, 2025 at 7:03:59 PM UTC-8 F Y wrote: >> >>> I figured that "unusual" ip address would come up. That is an ip >>> address of one of the machines in my "tailnet", which is a mesh virtual VPN >>> running thru "Tailscale" (tailscale.com). Since many of my machines >>> are behind CGNAT, this is the only way to keep them connected remotely. >>> >>> In answer to your questions: >>> >>> >>> - >>> >>> >>> - Are your weewx system and your NAS on the same LAN ? >>> >>> >>> - >>> - They are, but they are communicating thru tailscale with >>> their mesh ip addresses. The NAS and the rPi each have their own ip >>> address in the 100.x.x.x segment >>> - >>> >>> >>> - What is the ip address of each ? >>> >>> >>> - >>> - As stated above, they each have their own address in that >>> segment. It is not reachable by anyone but other machines in my >>> tailnet >>> ... all of which are in the 100.x.x.x segment >>> - >>> >>> >>> - Which ip address have you been connecting to when you run ftp >>> manually ? >>> >>> >>> - >>> - I can connect manually to the 100.122.175.72 address, which is >>> the NAS. Manual communication between rPi and the NAS is problem >>> free. >>> >>> From the wee_report (above the logs) you will also see the connection >>> made to "Diskstation1005". This IS the NAS at the 100.122.175.72 address. >>> That report indicates a connection since it is able to read the >>> destination folder and that it exists. However it then "quit" 's after a >>> PASV command with a weird loopback address of 127.0.0.1, 218,66 and 78 on >>> subsequient attempts >>> >>> The "visibility" of the NAS from the rPi is seamless. There is no DNS >>> resolution of any sort. The weewx.conf file lists the FTP server simply >>> with the 100.x.x.x address. I can ping the address from the rPi with solid >>> results >>> On Wednesday, December 10, 2025 at 6:37:06 PM UTC-7 vince wrote: >>> >>>> The address indicated in your logs of 100.122.175.72 is a 'very' >>>> unusual address. A quick lookup at >>>> https://en.wikipedia.org/wiki/Private_network says it's related to >>>> carrier-grade NAT. >>>> >>>> >>>> - Are your weewx system and your NAS on the same LAN ? >>>> - What is the ip address of each ? >>>> - Which ip address have you been connecting to when you run ftp >>>> manually ? >>>> >>>> I wonder if you're doing a DNS lookup perhaps on your weewx system and >>>> it's resolving to an external NAT'd address (which I would expect to fail) >>>> rather than to an internal not-NAT'd address which might work. >>>> >>>> >>>> On Wednesday, December 10, 2025 at 5:16:41 PM UTC-8 F Y wrote: >>>> >>>>> After setting debug=2, this is the result of the still failing >>>>> attempts to get FTP to connect from weewx: >>>>> >>>>> >>>>> Restarting weewx after the weewx.conf change and running the report I >>>>> get this: >>>>> >>>>> >>>>> pi@raspberrypi:/var/log $ sudo /bin/wee_reports /etc/weewx/weewx.conf >>>>> >>>>> Generating as of last timestamp in the database. >>>>> >>>>> Using configuration file /etc/weewx/weewx.conf >>>>> >>>>> *get* '220 Diskstation1005 FTP server ready.\n' >>>>> >>>>> *resp* '220 Diskstation1005 FTP server ready.' >>>>> >>>>> *cmd* 'USER forrest' >>>>> >>>>> *put* 'USER forrest\r\n' >>>>> >>>>> *get* '331 Password required for forrest.\n' >>>>> >>>>> *resp* '331 Password required for forrest.' >>>>> >>>>> *cmd* 'PASS *************' >>>>> >>>>> *put* 'PASS *************\r\n' >>>>> >>>>> *get* '230 User forrest logged in.\n' >>>>> >>>>> *resp* '230 User forrest logged in.' >>>>> >>>>> *cmd* 'MKD /web/gsdglobal/Weather_GTB' >>>>> >>>>> *put* 'MKD /web/gsdglobal/Weather_GTB\r\n' >>>>> >>>>> *get* '550 /web/gsdglobal/Weather_GTB: File exists.\n' >>>>> >>>>> *resp* '550 /web/gsdglobal/Weather_GTB: File exists.' >>>>> >>>>> *cmd* 'TYPE I' >>>>> >>>>> *put* 'TYPE I\r\n' >>>>> >>>>> *get* '200 Type set to I.\n' >>>>> >>>>> *resp* '200 Type set to I.' >>>>> >>>>> *cmd* 'PASV' >>>>> >>>>> *put* 'PASV\r\n' >>>>> >>>>> *get* '227 Entering Passive Mode (127,0,0,1,218,66)\n' >>>>> >>>>> *resp* '227 Entering Passive Mode (127,0,0,1,218,66)' >>>>> >>>>> *cmd* 'QUIT' >>>>> >>>>> *put* 'QUIT\r\n' >>>>> >>>>> *get* '221 Goodbye. You uploaded 0 bytes and downloaded 0 bytes.\n' >>>>> >>>>> *resp* '221 Goodbye. You uploaded 0 bytes and downloaded 0 bytes.' >>>>> >>>>> *get* '220 Diskstation1005 FTP server ready.\n' >>>>> >>>>> *resp* '220 Diskstation1005 FTP server ready.' >>>>> >>>>> *cmd* 'USER forrest' >>>>> >>>>> *put* 'USER forrest\r\n' >>>>> >>>>> *get* '331 Password required for forrest.\n' >>>>> >>>>> *resp* '331 Password required for forrest.' >>>>> >>>>> *cmd* 'PASS *************' >>>>> >>>>> *put* 'PASS *************\r\n' >>>>> >>>>> *get* '230 User forrest logged in.\n' >>>>> >>>>> *resp* '230 User forrest logged in.' >>>>> >>>>> *cmd* 'MKD /web/gsdglobal/Weather_GTB' >>>>> >>>>> *put* 'MKD /web/gsdglobal/Weather_GTB\r\n' >>>>> >>>>> *get* '550 /web/gsdglobal/Weather_GTB: File exists.\n' >>>>> >>>>> *resp* '550 /web/gsdglobal/Weather_GTB: File exists.' >>>>> >>>>> *cmd* 'TYPE I' >>>>> >>>>> *put* 'TYPE I\r\n' >>>>> >>>>> *get* '200 Type set to I.\n' >>>>> >>>>> *resp* '200 Type set to I.' >>>>> >>>>> *cmd* 'PASV' >>>>> >>>>> *put* 'PASV\r\n' >>>>> >>>>> *get* '227 Entering Passive Mode (127,0,0,1,218,78)\n' >>>>> >>>>> *resp* '227 Entering Passive Mode (127,0,0,1,218,78)' >>>>> >>>>> *cmd* 'QUIT' >>>>> >>>>> *put* 'QUIT\r\n' >>>>> >>>>> *get* '221 Goodbye. You uploaded 0 bytes and downloaded 0 bytes.\n' >>>>> >>>>> *resp* '221 Goodbye. You uploaded 0 bytes and downloaded 0 bytes.' >>>>> >>>>> *get* '220 Diskstation1005 FTP server ready.\n' >>>>> >>>>> *resp* '220 Diskstation1005 FTP server ready.' >>>>> >>>>> *cmd* 'USER forrest' >>>>> >>>>> *put* 'USER forrest\r\n' >>>>> >>>>> *get* '331 Password required for forrest.\n' >>>>> >>>>> *resp* '331 Password required for forrest.' >>>>> >>>>> *cmd* 'PASS *************' >>>>> >>>>> *put* 'PASS *************\r\n' >>>>> >>>>> *get* '230 User forrest logged in.\n' >>>>> >>>>> *resp* '230 User forrest logged in.' >>>>> >>>>> *cmd* 'MKD /web/gsdglobal/Weather_GTB' >>>>> >>>>> *put* 'MKD /web/gsdglobal/Weather_GTB\r\n' >>>>> >>>>> *get* '550 /web/gsdglobal/Weather_GTB: File exists.\n' >>>>> >>>>> *resp* '550 /web/gsdglobal/Weather_GTB: File exists.' >>>>> >>>>> *cmd* 'TYPE I' >>>>> >>>>> *put* 'TYPE I\r\n' >>>>> >>>>> *get* '200 Type set to I.\n' >>>>> >>>>> *resp* '200 Type set to I.' >>>>> >>>>> *cmd* 'PASV' >>>>> >>>>> *put* 'PASV\r\n' >>>>> >>>>> *get* '227 Entering Passive Mode (127,0,0,1,218,79)\n' >>>>> >>>>> *resp* '227 Entering Passive Mode (127,0,0,1,218,79)' >>>>> >>>>> *cmd* 'QUIT' >>>>> >>>>> *put* 'QUIT\r\n' >>>>> >>>>> *get* '221 Goodbye. You uploaded 0 bytes and downloaded 0 bytes.\n' >>>>> >>>>> *resp* '221 Goodbye. You uploaded 0 bytes and downloaded 0 bytes.' >>>>> >>>>> pi@raspberrypi:/var/log $ >>>>> >>>>> >>>>> >>>>> And here is the last 100 lines of the log file after startup: >>>>> >>>>> pi@raspberrypi:~ $ journalctl -u weewx | tail -n 100 >>>>> >>>>> Dec 10 17:58:02 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Requesting 200 LOOP packets. >>>>> >>>>> Dec 10 17:58:03 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Successfully woke up Vantage console >>>>> >>>>> Dec 10 18:00:14 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Getting archive packets since 2025-12-10 17:30:00 >>>>> MST (1765413000) >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Successfully woke up Vantage console >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Retrieving 1 page(s); starting index= 3 >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] INFO >>>>> weewx.manager: Added record 2025-12-10 18:00:00 MST (1765414800) to >>>>> database 'weewx.sdb' >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] INFO >>>>> weewx.manager: Added record 2025-12-10 18:00:00 MST (1765414800) to daily >>>>> summary in 'weewx.sdb' >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: DMPAFT complete: page timestamp 2025-10-18 >>>>> 11:30:00 >>>>> MDT (1760808600) less than final timestamp 2025-12-10 18:00:00 MST >>>>> (1765414800) >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Catch up complete. >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Running reports for latest time in the database. >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Requesting 200 LOOP packets. >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Running report 'SeasonsReport' >>>>> >>>>> Dec 10 18:00:15 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Found configuration file >>>>> /etc/weewx/skins/Seasons/skin.conf for report 'SeasonsReport' >>>>> >>>>> Dec 10 18:00:16 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.cheetahgenerator: Using search list >>>>> ['weewx.cheetahgenerator.Almanac', 'weewx.cheetahgenerator.Current', >>>>> 'weewx.cheetahgenerator.DisplayOptions', 'weewx.cheetahgenerator.Extras', >>>>> 'weewx.cheetahgenerator.Gettext', 'weewx.cheetahgenerator.JSONHelpers', >>>>> 'weewx.cheetahgenerator.PlotInfo', 'weewx.cheetahgenerator.SkinInfo', >>>>> 'weewx.cheetahgenerator.Station', 'weewx.cheetahgenerator.Stats', >>>>> 'weewx.cheetahgenerator.UnitInfo'] >>>>> >>>>> Dec 10 18:00:16 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.manager: Daily summary version is 4.0 >>>>> >>>>> Dec 10 18:00:16 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.drivers.vantage: Successfully woke up Vantage console >>>>> >>>>> Dec 10 18:00:18 raspberrypi python3[353842]: weewx[353842] INFO >>>>> weewx.cheetahgenerator: Generated 8 files for report SeasonsReport in >>>>> 2.25 >>>>> seconds >>>>> >>>>> Dec 10 18:00:18 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.manager: Daily summary version is 4.0 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] INFO >>>>> weewx.imagegenerator: Generated 54 images for report SeasonsReport in >>>>> 4.87 >>>>> seconds >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] INFO >>>>> weewx.reportengine: Copied 5 files to /var/www/html/weewx >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Report 'SmartphoneReport' not enabled. Skipping. >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Report 'MobileReport' not enabled. Skipping. >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Report 'StandardReport' not enabled. Skipping. >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Running report 'StackedWindRose' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Found configuration file >>>>> /etc/weewx/skins/StackedWindRose/skin.conf for report 'StackedWindRose' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Cannot read localization file >>>>> /etc/weewx/skins/StackedWindRose/lang/en.conf for report >>>>> 'StackedWindRose': >>>>> Config file not found: "/etc/weewx/skins/StackedWindRose/lang/en.conf". >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: **** Using defaults instead. >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.manager: Daily summary version is 4.0 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] INFO >>>>> user.stackedwindrose: Generated 1 images for StackedWindRose in 0.04 >>>>> seconds >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Running report 'FTP' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Found configuration file >>>>> /etc/weewx/skins/Ftp/skin.conf >>>>> for report 'FTP' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: Cannot read localization file >>>>> /etc/weewx/skins/Ftp/lang/en.conf for report 'FTP': Config file not >>>>> found: >>>>> "/etc/weewx/skins/Ftp/lang/en.conf". >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weewx.reportengine: **** Using defaults instead. >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: Attempting connection to 100.122.175.72 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: Connected to 100.122.175.72 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: 0 ./yearvolt.png >>>>> a2a9c2b124013c1fafaaa0bcd25184333bf0f7ef50147f8ae945b6b24b133d82 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weeutil.ftpupload: Failed uploading /var/www/html/weewx/yearvolt.png to >>>>> server 100.122.175.72. Reason: '[Errno 111] Connection refused' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: ftpgenerator: (0): caught exception '<class >>>>> 'ConnectionRefusedError'>': [Errno 111] Connection refused >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** Traceback (most recent call last): >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File >>>>> "/usr/share/weewx/weewx/reportengine.py", line 437, in run >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** n = ftp_data.run() >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File >>>>> "/usr/share/weewx/weeutil/ftpupload.py", line 220, in run >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** ftp_server.storbinary(stor_cmd, fd) >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 491, in storbinary >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** with self.transfercmd(cmd, rest) as >>>>> conn: >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 386, in transfercmd >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** return self.ntransfercmd(cmd, >>>>> rest)[0] >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 347, in ntransfercmd >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** conn = >>>>> socket.create_connection((host, port), self.timeout, >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/socket.py", >>>>> line 843, in create_connection >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** raise err >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/socket.py", >>>>> line 831, in create_connection >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** sock.connect(sa) >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** ConnectionRefusedError: [Errno 111] >>>>> Connection refused >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: Attempting connection to 100.122.175.72 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: Connected to 100.122.175.72 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: 0 ./yearvolt.png >>>>> a2a9c2b124013c1fafaaa0bcd25184333bf0f7ef50147f8ae945b6b24b133d82 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weeutil.ftpupload: Failed uploading /var/www/html/weewx/yearvolt.png to >>>>> server 100.122.175.72. Reason: '[Errno 111] Connection refused' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: ftpgenerator: (1): caught exception '<class >>>>> 'ConnectionRefusedError'>': [Errno 111] Connection refused >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** Traceback (most recent call last): >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File >>>>> "/usr/share/weewx/weewx/reportengine.py", line 437, in run >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** n = ftp_data.run() >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File >>>>> "/usr/share/weewx/weeutil/ftpupload.py", line 220, in run >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** ftp_server.storbinary(stor_cmd, fd) >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 491, in storbinary >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** with self.transfercmd(cmd, rest) as >>>>> conn: >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 386, in transfercmd >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** return self.ntransfercmd(cmd, >>>>> rest)[0] >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 347, in ntransfercmd >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** conn = >>>>> socket.create_connection((host, port), self.timeout, >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/socket.py", >>>>> line 843, in create_connection >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** raise err >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/socket.py", >>>>> line 831, in create_connection >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** sock.connect(sa) >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** ConnectionRefusedError: [Errno 111] >>>>> Connection refused >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: Attempting connection to 100.122.175.72 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: Connected to 100.122.175.72 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] DEBUG >>>>> weeutil.ftpupload: 0 ./yearvolt.png >>>>> a2a9c2b124013c1fafaaa0bcd25184333bf0f7ef50147f8ae945b6b24b133d82 >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weeutil.ftpupload: Failed uploading /var/www/html/weewx/yearvolt.png to >>>>> server 100.122.175.72. Reason: '[Errno 111] Connection refused' >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: ftpgenerator: (2): caught exception '<class >>>>> 'ConnectionRefusedError'>': [Errno 111] Connection refused >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** Traceback (most recent call last): >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File >>>>> "/usr/share/weewx/weewx/reportengine.py", line 437, in run >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** n = ftp_data.run() >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File >>>>> "/usr/share/weewx/weeutil/ftpupload.py", line 220, in run >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** ftp_server.storbinary(stor_cmd, fd) >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 491, in storbinary >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** with self.transfercmd(cmd, rest) as >>>>> conn: >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 386, in transfercmd >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** return self.ntransfercmd(cmd, >>>>> rest)[0] >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/ftplib.py", >>>>> line 347, in ntransfercmd >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** conn = >>>>> socket.create_connection((host, port), self.timeout, >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/socket.py", >>>>> line 843, in create_connection >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** raise err >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** File "/usr/lib/python3.9/socket.py", >>>>> line 831, in create_connection >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** sock.connect(sa) >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: **** ConnectionRefusedError: [Errno 111] >>>>> Connection refused >>>>> >>>>> Dec 10 18:00:23 raspberrypi python3[353842]: weewx[353842] ERROR >>>>> weewx.reportengine: ftpgenerator: Upload failed >>>>> >>>>> >>>>> pi@raspberrypi:~ $ >>>>> >>>>> >>>>> >>>>> On Wednesday, December 10, 2025 at 2:52:55 PM UTC-7 F Y wrote: >>>>> >>>>>> And yes, weewx was stopped and restarted multiple times as I tried a >>>>>> variety of things to get it to work. Will try the debug=2 to see what >>>>>> that >>>>>> tells me >>>>>> >>>>>> On Wednesday, December 10, 2025 at 2:51:04 PM UTC-7 F Y wrote: >>>>>> >>>>>>> Yes, weewx.conf file is updated to the correct server and port >>>>>>> information. And, as stated, I CAN connect to the server manually with >>>>>>> the >>>>>>> same info over the same port 21, just won't connect with weewx doing >>>>>>> the FTP >>>>>>> >>>>>>> On Wednesday, December 10, 2025 at 2:13:17 PM UTC-7 vince wrote: >>>>>>> >>>>>>>> Connection refused generally means you are trying to connect to a >>>>>>>> server:port combination that the remote computer isn't listening on. >>>>>>>> >>>>>>>> Did you edit weewx.conf to change the 'server' and 'port' settings >>>>>>>> to match your NAS setup 'and' also restart weewx ? >>>>>>>> >>>>>>>> On Wednesday, December 10, 2025 at 12:57:28 PM UTC-8 F Y wrote: >>>>>>>> >>>>>>>>> I have an unusual FTP problem. I recently moved my weather server >>>>>>>>> from online to a locally hosed web server running on a Synology NAS. >>>>>>>>> No >>>>>>>>> matter what I do, I can not get the FTP transfer to work with the new >>>>>>>>> server on the Synology NAS. >>>>>>>>> >>>>>>>>> I'm running weewx 4.10.x >>>>>>>>> The conf file has all the correct login information and the NAS is >>>>>>>>> seemingly set up correctly because I can manually FTP into the NAS >>>>>>>>> and >>>>>>>>> transfer files with no issue. >>>>>>>>> >>>>>>>>> *When weewx used FTP to access the online service over the last 2 >>>>>>>>> years, everything worked as expected. >>>>>>>>> >>>>>>>>> * user and PW are exactly the same if manual or in weewx.conf >>>>>>>>> >>>>>>>>> -FTP server = Synology NAS DS718+ >>>>>>>>> -Using standard FTP, not FTPs or SFTP >>>>>>>>> -weewx running on Rpi4 (bullseye) >>>>>>>>> -error from log file is always "ConnectionRefusedError: [Errno >>>>>>>>> 111] Connection Refused >>>>>>>>> ftpgenerator: upload failed >>>>>>>>> >>>>>>>>> I'd rather not move to weewx v5.x, unless there is no other >>>>>>>>> solution to my problem >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/weewx-user/3e96b9c8-8370-444b-bb33-ae6685651032n%40googlegroups.com.
