After your suggestion, I went back to the NAS and double confirmed that 
write was enabled.  But I could only do this via the NAS gui.  I will need 
to do more research into the location of the conf file having to do with 
this implementation of FTP.

In the mean time I went to working on Rsync.  At first I was blocked up 
with the passwordless access required by weewx.  I eventually got that 
resolved and now have exactly the same problem... I can manually rsync from 
the rPi to the NAS without issue, but when weewx tries, it fails.  I worked 
on all sorts of permission and file owner combinations in the relevant 
strategic locations and weewx always failed.

Now I have it running, but only in a temporary workaround mode, meaning I 
simply setup a cronjob on the rPi to Rsync the html folder over to the NAS 
every time weewx post another report.  Why weewx can not do the same thing 
is really a head scratcher.

On Thursday, December 11, 2025 at 11:31:48 AM UTC-7 vince wrote:

> 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/b38c3475-9e14-4c5d-b3c2-1c161816335an%40googlegroups.com.

Reply via email to