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/a9bffb0e-5cd8-4250-86f6-1f5ace75c5c8n%40googlegroups.com.
